diff --git a/greenmine/base/auth/api.py b/greenmine/base/auth/api.py index c10719df..70d5edec 100644 --- a/greenmine/base/auth/api.py +++ b/greenmine/base/auth/api.py @@ -9,8 +9,8 @@ from rest_framework.permissions import AllowAny from rest_framework import status, viewsets from rest_framework.decorators import list_route -from greenmine.base.models import SiteMember -from greenmine.base.sites import get_active_site +from greenmine.base.domains.models import DomainMember +from greenmine.base.domains import get_active_domain from greenmine.base.users.models import User, Role from greenmine.base.users.serializers import UserSerializer from greenmine.base import exceptions as exc @@ -31,13 +31,13 @@ class AuthViewSet(viewsets.ViewSet): response_data["auth_token"] = auth.get_token_for_user(user) return response_data - def _create_site_member(self, user): - site = get_active_site() + def _create_domain_member(self, user): + domain = get_active_domain() - if SiteMember.objects.filter(site=site, user=user).count() == 0: - site_member = SiteMember(site=site, user=user, email=user.email, + if DomainMember.objects.filter(site=domain, user=user).count() == 0: + domain_member = DomainMember(site=domain, user=user, email=user.email, is_owner=False, is_staff=False) - site_member.save() + domain_member.save() def _send_public_register_email(self, user): context = {"user": user} @@ -47,8 +47,8 @@ class AuthViewSet(viewsets.ViewSet): email.send() def _public_register(self, request): - if not request.site.public_register: - raise exc.BadRequest("Public register is disabled for this site.") + if not request.domain.public_register: + raise exc.BadRequest("Public register is disabled for this domain.") serializer = PublicRegisterSerializer(data=request.DATA) if not serializer.is_valid(): @@ -63,7 +63,7 @@ class AuthViewSet(viewsets.ViewSet): user.set_password(data["password"]) user.save() - self._create_site_member(user) + self._create_domain_member(user) #self._send_public_register_email(user) @@ -111,7 +111,7 @@ class AuthViewSet(viewsets.ViewSet): user.set_password(data["password"]) user.save() - self._create_site_member(user) + self._create_domain_member(user) membership.user = user membership.save() diff --git a/greenmine/base/auth/tests/tests_auth.py b/greenmine/base/auth/tests/tests_auth.py index 3c8811b9..e4031ec3 100644 --- a/greenmine/base/auth/tests/tests_auth.py +++ b/greenmine/base/auth/tests/tests_auth.py @@ -15,10 +15,10 @@ from rest_framework.response import Response from greenmine import urls from greenmine.base import auth -from greenmine.base.users.tests import create_user, create_site +from greenmine.base.users.tests import create_user, create_domain from greenmine.projects.tests import create_project -from greenmine.base.models import Site, SiteMember +from greenmine.base.domains.models import Domain, DomainMember from greenmine.projects.models import Membership @@ -36,7 +36,7 @@ urls.urlpatterns += patterns("", class TokenAuthTests(test.TestCase): - fixtures = ["initial_site.json"] + fixtures = ["initial_domains.json",] def setUp(self): self.user1 = create_user(1) @@ -53,10 +53,12 @@ class TokenAuthTests(test.TestCase): class RegisterTests(test.TestCase): + fixtures = ["initial_domains.json",] + def setUp(self): self.user1 = create_user(1) - self.site1 = create_site("localhost1", True) - self.site2 = create_site("localhost2", False) + self.site1 = create_domain("localhost1", True) + self.site2 = create_domain("localhost2", False) self.role = self._create_role() self.project = create_project(1, self.user1) @@ -74,7 +76,7 @@ class RegisterTests(test.TestCase): response = self.client.post(url, data, HTTP_X_HOST=self.site1.name) self.assertEqual(response.status_code, 201) - self.assertEqual(SiteMember.objects.filter(site=self.site1).count(), 1) + self.assertEqual(DomainMember.objects.filter(site=self.site1).count(), 1) self.assertEqual(self.project.memberships.count(), 0) @@ -130,8 +132,8 @@ class RegisterTests(test.TestCase): self.assertEqual(response.status_code, 201) self.assertEqual(self.project.memberships.exclude(user__isnull=True).count(), 1) self.assertEqual(self.project.memberships.get().role, self.role) - self.assertEqual(SiteMember.objects.filter(site=self.site1).count(), 0) - self.assertEqual(SiteMember.objects.filter(site=self.site2).count(), 1) + self.assertEqual(DomainMember.objects.filter(site=self.site1).count(), 0) + self.assertEqual(DomainMember.objects.filter(site=self.site2).count(), 1) def test_private_register_03(self): membership = self._create_invitation("pepe@pepe.com") @@ -154,8 +156,8 @@ class RegisterTests(test.TestCase): self.assertEqual(response.status_code, 201) self.assertEqual(self.project.memberships.exclude(user__isnull=True).count(), 1) self.assertEqual(self.project.memberships.get().role, self.role) - self.assertEqual(SiteMember.objects.filter(site=self.site1).count(), 0) - self.assertEqual(SiteMember.objects.filter(site=self.site2).count(), 1) + self.assertEqual(DomainMember.objects.filter(site=self.site1).count(), 0) + self.assertEqual(DomainMember.objects.filter(site=self.site2).count(), 1) def _create_invitation(self, email): diff --git a/greenmine/base/domains/__init__.py b/greenmine/base/domains/__init__.py new file mode 100644 index 00000000..24623f53 --- /dev/null +++ b/greenmine/base/domains/__init__.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import logging +from threading import local + +from django.db.models import get_model +from django.core.exceptions import ImproperlyConfigured + +from .. import exceptions as exc + + +_local = local() +log = logging.getLogger("greenmine.domains") + + +class DomainNotFound(exc.BaseException): + pass + + +def get_default_domain(): + from django.conf import settings + try: + sid = settings.SITE_ID + except AttributeError: + raise ImproperlyConfigured("You're using the \"domains framework\" without having " + "set the DOMAIN_ID setting. Create a domain in your database " + "and set the DOMAIN_ID setting to fix this error.") + + model_cls = get_model("domains", "Domain") + cached = getattr(_local, "default_domain", None) + if cached is None: + try: + cached = _local.default_domain = model_cls.objects.get(pk=sid) + except model_cls.DoesNotExist: + raise ImproperlyConfigured("default domain not found on database.") + + return cached + + +def get_domain_for_domain_name(domain): + log.debug("Trying activate domain for domain name: {}".format(domain)) + cache = getattr(_local, "cache", {}) + + if domain in cache: + return cache[domain] + + model_cls = get_model("domains", "Domain") + + try: + domain = model_cls.objects.get(domain=domain) + except model_cls.DoesNotExist: + log.warning("Domain does not exist for domain: {}".format(domain)) + raise DomainNotFound("domain not found") + else: + cache[domain] = domain + + return domain + + +def activate(domain): + log.debug("Activating domain: {}".format(domain)) + _local.active_domain = domain + + +def deactivate(): + if hasattr(_local, "active_domain"): + log.debug("Deactivating domain: {}".format(_local.active_domain)) + del _local.active_domain + + +def get_active_domain(): + active_domain = getattr(_local, "active_domain", None) + if active_domain is None: + return get_default_domain() + return active_domain + +def clear_domain_cache(**kwargs): + if hasattr(_local, "default_domain"): + del _local.default_domain + + if hasattr(_local, "cache"): + del _local.cache diff --git a/greenmine/base/admin.py b/greenmine/base/domains/admin.py similarity index 51% rename from greenmine/base/admin.py rename to greenmine/base/domains/admin.py index ba63c907..ff35b1ac 100644 --- a/greenmine/base/admin.py +++ b/greenmine/base/domains/admin.py @@ -1,9 +1,10 @@ from django.contrib import admin -from .models import Site + +from .models import Domain -class SiteAdmin(admin.ModelAdmin): +class DomainAdmin(admin.ModelAdmin): list_display = ('domain', 'name') search_fields = ('domain', 'name') -admin.site.register(Site, SiteAdmin) +admin.site.register(Domain, DomainAdmin) diff --git a/greenmine/base/apiviews.py b/greenmine/base/domains/api.py similarity index 61% rename from greenmine/base/apiviews.py rename to greenmine/base/domains/api.py index fd071765..7c46fc66 100644 --- a/greenmine/base/apiviews.py +++ b/greenmine/base/domains/api.py @@ -4,9 +4,9 @@ from rest_framework import viewsets from rest_framework.response import Response -class SiteViewSet(viewsets.ViewSet): +class DomainViewSet(viewsets.ViewSet): def status(self, request, **kwargs): return Response({}) -sitestatus = SiteViewSet.as_view({"head": "status", "get": "status"}) +domainstatus = DomainViewSet.as_view({"head": "status", "get": "status"}) diff --git a/greenmine/base/fixtures/initial_site.json b/greenmine/base/domains/fixtures/initial_domains.json similarity index 53% rename from greenmine/base/fixtures/initial_site.json rename to greenmine/base/domains/fixtures/initial_domains.json index a50d85c3..99138275 100644 --- a/greenmine/base/fixtures/initial_site.json +++ b/greenmine/base/domains/fixtures/initial_domains.json @@ -1,8 +1,10 @@ [ { - "model": "base.site", + "model": "domains.domain", "fields": { + "public_register": false, "domain": "localhost", + "scheme": null, "name": "localhost" }, "pk": 1 diff --git a/greenmine/base/domains/middleware.py b/greenmine/base/domains/middleware.py new file mode 100644 index 00000000..14f5a561 --- /dev/null +++ b/greenmine/base/domains/middleware.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +import json + +from django import http + +from greenmine.base import domains +from greenmine.base.exceptions import format_exception + + +class DomainsMiddleware(object): + def process_request(self, request): + domain = request.META.get("HTTP_X_HOST", None) + if domain is not None: + try: + domain = domains.get_domain_for_domain_name(domain) + except domains.DomainNotFound as e: + detail = format_exception(e) + return http.HttpResponseBadRequest(json.dumps(detail)) + else: + domain = domains.get_default_domain() + + request.domain = domain + domains.activate(domain) + + def process_response(self, request, response): + domains.deactivate() + + if hasattr(request, "domain"): + response["X-Site-Host"] = request.domain.domain + response["X-Site-Register"] = "on" if request.domain.public_register else "off" + + return response diff --git a/greenmine/base/migrations/0002_auto__add_site__add_sitemember__add_unique_sitemember_site_user.py b/greenmine/base/domains/migrations/0001_initial.py similarity index 67% rename from greenmine/base/migrations/0002_auto__add_site__add_sitemember__add_unique_sitemember_site_user.py rename to greenmine/base/domains/migrations/0001_initial.py index c897f4dd..99200993 100644 --- a/greenmine/base/migrations/0002_auto__add_site__add_sitemember__add_unique_sitemember_site_user.py +++ b/greenmine/base/domains/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -8,104 +8,105 @@ from django.db import models class Migration(SchemaMigration): def forwards(self, orm): - # Adding model 'Site' - db.create_table('base_site', ( + # Adding model 'Domain' + db.create_table('domains_domain', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('domain', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('domain', self.gf('django.db.models.fields.CharField')(max_length=255, unique=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), - ('scheme', self.gf('django.db.models.fields.CharField')(max_length=60, default=None, null=True)), + ('scheme', self.gf('django.db.models.fields.CharField')(max_length=60, null=True, default=None)), ('public_register', self.gf('django.db.models.fields.BooleanField')(default=False)), )) - db.send_create_signal('base', ['Site']) + db.send_create_signal('domains', ['Domain']) - # Adding model 'SiteMember' - db.create_table('base_sitemember', ( + # Adding model 'DomainMember' + db.create_table('domains_domainmember', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('site', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['base.Site'])), + ('site', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['domains.Domain'])), ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['users.User'])), ('email', self.gf('django.db.models.fields.EmailField')(max_length=255)), ('is_owner', self.gf('django.db.models.fields.BooleanField')(default=False)), ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)), )) - db.send_create_signal('base', ['SiteMember']) + db.send_create_signal('domains', ['DomainMember']) + + # Adding unique constraint on 'DomainMember', fields ['site', 'user'] + db.create_unique('domains_domainmember', ['site_id', 'user_id']) - # Adding unique constraint on 'SiteMember', fields ['site', 'user'] - db.create_unique('base_sitemember', ['site_id', 'user_id']) def backwards(self, orm): - # Removing unique constraint on 'SiteMember', fields ['site', 'user'] - db.delete_unique('base_sitemember', ['site_id', 'user_id']) + # Removing unique constraint on 'DomainMember', fields ['site', 'user'] + db.delete_unique('domains_domainmember', ['site_id', 'user_id']) - # Deleting model 'Site' - db.delete_table('base_site') + # Deleting model 'Domain' + db.delete_table('domains_domain') - # Deleting model 'SiteMember' - db.delete_table('base_sitemember') + # Deleting model 'DomainMember' + db.delete_table('domains_domainmember') models = { 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['auth.Permission']", 'symmetrical': 'False'}) + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}) }, 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)"}, 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, - 'base.site': { - 'Meta': {'object_name': 'Site', 'ordering': "('domain',)"}, - 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scheme': ('django.db.models.fields.CharField', [], {'max_length': '60', 'default': 'None', 'null': 'True'}) - }, - 'base.sitemember': { - 'Meta': {'object_name': 'SiteMember', 'ordering': "['email']", 'unique_together': "(('site', 'user'),)"}, - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'site': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['base.Site']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['users.User']"}) - }, 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)"}, + 'Meta': {'ordering': "('name',)", 'db_table': "'django_content_type'", 'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + 'domains.domain': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Domain'}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'max_length': '60', 'null': 'True', 'default': 'None'}) + }, + 'domains.domainmember': { + 'Meta': {'ordering': "['email']", 'object_name': 'DomainMember', 'unique_together': "(('site', 'user'),)"}, + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['domains.Domain']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['users.User']"}) + }, 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True', 'default': "'#669933'"}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), + 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True', 'default': "''"}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True', 'default': "''"}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), - 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['auth.Group']", 'related_name': "'user_set'", 'symmetrical': 'False'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'blank': 'True', 'max_length': '500', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '200', 'default': 'None', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['auth.Permission']", 'related_name': "'user_set'", 'symmetrical': 'False'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), + 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True', 'null': 'True', 'default': 'None'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False'}), + 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) } } - complete_apps = ['base'] + complete_apps = ['domains'] \ No newline at end of file diff --git a/greenmine/base/migrations/__init__.py b/greenmine/base/domains/migrations/__init__.py similarity index 100% rename from greenmine/base/migrations/__init__.py rename to greenmine/base/domains/migrations/__init__.py diff --git a/greenmine/base/domains/models.py b/greenmine/base/domains/models.py new file mode 100644 index 00000000..f37231e5 --- /dev/null +++ b/greenmine/base/domains/models.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +import string + +from django.db import models +from django.db.models.signals import pre_save, pre_delete +from django.utils.translation import ugettext_lazy as _ +from django.core.exceptions import ValidationError + +from . import clear_domain_cache + + +def _simple_domain_name_validator(value): + """ + Validates that the given value contains no whitespaces to prevent common + typos. + """ + if not value: + return + + checks = ((s in value) for s in string.whitespace) + if any(checks): + raise ValidationError( + _("The domain name cannot contain any spaces or tabs."), + code='invalid', + ) + + +class Domain(models.Model): + domain = models.CharField(_('domain name'), max_length=255, unique=True, + validators=[_simple_domain_name_validator]) + name = models.CharField(_('display name'), max_length=255) + scheme = models.CharField(_('scheme'), max_length=60, null=True, default=None) + + # Site Metadata + public_register = models.BooleanField(default=False) + + class Meta: + verbose_name = _('domain') + verbose_name_plural = _('domain') + ordering = ('domain',) + + def __str__(self): + return self.domain + + +class DomainMember(models.Model): + site = models.ForeignKey("Domain", related_name="+") + user = models.ForeignKey("users.User", related_name="+", null=True) + + email = models.EmailField(max_length=255) + is_owner = models.BooleanField(default=False) + is_staff = models.BooleanField(default=False) + + class Meta: + ordering = ["email"] + verbose_name = "Domain Member" + verbose_name_plural = "Domain Members" + unique_together = ("site", "user") + + def __str__(self): + return "DomainMember: {0}:{1}".format(self.site, self.user) + + +pre_save.connect(clear_domain_cache, sender=Domain) +pre_delete.connect(clear_domain_cache, sender=Domain) diff --git a/greenmine/base/middleware.py b/greenmine/base/middleware.py index 8f1591b0..72fa1cc3 100644 --- a/greenmine/base/middleware.py +++ b/greenmine/base/middleware.py @@ -3,7 +3,6 @@ import json from django import http -from greenmine.base import sites COORS_ALLOWED_ORIGINS = '*' @@ -16,8 +15,6 @@ COORS_EXPOSE_HEADERS = ["x-pagination-count", "x-paginated", "x-paginated-by", "x-paginated-by", "x-pagination-current", "x-site-host", "x-site-register"] -from .exceptions import format_exception - class CoorsMiddleware(object): def _populate_response(self, response): @@ -39,28 +36,3 @@ class CoorsMiddleware(object): def process_response(self, request, response): self._populate_response(response) return response - - -class SitesMiddleware(object): - def process_request(self, request): - domain = request.META.get("HTTP_X_HOST", None) - if domain is not None: - try: - site = sites.get_site_for_domain(domain) - except sites.SiteNotFound as e: - detail = format_exception(e) - return http.HttpResponseBadRequest(json.dumps(detail)) - else: - site = sites.get_default_site() - - request.site = site - sites.activate(site) - - def process_response(self, request, response): - sites.deactivate() - - if hasattr(request, "site"): - response["X-Site-Host"] = request.site.domain - response["X-Site-Register"] = "on" if request.site.public_register else "off" - - return response diff --git a/greenmine/base/migrations/0001_initial.py b/greenmine/base/migrations/0001_initial.py deleted file mode 100644 index fc281e75..00000000 --- a/greenmine/base/migrations/0001_initial.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - pass - - def backwards(self, orm): - pass - - models = { - - } - - complete_apps = ['base'] \ No newline at end of file diff --git a/greenmine/base/migrations/0003_initial_sites_data.py b/greenmine/base/migrations/0003_initial_sites_data.py deleted file mode 100644 index ea161e97..00000000 --- a/greenmine/base/migrations/0003_initial_sites_data.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import DataMigration -from django.db import models - -class Migration(DataMigration): - - def forwards(self, orm): - "Write your forwards methods here." - # Note: Don't use "from appname.models import ModelName". - # Use orm.ModelName to refer to models in this application, - # and orm['appname.ModelName'] for models in other applications. - - from django.core.management import call_command - call_command("loaddata", "initial_site.json") - - site = orm["base.Site"].objects.get(pk=1) - - for user in orm["users.User"].objects.all(): - orm["base.SiteMember"].objects.create(user=user, site=site, email=user.email) - - orm["base.SiteMember"].objects.filter(user_id=1).update(is_staff=True, is_owner=True) - - - def backwards(self, orm): - "Write your backwards methods here." - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'base.site': { - 'Meta': {'object_name': 'Site', 'ordering': "('domain',)"}, - 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scheme': ('django.db.models.fields.CharField', [], {'default': 'None', 'null': 'True', 'max_length': '60'}) - }, - 'base.sitemember': { - 'Meta': {'unique_together': "(('site', 'user'),)", 'object_name': 'SiteMember', 'ordering': "['email']"}, - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_owner': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'site': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['base.Site']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['users.User']", 'null': 'True'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'", 'ordering': "('name',)"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'default': "'#669933'", 'blank': 'True', 'max_length': '9'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'default': "''", 'blank': 'True', 'max_length': '20'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'default': "''", 'blank': 'True', 'max_length': '20'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), - 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'related_name': "'user_set'", 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'default': "'all_owned_projects'", 'max_length': '32'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'blank': 'True', 'null': 'True', 'max_length': '500'}), - 'token': ('django.db.models.fields.CharField', [], {'default': 'None', 'blank': 'True', 'null': 'True', 'max_length': '200'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'related_name': "'user_set'", 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - } - } - - complete_apps = ['base'] - symmetrical = True diff --git a/greenmine/base/models.py b/greenmine/base/models.py index afa278df..ed0aa24c 100644 --- a/greenmine/base/models.py +++ b/greenmine/base/models.py @@ -1,70 +1,5 @@ # -*- coding: utf-8 -*- -import string - -from django.db import models -from django.db.models.signals import pre_save, pre_delete -from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError - -from . import sites - - -def _simple_domain_name_validator(value): - """ - Validates that the given value contains no whitespaces to prevent common - typos. - """ - if not value: - return - checks = ((s in value) for s in string.whitespace) - if any(checks): - raise ValidationError( - _("The domain name cannot contain any spaces or tabs."), - code='invalid', - ) - - -class Site(models.Model): - domain = models.CharField(_('domain name'), max_length=255, unique=True, - validators=[_simple_domain_name_validator]) - name = models.CharField(_('display name'), max_length=255) - scheme = models.CharField(_('scheme'), max_length=60, null=True, default=None) - - # Site Metadata - public_register = models.BooleanField(default=False) - - class Meta: - verbose_name = _('site') - verbose_name_plural = _('sites') - ordering = ('domain',) - - def __str__(self): - return self.domain - - -class SiteMember(models.Model): - site = models.ForeignKey("Site", related_name="+") - user = models.ForeignKey("users.User", related_name="+", null=True) - - email = models.EmailField(max_length=255) - is_owner = models.BooleanField(default=False) - is_staff = models.BooleanField(default=False) - - class Meta: - ordering = ["email"] - verbose_name = "Site Member" - verbose_name_plural = "Site Members" - unique_together = ("site", "user") - - def __str__(self): - return "SiteMember: {0}:{1}".format(self.site, self.user) - - -pre_save.connect(sites.clear_site_cache, sender=Site) -pre_delete.connect(sites.clear_site_cache, sender=Site) - - # Patch api view for correctly return 401 responses on # request is authenticated instead of 403 from . import monkey diff --git a/greenmine/base/sites.py b/greenmine/base/sites.py deleted file mode 100644 index 4bf024ac..00000000 --- a/greenmine/base/sites.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -from threading import local - -from django.db.models import get_model -from django.core.exceptions import ImproperlyConfigured - -from . import exceptions as exc - - -_local = local() -log = logging.getLogger("greenmine.sites") - - -class SiteNotFound(exc.BaseException): - pass - - -def get_default_site(): - from django.conf import settings - try: - sid = settings.SITE_ID - except AttributeError: - raise ImproperlyConfigured("You're using the \"sites framework\" without having " - "set the SITE_ID setting. Create a site in your database " - "and set the SITE_ID setting to fix this error.") - - model_cls = get_model("base", "Site") - cached = getattr(_local, "default_site", None) - if cached is None: - try: - cached = _local.default_site = model_cls.objects.get(pk=sid) - except model_cls.DoesNotExist: - raise ImproperlyConfigured("default site not found on database.") - - return cached - - -def get_site_for_domain(domain): - log.debug("Trying activate site for domain: {}".format(domain)) - cache = getattr(_local, "cache", {}) - - if domain in cache: - return cache[domain] - - model_cls = get_model("base", "Site") - - try: - site = model_cls.objects.get(domain=domain) - except model_cls.DoesNotExist: - log.warning("Site does not exist for domain: {}".format(domain)) - raise SiteNotFound("site not found") - else: - cache[domain] = site - - return site - - -def activate(site): - log.debug("Activating site: {}".format(site)) - _local.active_site = site - - -def deactivate(): - if hasattr(_local, "active_site"): - log.debug("Deactivating site: {}".format(_local.active_site)) - del _local.active_site - - -def get_active_site(): - active_site = getattr(_local, "active_site", None) - if active_site is None: - return get_default_site() - return active_site - -def clear_site_cache(**kwargs): - if hasattr(_local, "default_site"): - del _local.default_site - - if hasattr(_local, "cache"): - del _local.cache diff --git a/greenmine/base/users/fixtures/initial_user.json b/greenmine/base/users/fixtures/initial_user.json index 44df13e2..8aaada52 100644 --- a/greenmine/base/users/fixtures/initial_user.json +++ b/greenmine/base/users/fixtures/initial_user.json @@ -23,5 +23,16 @@ "email": "niwi@niwi.be", "date_joined": "2013-04-01T13:48:21.711Z" } +}, +{ + "model": "domains.domainmember", + "pk": 1, + "fields": { + "is_staff": true, + "is_owner": true, + "user": 1, + "site": 1, + "email": "niwi@niwi.be" + } } ] diff --git a/greenmine/base/users/migrations/0001_initial.py b/greenmine/base/users/migrations/0001_initial.py index 6fdf1d1c..f32d943e 100644 --- a/greenmine/base/users/migrations/0001_initial.py +++ b/greenmine/base/users/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -15,18 +15,20 @@ class Migration(SchemaMigration): ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)), ('username', self.gf('django.db.models.fields.CharField')(max_length=30, unique=True)), - ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), - ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), - ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)), + ('first_name', self.gf('django.db.models.fields.CharField')(blank=True, max_length=30)), + ('last_name', self.gf('django.db.models.fields.CharField')(blank=True, max_length=30)), + ('email', self.gf('django.db.models.fields.EmailField')(blank=True, max_length=75)), ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)), ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)), ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), - ('color', self.gf('django.db.models.fields.CharField')(default='#669933', max_length=9, blank=True)), + ('notify_level', self.gf('django.db.models.fields.CharField')(max_length=32, default='all_owned_projects')), + ('notify_changes_by_me', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('color', self.gf('django.db.models.fields.CharField')(blank=True, max_length=9, default='#669933')), ('description', self.gf('django.db.models.fields.TextField')(blank=True)), - ('photo', self.gf('django.db.models.fields.files.FileField')(max_length=500, blank=True, null=True)), - ('default_language', self.gf('django.db.models.fields.CharField')(default='', max_length=20, blank=True)), - ('default_timezone', self.gf('django.db.models.fields.CharField')(default='', max_length=20, blank=True)), - ('token', self.gf('django.db.models.fields.CharField')(default=None, max_length=200, blank=True, null=True)), + ('photo', self.gf('django.db.models.fields.files.FileField')(blank=True, max_length=500, null=True)), + ('default_language', self.gf('django.db.models.fields.CharField')(blank=True, max_length=20, default='')), + ('default_timezone', self.gf('django.db.models.fields.CharField')(blank=True, max_length=20, default='')), + ('token', self.gf('django.db.models.fields.CharField')(blank=True, max_length=200, default=None, null=True)), ('colorize_tags', self.gf('django.db.models.fields.BooleanField')(default=False)), )) db.send_create_signal('users', ['User']) @@ -53,7 +55,7 @@ class Migration(SchemaMigration): db.create_table('users_role', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - ('slug', self.gf('django.db.models.fields.SlugField')(max_length=250, unique=True, blank=True)), + ('slug', self.gf('django.db.models.fields.SlugField')(blank=True, max_length=250, unique=True)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), ('computable', self.gf('django.db.models.fields.BooleanField')(default=True)), )) @@ -91,52 +93,54 @@ class Migration(SchemaMigration): 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Permission']", 'blank': 'True'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Permission']"}) }, 'auth.permission': { - 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'object_name': 'Permission'}, + 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'contenttypes.contenttype': { - 'Meta': {'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'Meta': {'object_name': 'ContentType', 'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, 'users.role': { - 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, + 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) + 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'max_length': '250', 'unique': 'True'}) }, 'users.user': { - 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'default': "'#669933'", 'max_length': '9', 'blank': 'True'}), + 'Meta': {'object_name': 'User', 'ordering': "['username']"}, + 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), + 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Group']", 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '200', 'blank': 'True', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Permission']", 'blank': 'True'}), + 'photo': ('django.db.models.fields.files.FileField', [], {'blank': 'True', 'max_length': '500', 'null': 'True'}), + 'token': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '200', 'default': 'None', 'null': 'True'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) } } diff --git a/greenmine/base/users/migrations/0002_auto__add_field_user_notify_level__add_field_user_notify_changes_by_me.py b/greenmine/base/users/migrations/0002_auto__add_field_user_notify_level__add_field_user_notify_changes_by_me.py deleted file mode 100644 index 78ff57db..00000000 --- a/greenmine/base/users/migrations/0002_auto__add_field_user_notify_level__add_field_user_notify_changes_by_me.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'User.notify_level' - db.add_column('users_user', 'notify_level', - self.gf('django.db.models.fields.CharField')(max_length=32, default='all_owned_projects'), - keep_default=False) - - # Adding field 'User.notify_changes_by_me' - db.add_column('users_user', 'notify_changes_by_me', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'User.notify_level' - db.delete_column('users_user', 'notify_level') - - # Deleting field 'User.notify_changes_by_me' - db.delete_column('users_user', 'notify_changes_by_me') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'default': 'None', 'blank': 'True', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - } - } - - complete_apps = ['users'] \ No newline at end of file diff --git a/greenmine/base/users/tests/__init__.py b/greenmine/base/users/tests/__init__.py index 8e22a779..6eac971a 100644 --- a/greenmine/base/users/tests/__init__.py +++ b/greenmine/base/users/tests/__init__.py @@ -5,6 +5,8 @@ from django.db.models.loading import get_model def create_user(id, save=True, is_superuser=False): model = get_model("users", "User") + domain_member_model = get_model("domains", "DomainMember") + domain_model = get_model("domains", "Domain") instance = model( username="user{0}".format(id), @@ -18,17 +20,26 @@ def create_user(id, save=True, is_superuser=False): instance.is_staff = True instance.is_superuser = True - if save: - instance.save() + instance.save() + + domain = domain_model.objects.get(pk=1) + dm = domain_member_model.objects.create(user=instance, + email=instance.email, + site=domain) + if id == 1: + dm.is_owner = True + dm.is_staff = True + dm.save() + return instance -def create_site(name, public_register=False): - site_model = get_model("base", "Site") +def create_domain(name, public_register=False): + domain_model = get_model("domains", "Domain") - instance = site_model(name=name, - domain=name, - public_register=public_register) + instance = domain_model(name=name, + domain=name, + public_register=public_register) instance.save() return instance diff --git a/greenmine/front/__init__.py b/greenmine/front/__init__.py index 7262609e..7bff8df9 100644 --- a/greenmine/front/__init__.py +++ b/greenmine/front/__init__.py @@ -3,7 +3,7 @@ from django.conf import settings from django_jinja import library -from greenmine.base import sites +from greenmine.base import domains URLS = { @@ -24,9 +24,9 @@ lib = library.Library() @lib.global_function(name="resolve_front_url") def resolve(type, *args): - site = sites.get_active_site() + domain = domains.get_active_domain() url_tmpl = "{scheme}//{domain}{url}" - scheme = site.scheme and "{0}:".format(site.scheme) or "" + scheme = domain.scheme and "{0}:".format(domain.scheme) or "" url = URLS[type].format(*args) - return url_tmpl.format(scheme=scheme, domain=site.domain, url=url) + return url_tmpl.format(scheme=scheme, domain=domain.domain, url=url) diff --git a/greenmine/projects/api.py b/greenmine/projects/api.py index de864671..dbdf9c2a 100644 --- a/greenmine/projects/api.py +++ b/greenmine/projects/api.py @@ -61,10 +61,12 @@ class ProjectViewSet(ModelCrudViewSet): def pre_save(self, obj): obj.owner = self.request.user + # FIXME + # Assign site only if it current # value is None if not obj.site: - obj.site = self.request.site + obj.site = self.request.domain super().pre_save(obj) diff --git a/greenmine/projects/issues/migrations/0001_initial.py b/greenmine/projects/issues/migrations/0001_initial.py index 3bbf98ae..8679168c 100644 --- a/greenmine/projects/issues/migrations/0001_initial.py +++ b/greenmine/projects/issues/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -11,21 +11,20 @@ class Migration(SchemaMigration): # Adding model 'Issue' db.create_table('issues_issue', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('uuid', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True, unique=True)), - ('ref', self.gf('django.db.models.fields.BigIntegerField')(db_index=True, default=None, null=True, blank=True)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], default=None, related_name='owned_issues', null=True, blank=True)), - ('status', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issues', to=orm['projects.IssueStatus'])), - ('severity', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issues', to=orm['projects.Severity'])), - ('priority', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issues', to=orm['projects.Priority'])), - ('type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issues', to=orm['projects.IssueType'])), - ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['milestones.Milestone'], default=None, related_name='issues', null=True, blank=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issues', to=orm['projects.Project'])), - ('created_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now_add=True)), - ('modified_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now_add=True)), + ('ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=None, db_index=True, blank=True)), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], null=True, default=None, related_name='owned_issues', blank=True)), + ('status', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.IssueStatus'], related_name='issues')), + ('severity', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Severity'], related_name='issues')), + ('priority', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Priority'], related_name='issues')), + ('type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.IssueType'], related_name='issues')), + ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['milestones.Milestone'], null=True, default=None, related_name='issues', blank=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='issues')), + ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), ('finished_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), ('subject', self.gf('django.db.models.fields.CharField')(max_length=500)), ('description', self.gf('django.db.models.fields.TextField')(blank=True)), - ('assigned_to', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], default=None, related_name='issues_assigned_to_me', null=True, blank=True)), + ('assigned_to', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], null=True, default=None, related_name='issues_assigned_to_me', blank=True)), ('tags', self.gf('picklefield.fields.PickledObjectField')(blank=True)), )) db.send_create_signal('issues', ['Issue']) @@ -58,8 +57,8 @@ class Migration(SchemaMigration): 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) }, 'auth.permission': { 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, @@ -69,103 +68,158 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, + 'Meta': {'object_name': 'ContentType', 'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + 'domains.domain': { + 'Meta': {'object_name': 'Domain', 'ordering': "('domain',)"}, + 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'null': 'True', 'default': 'None', 'max_length': '60'}) + }, 'issues.issue': { 'Meta': {'object_name': 'Issue', 'ordering': "['project', 'created_date']", 'unique_together': "(('ref', 'project'),)"}, - 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'default': 'None', 'related_name': "'issues_assigned_to_me'", 'null': 'True', 'blank': 'True'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'null': 'True', 'default': 'None', 'related_name': "'issues_assigned_to_me'", 'blank': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'finished_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['milestones.Milestone']", 'default': 'None', 'related_name': "'issues'", 'null': 'True', 'blank': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'default': 'None', 'related_name': "'owned_issues'", 'null': 'True', 'blank': 'True'}), - 'priority': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Priority']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'default': 'None', 'null': 'True', 'blank': 'True'}), - 'severity': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Severity']"}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.IssueStatus']"}), + 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['milestones.Milestone']", 'null': 'True', 'default': 'None', 'related_name': "'issues'", 'blank': 'True'}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'null': 'True', 'default': 'None', 'related_name': "'owned_issues'", 'blank': 'True'}), + 'priority': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Priority']", 'related_name': "'issues'"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issues'"}), + 'ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': 'None', 'db_index': 'True', 'blank': 'True'}), + 'severity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Severity']", 'related_name': "'issues'"}), + 'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.IssueStatus']", 'related_name': "'issues'"}), 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.IssueType']"}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True', 'unique': 'True'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['users.User']", 'symmetrical': 'False', 'blank': 'True', 'null': 'True', 'related_name': "'watched_issues'"}) + 'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.IssueType']", 'related_name': "'issues'"}), + 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['users.User']", 'null': 'True', 'symmetrical': 'False', 'related_name': "'watched_issues'", 'blank': 'True'}) }, 'milestones.milestone': { - 'Meta': {'object_name': 'Milestone', 'ordering': "['project', '-created_date']", 'unique_together': "(('name', 'project'),)"}, + 'Meta': {'object_name': 'Milestone', 'ordering': "['project', 'created_date']", 'unique_together': "(('name', 'project'),)"}, 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'null': 'True', 'blank': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': '0.0', 'blank': 'True'}), + 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), + 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_milestones'", 'null': 'True', 'blank': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True', 'unique': 'True'}) + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'null': 'True', 'related_name': "'owned_milestones'", 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'milestones'"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, 'projects.issuestatus': { - 'Meta': {'object_name': 'IssueStatus', 'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'Meta': {'object_name': 'IssueStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_statuses'"}) }, 'projects.issuetype': { - 'Meta': {'object_name': 'IssueType', 'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'Meta': {'object_name': 'IssueType', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_types'"}) }, 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)"}, + 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role']"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'null': 'True', 'default': 'None', 'max_length': '255'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), + 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), + 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'default': 'None', 'blank': 'True', 'max_length': '60', 'unique': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'null': 'True', 'default': 'None', 'related_name': "'memberships'", 'blank': 'True'}) }, - 'projects.priority': { - 'Meta': {'object_name': 'Priority', 'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'projects.points': { + 'Meta': {'object_name': 'Points', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'points'"}), + 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) + }, + 'projects.priority': { + 'Meta': {'object_name': 'Priority', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'priorities'"}) }, 'projects.project': { 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.IssueStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.IssueType']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.Points']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.Priority']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.QuestionStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.Severity']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.TaskStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'related_name': "'+'", 'unique': 'True', 'to': "orm['projects.UserStoryStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), 'description': ('django.db.models.fields.TextField', [], {}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['users.User']", 'symmetrical': 'False', 'through': "orm['projects.Membership']", 'related_name': "'projects'"}), + 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['users.User']", 'symmetrical': 'False', 'related_name': "'projects'", 'through': "orm['projects.Membership']"}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['domains.Domain']", 'null': 'True', 'default': 'None', 'related_name': "'projects'"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True', 'unique': 'True'}) + 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), + 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) + }, + 'projects.questionstatus': { + 'Meta': {'object_name': 'QuestionStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'question_status'"}) }, 'projects.severity': { - 'Meta': {'object_name': 'Severity', 'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'Meta': {'object_name': 'Severity', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'severities'"}) + }, + 'projects.taskstatus': { + 'Meta': {'object_name': 'TaskStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'task_statuses'"}) + }, + 'projects.userstorystatus': { + 'Meta': {'object_name': 'UserStoryStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'us_statuses'"}) }, 'users.role': { 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, @@ -174,7 +228,7 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'related_name': "'roles'"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}) + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, 'users.user': { 'Meta': {'object_name': 'User', 'ordering': "['username']"}, @@ -186,18 +240,20 @@ class Migration(SchemaMigration): 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True', 'related_name': "'user_set'"}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'default': 'None', 'null': 'True', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True', 'related_name': "'user_set'"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) + 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), + 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'default': 'None', 'blank': 'True', 'max_length': '200'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) } } diff --git a/greenmine/projects/issues/migrations/0002_auto__del_field_issue_uuid__chg_field_issue_modified_date.py b/greenmine/projects/issues/migrations/0002_auto__del_field_issue_uuid__chg_field_issue_modified_date.py deleted file mode 100644 index 9ab8432b..00000000 --- a/greenmine/projects/issues/migrations/0002_auto__del_field_issue_uuid__chg_field_issue_modified_date.py +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'Issue.uuid' - db.delete_column('issues_issue', 'uuid') - - - # Changing field 'Issue.modified_date' - db.alter_column('issues_issue', 'modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - def backwards(self, orm): - # Adding field 'Issue.uuid' - db.add_column('issues_issue', 'uuid', - self.gf('django.db.models.fields.CharField')(unique=True, blank=True, max_length=40, default=''), - keep_default=False) - - - # Changing field 'Issue.modified_date' - db.alter_column('issues_issue', 'modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType'}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'issues.issue': { - 'Meta': {'ordering': "['project', 'created_date']", 'unique_together': "(('ref', 'project'),)", 'object_name': 'Issue'}, - 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues_assigned_to_me'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'default': 'None'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finished_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['milestones.Milestone']", 'null': 'True', 'blank': 'True', 'default': 'None'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_issues'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'default': 'None'}), - 'priority': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Priority']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True', 'db_index': 'True', 'default': 'None'}), - 'severity': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.Severity']"}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.IssueStatus']"}), - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issues'", 'to': "orm['projects.IssueType']"}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'watched_issues'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'symmetrical': 'False'}) - }, - 'milestones.milestone': { - 'Meta': {'ordering': "['project', '-created_date']", 'unique_together': "(('name', 'project'),)", 'object_name': 'Milestone'}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True', 'default': '0.0'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_milestones'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) - }, - 'projects.issuestatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueStatus'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuetype': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueType'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) - }, - 'projects.membership': { - 'Meta': {'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)", 'object_name': 'Membership'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) - }, - 'projects.priority': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Priority'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) - }, - 'projects.project': { - 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'through': "orm['projects.Membership']", 'to': "orm['users.User']", 'symmetrical': 'False'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True', 'default': '0'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) - }, - 'projects.severity': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Severity'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) - }, - 'users.role': { - 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'to': "orm['auth.Permission']", 'symmetrical': 'False'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) - }, - 'users.user': { - 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), - 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Group']", 'blank': 'True', 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'blank': 'True', 'max_length': '200', 'default': 'None'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - } - } - - complete_apps = ['issues'] \ No newline at end of file diff --git a/greenmine/projects/issues/tests/tests_api.py b/greenmine/projects/issues/tests/tests_api.py index 73a9161b..09983acc 100644 --- a/greenmine/projects/issues/tests/tests_api.py +++ b/greenmine/projects/issues/tests/tests_api.py @@ -15,7 +15,7 @@ from . import create_issue class IssuesTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1) # Project owner diff --git a/greenmine/projects/management/commands/sample_data.py b/greenmine/projects/management/commands/sample_data.py index 06f38e64..84c6e1ae 100644 --- a/greenmine/projects/management/commands/sample_data.py +++ b/greenmine/projects/management/commands/sample_data.py @@ -89,6 +89,7 @@ class Command(BaseCommand): role = self.sd.db_object_from_queryset(Role.objects.all()) Membership.objects.create( + email=user.email, project=project, role=role, user=user) @@ -273,6 +274,7 @@ class Command(BaseCommand): name='Project Example {0}'.format(counter), description='Project example {0} description'.format(counter), owner=random.choice(self.users), + site_id=1, public=True, total_story_points=self.sd.int(600, 3000), total_milestones=self.sd.int(5,10)) diff --git a/greenmine/projects/migrations/0001_initial.py b/greenmine/projects/migrations/0001_initial.py index 5a1631fa..fe40cfa9 100644 --- a/greenmine/projects/migrations/0001_initial.py +++ b/greenmine/projects/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -8,11 +8,51 @@ from django.db import models class Migration(SchemaMigration): def forwards(self, orm): + # Adding model 'Membership' + db.create_table('projects_membership', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='memberships', to=orm['users.User'], null=True, blank=True, default=None)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='memberships', to=orm['projects.Project'])), + ('role', self.gf('django.db.models.fields.related.ForeignKey')(related_name='memberships', to=orm['users.Role'])), + ('email', self.gf('django.db.models.fields.EmailField')(null=True, max_length=255, default=None)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True, default=datetime.datetime.now)), + ('token', self.gf('django.db.models.fields.CharField')(unique=True, blank=True, null=True, max_length=60, default=None)), + )) + db.send_create_signal('projects', ['Membership']) + + # Adding model 'Project' + db.create_table('projects_project', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('default_points', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.Points'], null=True, on_delete=models.SET_NULL)), + ('default_us_status', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.UserStoryStatus'], null=True, on_delete=models.SET_NULL)), + ('default_task_status', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.TaskStatus'], null=True, on_delete=models.SET_NULL)), + ('default_priority', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.Priority'], null=True, on_delete=models.SET_NULL)), + ('default_severity', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.Severity'], null=True, on_delete=models.SET_NULL)), + ('default_issue_status', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.IssueStatus'], null=True, on_delete=models.SET_NULL)), + ('default_issue_type', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.IssueType'], null=True, on_delete=models.SET_NULL)), + ('default_question_status', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, blank=True, to=orm['projects.QuestionStatus'], null=True, on_delete=models.SET_NULL)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=250)), + ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, blank=True, max_length=250)), + ('description', self.gf('django.db.models.fields.TextField')()), + ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(related_name='owned_projects', to=orm['users.User'])), + ('public', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('last_us_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), + ('last_task_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), + ('last_issue_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), + ('total_milestones', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True, default=0)), + ('total_story_points', self.gf('django.db.models.fields.FloatField')(null=True, default=None)), + ('tags', self.gf('picklefield.fields.PickledObjectField')(blank=True)), + ('site', self.gf('django.db.models.fields.related.ForeignKey')(related_name='projects', null=True, to=orm['domains.Domain'], default=None)), + )) + db.send_create_signal('projects', ['Project']) + # Adding model 'Attachment' db.create_table('projects_attachment', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], related_name='change_attachments')), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='attachments')), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(related_name='change_attachments', to=orm['users.User'])), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='attachments', to=orm['projects.Project'])), ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), @@ -21,45 +61,13 @@ class Migration(SchemaMigration): )) db.send_create_signal('projects', ['Attachment']) - # Adding model 'Membership' - db.create_table('projects_membership', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], related_name='memberships')), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='memberships')), - ('role', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.Role'], related_name='memberships')), - )) - db.send_create_signal('projects', ['Membership']) - - # Adding unique constraint on 'Membership', fields ['user', 'project'] - db.create_unique('projects_membership', ['user_id', 'project_id']) - - # Adding model 'Project' - db.create_table('projects_project', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('uuid', self.gf('django.db.models.fields.CharField')(max_length=40, unique=True, blank=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=250, unique=True)), - ('slug', self.gf('django.db.models.fields.SlugField')(max_length=250, unique=True, blank=True)), - ('description', self.gf('django.db.models.fields.TextField')()), - ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'], related_name='owned_projects')), - ('public', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('last_us_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), - ('last_task_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), - ('last_issue_ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, default=1)), - ('total_milestones', self.gf('django.db.models.fields.IntegerField')(null=True, default=0, blank=True)), - ('total_story_points', self.gf('django.db.models.fields.FloatField')(null=True, default=None)), - ('tags', self.gf('picklefield.fields.PickledObjectField')(blank=True)), - )) - db.send_create_signal('projects', ['Project']) - # Adding model 'UserStoryStatus' db.create_table('projects_userstorystatus', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), ('is_closed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='us_statuses')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='us_statuses', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['UserStoryStatus']) @@ -71,8 +79,8 @@ class Migration(SchemaMigration): ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), - ('value', self.gf('django.db.models.fields.FloatField')(null=True, default=None, blank=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='points')), + ('value', self.gf('django.db.models.fields.FloatField')(null=True, blank=True, default=None)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='points', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['Points']) @@ -86,7 +94,7 @@ class Migration(SchemaMigration): ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), ('is_closed', self.gf('django.db.models.fields.BooleanField')(default=False)), ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='task_statuses')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='task_statuses', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['TaskStatus']) @@ -98,7 +106,8 @@ class Migration(SchemaMigration): ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='priorities')), + ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='priorities', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['Priority']) @@ -110,7 +119,8 @@ class Migration(SchemaMigration): ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='severities')), + ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='severities', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['Severity']) @@ -123,7 +133,8 @@ class Migration(SchemaMigration): ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), ('is_closed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='issue_statuses')), + ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issue_statuses', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['IssueStatus']) @@ -135,7 +146,8 @@ class Migration(SchemaMigration): ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='issue_types')), + ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='issue_types', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['IssueType']) @@ -148,7 +160,8 @@ class Migration(SchemaMigration): ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), ('order', self.gf('django.db.models.fields.IntegerField')(default=10)), ('is_closed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='question_status')), + ('color', self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999')), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='question_status', to=orm['projects.Project'])), )) db.send_create_signal('projects', ['QuestionStatus']) @@ -181,18 +194,15 @@ class Migration(SchemaMigration): # Removing unique constraint on 'UserStoryStatus', fields ['project', 'name'] db.delete_unique('projects_userstorystatus', ['project_id', 'name']) - # Removing unique constraint on 'Membership', fields ['user', 'project'] - db.delete_unique('projects_membership', ['user_id', 'project_id']) - - # Deleting model 'Attachment' - db.delete_table('projects_attachment') - # Deleting model 'Membership' db.delete_table('projects_membership') # Deleting model 'Project' db.delete_table('projects_project') + # Deleting model 'Attachment' + db.delete_table('projects_attachment') + # Deleting model 'UserStoryStatus' db.delete_table('projects_userstorystatus') @@ -222,8 +232,8 @@ class Migration(SchemaMigration): 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}) }, 'auth.permission': { 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, @@ -239,6 +249,14 @@ class Migration(SchemaMigration): 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + 'domains.domain': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Domain'}, + 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '60', 'default': 'None'}) + }, 'projects.attachment': { 'Meta': {'ordering': "['project', 'created_date']", 'object_name': 'Attachment'}, 'attached_file': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), @@ -247,96 +265,112 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'change_attachments'"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'attachments'"}) + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'change_attachments'", 'to': "orm['users.User']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attachments'", 'to': "orm['projects.Project']"}) }, 'projects.issuestatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueStatus'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_statuses'"}) - }, - 'projects.issuetype': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueType'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_types'"}) - }, - 'projects.membership': { - 'Meta': {'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)", 'object_name': 'Membership'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'memberships'"}) - }, - 'projects.points': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Points'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'points'"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) - }, - 'projects.priority': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Priority'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'priorities'"}) - }, - 'projects.project': { - 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['projects.Membership']", 'to': "orm['users.User']", 'symmetrical': 'False', 'related_name': "'projects'"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'blank': 'True'}) - }, - 'projects.questionstatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'QuestionStatus'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'question_status'"}) - }, - 'projects.severity': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Severity'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'severities'"}) - }, - 'projects.taskstatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'TaskStatus'}, + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueStatus'}, 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'task_statuses'"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) }, - 'projects.userstorystatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus'}, + 'projects.issuetype': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueType'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) + }, + 'projects.membership': { + 'Meta': {'ordering': "['project', 'role']", 'object_name': 'Membership'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True', 'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'null': 'True', 'max_length': '255', 'default': 'None'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), + 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), + 'token': ('django.db.models.fields.CharField', [], {'unique': 'True', 'blank': 'True', 'null': 'True', 'max_length': '60', 'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'default': 'None'}) + }, + 'projects.points': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Points'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), + 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}) + }, + 'projects.priority': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Priority'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) + }, + 'projects.project': { + 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.IssueStatus']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.IssueType']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.Points']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.Priority']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.QuestionStatus']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.Severity']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.TaskStatus']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'blank': 'True', 'to': "orm['projects.UserStoryStatus']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'through': "orm['projects.Membership']", 'to': "orm['users.User']", 'symmetrical': 'False'}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'null': 'True', 'to': "orm['domains.Domain']", 'default': 'None'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), + 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), + 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True', 'default': '0'}), + 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) + }, + 'projects.questionstatus': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'QuestionStatus'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'us_statuses'"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) + }, + 'projects.severity': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Severity'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) + }, + 'projects.taskstatus': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'TaskStatus'}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) + }, + 'projects.userstorystatus': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) }, 'users.role': { 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, @@ -344,31 +378,33 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'related_name': "'roles'"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'to': "orm['auth.Permission']", 'symmetrical': 'False'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, 'users.user': { 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), + 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), + 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Group']", 'blank': 'True', 'symmetrical': 'False'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'blank': 'True', 'default': 'None', 'max_length': '200'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) + 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'blank': 'True', 'max_length': '200', 'default': 'None'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) } } diff --git a/greenmine/projects/migrations/0002_auto__del_field_project_uuid.py b/greenmine/projects/migrations/0002_auto__del_field_project_uuid.py deleted file mode 100644 index 86583d65..00000000 --- a/greenmine/projects/migrations/0002_auto__del_field_project_uuid.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'Project.uuid' - db.delete_column('projects_project', 'uuid') - - - def backwards(self, orm): - # Adding field 'Project.uuid' - db.add_column('projects_project', 'uuid', - self.gf('django.db.models.fields.CharField')(unique=True, default='', max_length=40, blank=True), - keep_default=False) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'projects.attachment': { - 'Meta': {'object_name': 'Attachment', 'ordering': "['project', 'created_date']"}, - 'attached_file': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'change_attachments'", 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attachments'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuestatus': { - 'Meta': {'object_name': 'IssueStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuetype': { - 'Meta': {'object_name': 'IssueType', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'unique_together': "(('user', 'project'),)", 'ordering': "['project', 'role', 'user']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) - }, - 'projects.priority': { - 'Meta': {'object_name': 'Priority', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['projects.Membership']", 'related_name': "'projects'", 'symmetrical': 'False', 'to': "orm['users.User']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) - }, - 'projects.questionstatus': { - 'Meta': {'object_name': 'QuestionStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) - }, - 'projects.severity': { - 'Meta': {'object_name': 'Severity', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) - }, - 'projects.taskstatus': { - 'Meta': {'object_name': 'TaskStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'default': "'#669933'", 'max_length': '9', 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Group']", 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'default': "'all_owned_projects'", 'max_length': '32'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'default': 'None', 'max_length': '200', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Permission']", 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file diff --git a/greenmine/projects/migrations/0003_auto__add_field_project_default_points__add_field_project_default_us_s.py b/greenmine/projects/migrations/0003_auto__add_field_project_default_points__add_field_project_default_us_s.py deleted file mode 100644 index 5d1730ab..00000000 --- a/greenmine/projects/migrations/0003_auto__add_field_project_default_points__add_field_project_default_us_s.py +++ /dev/null @@ -1,241 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'Project.default_points' - db.add_column('projects_project', 'default_points', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.Points'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_us_status' - db.add_column('projects_project', 'default_us_status', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.UserStoryStatus'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_task_status' - db.add_column('projects_project', 'default_task_status', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.TaskStatus'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_priority' - db.add_column('projects_project', 'default_priority', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.Priority'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_severity' - db.add_column('projects_project', 'default_severity', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.Severity'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_issue_status' - db.add_column('projects_project', 'default_issue_status', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.IssueStatus'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_issue_type' - db.add_column('projects_project', 'default_issue_type', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.IssueType'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - # Adding field 'Project.default_question_status' - db.add_column('projects_project', 'default_question_status', - self.gf('django.db.models.fields.related.OneToOneField')(null=True, to=orm['projects.QuestionStatus'], unique=True, related_name='+', on_delete=models.PROTECT, blank=True), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'Project.default_points' - db.delete_column('projects_project', 'default_points_id') - - # Deleting field 'Project.default_us_status' - db.delete_column('projects_project', 'default_us_status_id') - - # Deleting field 'Project.default_task_status' - db.delete_column('projects_project', 'default_task_status_id') - - # Deleting field 'Project.default_priority' - db.delete_column('projects_project', 'default_priority_id') - - # Deleting field 'Project.default_severity' - db.delete_column('projects_project', 'default_severity_id') - - # Deleting field 'Project.default_issue_status' - db.delete_column('projects_project', 'default_issue_status_id') - - # Deleting field 'Project.default_issue_type' - db.delete_column('projects_project', 'default_issue_type_id') - - # Deleting field 'Project.default_question_status' - db.delete_column('projects_project', 'default_question_status_id') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['auth.Permission']", 'symmetrical': 'False'}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'object_name': 'ContentType', 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'projects.attachment': { - 'Meta': {'object_name': 'Attachment', 'ordering': "['project', 'created_date']"}, - 'attached_file': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'change_attachments'"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'attachments'"}) - }, - 'projects.issuestatus': { - 'Meta': {'object_name': 'IssueStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_statuses'"}) - }, - 'projects.issuetype': { - 'Meta': {'object_name': 'IssueType', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_types'"}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'memberships'"}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'points'"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) - }, - 'projects.priority': { - 'Meta': {'object_name': 'Priority', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'priorities'"}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.IssueStatus']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.IssueType']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.Points']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.Priority']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.QuestionStatus']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.Severity']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.TaskStatus']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'null': 'True', 'to': "orm['projects.UserStoryStatus']", 'unique': 'True', 'related_name': "'+'", 'on_delete': 'models.PROTECT', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'through': "orm['projects.Membership']", 'to': "orm['users.User']", 'symmetrical': 'False'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'unique': 'True', 'max_length': '250'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) - }, - 'projects.questionstatus': { - 'Meta': {'object_name': 'QuestionStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'question_status'"}) - }, - 'projects.severity': { - 'Meta': {'object_name': 'Severity', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'severities'"}) - }, - 'projects.taskstatus': { - 'Meta': {'object_name': 'TaskStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'task_statuses'"}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'us_statuses'"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'to': "orm['auth.Permission']", 'symmetrical': 'False'}), - 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'unique': 'True', 'max_length': '250'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), - 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '200', 'default': 'None', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']", 'symmetrical': 'False'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file diff --git a/greenmine/projects/migrations/0004_auto__add_field_issuestatus_color__add_field_severity_color__add_field.py b/greenmine/projects/migrations/0004_auto__add_field_issuestatus_color__add_field_severity_color__add_field.py deleted file mode 100644 index 1a61f847..00000000 --- a/greenmine/projects/migrations/0004_auto__add_field_issuestatus_color__add_field_severity_color__add_field.py +++ /dev/null @@ -1,270 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'IssueStatus.color' - db.add_column('projects_issuestatus', 'color', - self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999'), - keep_default=False) - - # Adding field 'Severity.color' - db.add_column('projects_severity', 'color', - self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999'), - keep_default=False) - - # Adding field 'QuestionStatus.color' - db.add_column('projects_questionstatus', 'color', - self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999'), - keep_default=False) - - # Adding field 'IssueType.color' - db.add_column('projects_issuetype', 'color', - self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999'), - keep_default=False) - - - # Changing field 'Project.default_issue_type' - db.alter_column('projects_project', 'default_issue_type_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.IssueType'])) - - # Changing field 'Project.default_points' - db.alter_column('projects_project', 'default_points_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.Points'])) - - # Changing field 'Project.default_priority' - db.alter_column('projects_project', 'default_priority_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.Priority'])) - - # Changing field 'Project.default_question_status' - db.alter_column('projects_project', 'default_question_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.QuestionStatus'])) - - # Changing field 'Project.default_us_status' - db.alter_column('projects_project', 'default_us_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.UserStoryStatus'])) - - # Changing field 'Project.default_severity' - db.alter_column('projects_project', 'default_severity_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.Severity'])) - - # Changing field 'Project.default_task_status' - db.alter_column('projects_project', 'default_task_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.TaskStatus'])) - - # Changing field 'Project.default_issue_status' - db.alter_column('projects_project', 'default_issue_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.SET_NULL, to=orm['projects.IssueStatus'])) - # Adding field 'Priority.color' - db.add_column('projects_priority', 'color', - self.gf('django.db.models.fields.CharField')(max_length=20, default='#999999'), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'IssueStatus.color' - db.delete_column('projects_issuestatus', 'color') - - # Deleting field 'Severity.color' - db.delete_column('projects_severity', 'color') - - # Deleting field 'QuestionStatus.color' - db.delete_column('projects_questionstatus', 'color') - - # Deleting field 'IssueType.color' - db.delete_column('projects_issuetype', 'color') - - - # Changing field 'Project.default_issue_type' - db.alter_column('projects_project', 'default_issue_type_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.IssueType'])) - - # Changing field 'Project.default_points' - db.alter_column('projects_project', 'default_points_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.Points'])) - - # Changing field 'Project.default_priority' - db.alter_column('projects_project', 'default_priority_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.Priority'])) - - # Changing field 'Project.default_question_status' - db.alter_column('projects_project', 'default_question_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.QuestionStatus'])) - - # Changing field 'Project.default_us_status' - db.alter_column('projects_project', 'default_us_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.UserStoryStatus'])) - - # Changing field 'Project.default_severity' - db.alter_column('projects_project', 'default_severity_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.Severity'])) - - # Changing field 'Project.default_task_status' - db.alter_column('projects_project', 'default_task_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.TaskStatus'])) - - # Changing field 'Project.default_issue_status' - db.alter_column('projects_project', 'default_issue_status_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, on_delete=models.PROTECT, to=orm['projects.IssueStatus'])) - # Deleting field 'Priority.color' - db.delete_column('projects_priority', 'color') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'db_table': "'django_content_type'", 'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'projects.attachment': { - 'Meta': {'ordering': "['project', 'created_date']", 'object_name': 'Attachment'}, - 'attached_file': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'change_attachments'", 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attachments'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuestatus': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'IssueStatus', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuetype': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'IssueType', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) - }, - 'projects.membership': { - 'Meta': {'ordering': "['project', 'role', 'user']", 'object_name': 'Membership', 'unique_together': "(('user', 'project'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) - }, - 'projects.points': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'Points', 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}) - }, - 'projects.priority': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'Priority', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) - }, - 'projects.project': { - 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.IssueStatus']"}), - 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.IssueType']"}), - 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Points']"}), - 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Priority']"}), - 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.QuestionStatus']"}), - 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Severity']"}), - 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.TaskStatus']"}), - 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.UserStoryStatus']"}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['projects.Membership']", 'symmetrical': 'False', 'related_name': "'projects'", 'to': "orm['users.User']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True', 'default': '0'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) - }, - 'projects.questionstatus': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'QuestionStatus', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) - }, - 'projects.severity': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'Severity', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) - }, - 'projects.taskstatus': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'TaskStatus', 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.userstorystatus': { - 'Meta': {'ordering': "['project', 'order', 'name']", 'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) - }, - 'users.role': { - 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'roles'", 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}) - }, - 'users.user': { - 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True', 'default': "'#669933'"}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True', 'default': "''"}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True', 'default': "''"}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'default': 'None', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file diff --git a/greenmine/projects/migrations/0005_auto__add_field_project_site__add_field_membership_email__add_field_me.py b/greenmine/projects/migrations/0005_auto__add_field_project_site__add_field_membership_email__add_field_me.py deleted file mode 100644 index 0fba441e..00000000 --- a/greenmine/projects/migrations/0005_auto__add_field_project_site__add_field_membership_email__add_field_me.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Removing unique constraint on 'Membership', fields ['user', 'project'] - db.delete_unique('projects_membership', ['user_id', 'project_id']) - - # Adding field 'Project.site' - db.add_column('projects_project', 'site', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projects', null=True, to=orm['base.Site']), - keep_default=False) - - # Adding field 'Membership.email' - db.add_column('projects_membership', 'email', - self.gf('django.db.models.fields.EmailField')(max_length=255, default=None, null=True), - keep_default=False) - - # Adding field 'Membership.created_at' - db.add_column('projects_membership', 'created_at', - self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now, blank=True, auto_now_add=True), - keep_default=False) - - # Adding field 'Membership.token' - db.add_column('projects_membership', 'token', - self.gf('django.db.models.fields.CharField')(max_length=60, default=None, blank=True, null=True, unique=True), - keep_default=False) - - - # Changing field 'Membership.user' - db.alter_column('projects_membership', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['users.User'])) - - def backwards(self, orm): - # Deleting field 'Project.site' - db.delete_column('projects_project', 'site_id') - - # Deleting field 'Membership.email' - db.delete_column('projects_membership', 'email') - - # Deleting field 'Membership.created_at' - db.delete_column('projects_membership', 'created_at') - - # Deleting field 'Membership.token' - db.delete_column('projects_membership', 'token') - - - # User chose to not deal with backwards NULL issues for 'Membership.user' - raise RuntimeError("Cannot reverse this migration. 'Membership.user' and its values cannot be restored.") - - # The following code is provided here to aid in writing a correct migration - # Changing field 'Membership.user' - db.alter_column('projects_membership', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.User'])) - # Adding unique constraint on 'Membership', fields ['user', 'project'] - db.create_unique('projects_membership', ['user_id', 'project_id']) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'base.site': { - 'Meta': {'object_name': 'Site', 'ordering': "('domain',)"}, - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scheme': ('django.db.models.fields.CharField', [], {'max_length': '60', 'default': 'None', 'null': 'True'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'projects.attachment': { - 'Meta': {'object_name': 'Attachment', 'ordering': "['project', 'created_date']"}, - 'attached_file': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'change_attachments'", 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attachments'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuestatus': { - 'Meta': {'object_name': 'IssueStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuetype': { - 'Meta': {'object_name': 'IssueType', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role']"}, - 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True', 'auto_now_add': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'default': 'None', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '60', 'default': 'None', 'blank': 'True', 'null': 'True', 'unique': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'memberships'", 'null': 'True', 'to': "orm['users.User']", 'blank': 'True'}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}) - }, - 'projects.priority': { - 'Meta': {'object_name': 'Priority', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.IssueStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.IssueType']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.Points']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.Priority']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.QuestionStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.Severity']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.TaskStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['projects.UserStoryStatus']", 'on_delete': 'models.SET_NULL', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'projects'", 'through': "orm['projects.Membership']", 'to': "orm['users.User']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'site': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projects'", 'null': 'True', 'to': "orm['base.Site']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) - }, - 'projects.questionstatus': { - 'Meta': {'object_name': 'QuestionStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) - }, - 'projects.severity': { - 'Meta': {'object_name': 'Severity', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) - }, - 'projects.taskstatus': { - 'Meta': {'object_name': 'TaskStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'roles'", 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'default': 'None', 'null': 'True', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file diff --git a/greenmine/projects/migrations/0006_initial_sites_data.py b/greenmine/projects/migrations/0006_initial_sites_data.py deleted file mode 100644 index 88392fb1..00000000 --- a/greenmine/projects/migrations/0006_initial_sites_data.py +++ /dev/null @@ -1,210 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import DataMigration -from django.db import models - -class Migration(DataMigration): - depends_on = ( - ("base", "0003_initial_sites_data"), - ) - - def forwards(self, orm): - "Write your forwards methods here." - # Note: Don't use "from appname.models import ModelName". - # Use orm.ModelName to refer to models in this application, - # and orm['appname.ModelName'] for models in other applications. - site = orm["base.Site"].objects.get(pk=1) - for project in orm["projects.Project"].objects.all(): - project.site = site - project.save() - - for member in orm["projects.Membership"].objects.all(): - member.email = member.user.email - member.save() - - def backwards(self, orm): - "Write your backwards methods here." - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'base.site': { - 'Meta': {'object_name': 'Site', 'ordering': "('domain',)"}, - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scheme': ('django.db.models.fields.CharField', [], {'max_length': '60', 'default': 'None', 'null': 'True'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)", 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'projects.attachment': { - 'Meta': {'object_name': 'Attachment', 'ordering': "['project', 'created_date']"}, - 'attached_file': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'change_attachments'", 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attachments'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuestatus': { - 'Meta': {'object_name': 'IssueStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.issuetype': { - 'Meta': {'object_name': 'IssueType', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role']"}, - 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True', 'auto_now_add': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'default': 'None', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '60', 'unique': 'True', 'default': 'None', 'null': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'memberships'", 'default': 'None', 'null': 'True', 'to': "orm['users.User']"}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}) - }, - 'projects.priority': { - 'Meta': {'object_name': 'Priority', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.IssueStatus']"}), - 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.IssueType']"}), - 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Points']"}), - 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Priority']"}), - 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.QuestionStatus']"}), - 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.Severity']"}), - 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.TaskStatus']"}), - 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'unique': 'True', 'null': 'True', 'related_name': "'+'", 'blank': 'True', 'to': "orm['projects.UserStoryStatus']"}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'symmetrical': 'False', 'to': "orm['users.User']", 'through': "orm['projects.Membership']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'site': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'default': 'None', 'null': 'True', 'to': "orm['base.Site']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'blank': 'True', 'default': '0', 'null': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) - }, - 'projects.questionstatus': { - 'Meta': {'object_name': 'QuestionStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) - }, - 'projects.severity': { - 'Meta': {'object_name': 'Severity', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) - }, - 'projects.taskstatus': { - 'Meta': {'object_name': 'TaskStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True', 'default': 'None', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) - } - } - - complete_apps = ['projects'] - symmetrical = True diff --git a/greenmine/projects/milestones/migrations/0001_initial.py b/greenmine/projects/milestones/migrations/0001_initial.py index 6ec83463..d6ad43d3 100644 --- a/greenmine/projects/milestones/migrations/0001_initial.py +++ b/greenmine/projects/milestones/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -11,17 +11,16 @@ class Migration(SchemaMigration): # Adding model 'Milestone' db.create_table('milestones_milestone', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('uuid', self.gf('django.db.models.fields.CharField')(blank=True, unique=True, max_length=40)), - ('name', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=200)), - ('slug', self.gf('django.db.models.fields.SlugField')(blank=True, unique=True, max_length=250)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, to=orm['users.User'], related_name='owned_milestones', null=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), + ('slug', self.gf('django.db.models.fields.SlugField')(max_length=250, unique=True, blank=True)), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(null=True, related_name='owned_milestones', blank=True, to=orm['users.User'])), ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='milestones', to=orm['projects.Project'])), - ('estimated_start', self.gf('django.db.models.fields.DateField')(blank=True, default=None, null=True)), - ('estimated_finish', self.gf('django.db.models.fields.DateField')(blank=True, default=None, null=True)), - ('created_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now_add=True)), + ('estimated_start', self.gf('django.db.models.fields.DateField')(null=True, default=None, blank=True)), + ('estimated_finish', self.gf('django.db.models.fields.DateField')(null=True, default=None, blank=True)), + ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), ('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), ('closed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('disponibility', self.gf('django.db.models.fields.FloatField')(blank=True, default=0.0, null=True)), + ('disponibility', self.gf('django.db.models.fields.FloatField')(null=True, default=0.0, blank=True)), ('order', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=1)), )) db.send_create_signal('milestones', ['Milestone']) @@ -42,8 +41,8 @@ class Migration(SchemaMigration): 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Permission']"}) + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) }, 'auth.permission': { 'Meta': {'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, @@ -53,53 +52,138 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)", 'db_table': "'django_content_type'"}, + 'Meta': {'db_table': "'django_content_type'", 'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + 'domains.domain': { + 'Meta': {'object_name': 'Domain', 'ordering': "('domain',)"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '60', 'default': 'None'}) + }, 'milestones.milestone': { - 'Meta': {'object_name': 'Milestone', 'unique_together': "(('name', 'project'),)", 'ordering': "['project', '-created_date']"}, + 'Meta': {'object_name': 'Milestone', 'unique_together': "(('name', 'project'),)", 'ordering': "['project', 'created_date']"}, 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': '0.0', 'null': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': '0.0', 'blank': 'True'}), + 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), + 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'to': "orm['users.User']", 'related_name': "'owned_milestones'", 'null': 'True'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'related_name': "'owned_milestones'", 'blank': 'True', 'to': "orm['users.User']"}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'unique': 'True', 'max_length': '250'}), - 'uuid': ('django.db.models.fields.CharField', [], {'blank': 'True', 'unique': 'True', 'max_length': '40'}) + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) + }, + 'projects.issuestatus': { + 'Meta': {'object_name': 'IssueStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) + }, + 'projects.issuetype': { + 'Meta': {'object_name': 'IssueType', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) }, 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'unique_together': "(('user', 'project'),)", 'ordering': "['project', 'role', 'user']"}, + 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role']"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'default': 'datetime.datetime.now', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'null': 'True', 'max_length': '255', 'default': 'None'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) + 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '60', 'unique': 'True', 'default': 'None', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'related_name': "'memberships'", 'default': 'None', 'blank': 'True', 'to': "orm['users.User']"}) + }, + 'projects.points': { + 'Meta': {'object_name': 'Points', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), + 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) + }, + 'projects.priority': { + 'Meta': {'object_name': 'Priority', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) }, 'projects.project': { 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.IssueStatus']"}), + 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.IssueType']"}), + 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.Points']"}), + 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.Priority']"}), + 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.QuestionStatus']"}), + 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.Severity']"}), + 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.TaskStatus']"}), + 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'related_name': "'+'", 'to': "orm['projects.UserStoryStatus']"}), 'description': ('django.db.models.fields.TextField', [], {}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'symmetrical': 'False', 'through': "orm['projects.Membership']", 'to': "orm['users.User']"}), + 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'projects'", 'to': "orm['users.User']", 'through': "orm['projects.Membership']"}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'unique': 'True', 'max_length': '250'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'related_name': "'projects'", 'default': 'None', 'to': "orm['domains.Domain']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'blank': 'True', 'default': '0', 'null': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'blank': 'True', 'unique': 'True', 'max_length': '40'}) + 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), + 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) + }, + 'projects.questionstatus': { + 'Meta': {'object_name': 'QuestionStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) + }, + 'projects.severity': { + 'Meta': {'object_name': 'Severity', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) + }, + 'projects.taskstatus': { + 'Meta': {'object_name': 'TaskStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) + }, + 'projects.userstorystatus': { + 'Meta': {'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'order', 'name']"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) }, 'users.role': { 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, @@ -107,31 +191,33 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'blank': 'True', 'unique': 'True', 'max_length': '250'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'roles'", 'to': "orm['auth.Permission']"}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) }, 'users.user': { 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "'#669933'", 'max_length': '9'}), + 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "''", 'max_length': '20'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "''", 'max_length': '20'}), + 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), - 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Group']", 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'related_name': "'user_set'", 'to': "orm['auth.Group']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'blank': 'True', 'null': 'True', 'max_length': '500'}), - 'token': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': 'None', 'null': 'True', 'max_length': '200'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Permission']", 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), + 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '200', 'default': 'None', 'blank': 'True'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'related_name': "'user_set'", 'to': "orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) } } diff --git a/greenmine/projects/milestones/migrations/0002_auto__del_field_milestone_uuid.py b/greenmine/projects/milestones/migrations/0002_auto__del_field_milestone_uuid.py deleted file mode 100644 index 9e9b3e74..00000000 --- a/greenmine/projects/milestones/migrations/0002_auto__del_field_milestone_uuid.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'Milestone.uuid' - db.delete_column('milestones_milestone', 'uuid') - - - def backwards(self, orm): - # Adding field 'Milestone.uuid' - db.add_column('milestones_milestone', 'uuid', - self.gf('django.db.models.fields.CharField')(default='', max_length=40, blank=True, unique=True), - keep_default=False) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)", 'db_table': "'django_content_type'", 'object_name': 'ContentType'}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'milestones.milestone': { - 'Meta': {'unique_together': "(('name', 'project'),)", 'ordering': "['project', '-created_date']", 'object_name': 'Milestone'}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'blank': 'True', 'null': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'default': 'None', 'blank': 'True', 'null': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'default': 'None', 'blank': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'blank': 'True', 'null': 'True', 'related_name': "'owned_milestones'"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'milestones'"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}) - }, - 'projects.membership': { - 'Meta': {'unique_together': "(('user', 'project'),)", 'ordering': "['project', 'role', 'user']", 'object_name': 'Membership'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'memberships'"}) - }, - 'projects.project': { - 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['users.User']", 'through': "orm['projects.Membership']", 'related_name': "'projects'"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True', 'null': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) - }, - 'users.role': { - 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Permission']", 'related_name': "'roles'"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'blank': 'True', 'unique': 'True'}) - }, - 'users.user': { - 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'default': "'#669933'", 'max_length': '9', 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '20', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Group']", 'related_name': "'user_set'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'default': "'all_owned_projects'", 'max_length': '32'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '200', 'blank': 'True', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']", 'related_name': "'user_set'"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) - } - } - - complete_apps = ['milestones'] \ No newline at end of file diff --git a/greenmine/projects/milestones/tests/tests_api.py b/greenmine/projects/milestones/tests/tests_api.py index 9c6156c5..cf3cba83 100644 --- a/greenmine/projects/milestones/tests/tests_api.py +++ b/greenmine/projects/milestones/tests/tests_api.py @@ -14,7 +14,7 @@ from . import create_milestone class MilestonesTestCase(test.TestCase): - fixtures = ["initial_role.json", ] + fixtures = ["initial_role.json", "initial_domains.json",] def setUp(self): self.user1 = create_user(1) diff --git a/greenmine/projects/models.py b/greenmine/projects/models.py index 8c30fead..da4aed1a 100644 --- a/greenmine/projects/models.py +++ b/greenmine/projects/models.py @@ -114,7 +114,7 @@ class Project(ProjectDefaults, models.Model): total_story_points = models.FloatField(default=None, null=True, blank=False, verbose_name=_("total story points")) tags = PickledObjectField(null=False, blank=True, verbose_name=_("tags")) - site = models.ForeignKey("base.Site", related_name="projects", null=True, default=None) + site = models.ForeignKey("domains.Domain", related_name="projects", null=True, default=None) notifiable_fields = [ "name", diff --git a/greenmine/projects/tasks/migrations/0001_initial.py b/greenmine/projects/tasks/migrations/0001_initial.py index 5314464b..74d684ae 100644 --- a/greenmine/projects/tasks/migrations/0001_initial.py +++ b/greenmine/projects/tasks/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -11,19 +11,18 @@ class Migration(SchemaMigration): # Adding model 'Task' db.create_table('tasks_task', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('uuid', self.gf('django.db.models.fields.CharField')(unique=True, blank=True, max_length=40)), - ('user_story', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tasks', to=orm['userstories.UserStory'], null=True, blank=True)), - ('ref', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True, db_index=True, default=None)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(related_name='owned_tasks', to=orm['users.User'], null=True, blank=True, default=None)), + ('user_story', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, to=orm['userstories.UserStory'], related_name='tasks', null=True)), + ('ref', self.gf('django.db.models.fields.BigIntegerField')(db_index=True, blank=True, default=None, null=True)), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, default=None, related_name='owned_tasks', to=orm['users.User'], null=True)), ('status', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tasks', to=orm['projects.TaskStatus'])), ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tasks', to=orm['projects.Project'])), - ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tasks', to=orm['milestones.Milestone'], null=True, blank=True, default=None)), - ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('finished_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, default=None, related_name='tasks', to=orm['milestones.Milestone'], null=True)), + ('created_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now_add=True)), + ('modified_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now=True)), + ('finished_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, null=True)), ('subject', self.gf('django.db.models.fields.CharField')(max_length=500)), ('description', self.gf('django.db.models.fields.TextField')(blank=True)), - ('assigned_to', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_storys_assigned_to_me', to=orm['users.User'], null=True, blank=True, default=None)), + ('assigned_to', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, default=None, related_name='user_storys_assigned_to_me', to=orm['users.User'], null=True)), ('tags', self.gf('picklefield.fields.PickledObjectField')(blank=True)), ('is_iocaine', self.gf('django.db.models.fields.BooleanField')(default=False)), )) @@ -58,7 +57,7 @@ class Migration(SchemaMigration): 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['auth.Permission']", 'symmetrical': 'False'}) }, 'auth.permission': { 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, @@ -68,65 +67,125 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType'}, + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, - 'milestones.milestone': { - 'Meta': {'ordering': "['project', '-created_date']", 'unique_together': "(('name', 'project'),)", 'object_name': 'Milestone'}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True', 'default': '0.0'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}), + 'domains.domain': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Domain'}, + 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'max_length': '60', 'default': 'None', 'null': 'True'}) + }, + 'milestones.milestone': { + 'Meta': {'ordering': "['project', 'created_date']", 'unique_together': "(('name', 'project'),)", 'object_name': 'Milestone'}, + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'disponibility': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': '0.0', 'null': 'True'}), + 'estimated_finish': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), + 'estimated_start': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_milestones'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'to': "orm['users.User']", 'related_name': "'owned_milestones'", 'null': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'blank': 'True', 'max_length': '40'}) + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) + }, + 'projects.issuestatus': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueStatus'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_statuses'", 'to': "orm['projects.Project']"}) + }, + 'projects.issuetype': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'IssueType'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'issue_types'", 'to': "orm['projects.Project']"}) }, 'projects.membership': { - 'Meta': {'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)", 'object_name': 'Membership'}, + 'Meta': {'ordering': "['project', 'role']", 'object_name': 'Membership'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True', 'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'default': 'None', 'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) + 'token': ('django.db.models.fields.CharField', [], {'max_length': '60', 'blank': 'True', 'default': 'None', 'unique': 'True', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'default': 'None', 'related_name': "'memberships'", 'to': "orm['users.User']", 'null': 'True'}) }, 'projects.points': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Points'}, + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Points'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True', 'default': 'None'}) + 'value': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}) + }, + 'projects.priority': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Priority'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'priorities'", 'to': "orm['projects.Project']"}) }, 'projects.project': { 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.IssueStatus']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.IssueType']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.Points']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.Priority']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.QuestionStatus']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.Severity']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.TaskStatus']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), + 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.UserStoryStatus']", 'unique': 'True', 'null': 'True', 'related_name': "'+'"}), 'description': ('django.db.models.fields.TextField', [], {}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'through': "orm['projects.Membership']", 'to': "orm['users.User']", 'symmetrical': 'False'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['projects.Membership']", 'related_name': "'projects'", 'symmetrical': 'False', 'to': "orm['users.User']"}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projects'", 'to': "orm['domains.Domain']", 'null': 'True'}), 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True', 'default': '0'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'blank': 'True', 'max_length': '40'}) + 'total_milestones': ('django.db.models.fields.IntegerField', [], {'blank': 'True', 'default': '0', 'null': 'True'}), + 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) + }, + 'projects.questionstatus': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'QuestionStatus'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_status'", 'to': "orm['projects.Project']"}) + }, + 'projects.severity': { + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Severity'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'severities'", 'to': "orm['projects.Project']"}) }, 'projects.taskstatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'TaskStatus'}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'TaskStatus'}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), @@ -134,7 +193,7 @@ class Migration(SchemaMigration): 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) }, 'projects.userstorystatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus'}, + 'Meta': {'ordering': "['project', 'order', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), @@ -143,23 +202,22 @@ class Migration(SchemaMigration): }, 'tasks.task': { 'Meta': {'ordering': "['project', 'created_date']", 'unique_together': "(('ref', 'project'),)", 'object_name': 'Task'}, - 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_storys_assigned_to_me'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'default': 'None'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'default': 'None', 'related_name': "'user_storys_assigned_to_me'", 'to': "orm['users.User']", 'null': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finished_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'finished_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_iocaine': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['milestones.Milestone']", 'null': 'True', 'blank': 'True', 'default': 'None'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_tasks'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'default': 'None'}), + 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'default': 'None', 'related_name': "'tasks'", 'to': "orm['milestones.Milestone']", 'null': 'True'}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'default': 'None', 'related_name': "'owned_tasks'", 'to': "orm['users.User']", 'null': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True', 'db_index': 'True', 'default': 'None'}), + 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'blank': 'True', 'default': 'None', 'null': 'True'}), 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['projects.TaskStatus']"}), 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['userstories.UserStory']", 'null': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'blank': 'True', 'max_length': '40'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'watched_tasks'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'symmetrical': 'False'}) + 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'to': "orm['userstories.UserStory']", 'related_name': "'tasks'", 'null': 'True'}), + 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['users.User']", 'related_name': "'watched_tasks'", 'symmetrical': 'False', 'null': 'True'}) }, 'users.role': { 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, @@ -167,34 +225,36 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'to': "orm['auth.Permission']", 'symmetrical': 'False'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, 'users.user': { 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '9', 'default': "'#669933'"}), + 'color': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "'#669933'", 'max_length': '9'}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '20', 'default': "''"}), + 'default_language': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "''", 'max_length': '20'}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'blank': 'True', 'default': "''", 'max_length': '20'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Group']", 'blank': 'True', 'symmetrical': 'False'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Group']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'default': "'all_owned_projects'", 'max_length': '32'}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'blank': 'True', 'max_length': '200', 'default': 'None'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'to': "orm['auth.Permission']", 'blank': 'True', 'symmetrical': 'False'}), + 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), + 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True', 'default': 'None', 'null': 'True'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'user_set'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) }, 'userstories.rolepoints': { - 'Meta': {'object_name': 'RolePoints', 'unique_together': "(('user_story', 'role'),)"}, + 'Meta': {'ordering': "['user_story', 'role']", 'unique_together': "(('user_story', 'role'),)", 'object_name': 'RolePoints'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'points': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['projects.Points']"}), 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['users.Role']"}), @@ -203,23 +263,22 @@ class Migration(SchemaMigration): 'userstories.userstory': { 'Meta': {'ordering': "['project', 'order']", 'unique_together': "(('ref', 'project'),)", 'object_name': 'UserStory'}, 'client_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'finish_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'blank': 'True', 'related_name': "'user_stories'", 'to': "orm['milestones.Milestone']", 'on_delete': 'models.SET_NULL', 'default': 'None'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['milestones.Milestone']", 'related_name': "'user_stories'", 'default': 'None', 'null': 'True'}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_user_stories'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL'}), - 'points': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'userstories'", 'through': "orm['userstories.RolePoints']", 'to': "orm['projects.Points']", 'symmetrical': 'False'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['users.User']", 'related_name': "'owned_user_stories'", 'null': 'True'}), + 'points': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['userstories.RolePoints']", 'related_name': "'userstories'", 'symmetrical': 'False', 'to': "orm['projects.Points']"}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True', 'db_index': 'True', 'default': 'None'}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'to': "orm['projects.UserStoryStatus']", 'null': 'True', 'blank': 'True', 'on_delete': 'models.SET_NULL'}), + 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'blank': 'True', 'default': 'None', 'null': 'True'}), + 'status': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['projects.UserStoryStatus']", 'related_name': "'user_stories'", 'null': 'True'}), 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), 'team_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'blank': 'True', 'max_length': '40'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'watched_us'", 'to': "orm['users.User']", 'null': 'True', 'blank': 'True', 'symmetrical': 'False'}) + 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['users.User']", 'related_name': "'watched_us'", 'symmetrical': 'False', 'null': 'True'}) } } diff --git a/greenmine/projects/tasks/migrations/0002_auto__del_field_task_uuid__chg_field_task_modified_date.py b/greenmine/projects/tasks/migrations/0002_auto__del_field_task_uuid__chg_field_task_modified_date.py deleted file mode 100644 index 12f03aff..00000000 --- a/greenmine/projects/tasks/migrations/0002_auto__del_field_task_uuid__chg_field_task_modified_date.py +++ /dev/null @@ -1,196 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'Task.uuid' - db.delete_column('tasks_task', 'uuid') - - - # Changing field 'Task.modified_date' - db.alter_column('tasks_task', 'modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - def backwards(self, orm): - # Adding field 'Task.uuid' - db.add_column('tasks_task', 'uuid', - self.gf('django.db.models.fields.CharField')(unique=True, max_length=40, default='', blank=True), - keep_default=False) - - - # Changing field 'Task.modified_date' - db.alter_column('tasks_task', 'modified_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)", 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'milestones.milestone': { - 'Meta': {'object_name': 'Milestone', 'unique_together': "(('name', 'project'),)", 'ordering': "['project', '-created_date']"}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': '0.0', 'null': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_milestones'", 'null': 'True', 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'unique_together': "(('user', 'project'),)", 'ordering': "['project', 'role', 'user']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'blank': 'True', 'default': 'None', 'null': 'True'}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'projects'", 'symmetrical': 'False', 'to': "orm['users.User']", 'through': "orm['projects.Membership']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'blank': 'True', 'default': '0', 'null': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) - }, - 'projects.taskstatus': { - 'Meta': {'object_name': 'TaskStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "'#999999'"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_statuses'", 'to': "orm['projects.Project']"}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) - }, - 'tasks.task': { - 'Meta': {'object_name': 'Task', 'unique_together': "(('ref', 'project'),)", 'ordering': "['project', 'created_date']"}, - 'assigned_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'user_storys_assigned_to_me'", 'default': 'None', 'null': 'True', 'to': "orm['users.User']"}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finished_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_iocaine': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tasks'", 'default': 'None', 'null': 'True', 'to': "orm['milestones.Milestone']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_tasks'", 'default': 'None', 'null': 'True', 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'blank': 'True', 'default': 'None', 'null': 'True'}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': "orm['projects.TaskStatus']"}), - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tasks'", 'null': 'True', 'to': "orm['userstories.UserStory']"}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'watched_tasks'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['users.User']"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'roles'", 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'blank': 'True', 'null': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True', 'default': 'None', 'null': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'user_set'", 'blank': 'True', 'symmetrical': 'False', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'userstories.rolepoints': { - 'Meta': {'object_name': 'RolePoints', 'unique_together': "(('user_story', 'role'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'points': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['projects.Points']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['users.Role']"}), - 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['userstories.UserStory']"}) - }, - 'userstories.userstory': { - 'Meta': {'object_name': 'UserStory', 'unique_together': "(('ref', 'project'),)", 'ordering': "['project', 'order']"}, - 'client_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finish_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'default': 'None', 'null': 'True', 'to': "orm['milestones.Milestone']", 'blank': 'True', 'on_delete': 'models.SET_NULL'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_user_stories'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['users.User']"}), - 'points': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'userstories'", 'symmetrical': 'False', 'to': "orm['projects.Points']", 'through': "orm['userstories.RolePoints']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'blank': 'True', 'default': 'None', 'null': 'True'}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'user_stories'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['projects.UserStoryStatus']"}), - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'team_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'watched_us'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['users.User']"}) - } - } - - complete_apps = ['tasks'] \ No newline at end of file diff --git a/greenmine/projects/tasks/tests/tests_api.py b/greenmine/projects/tasks/tests/tests_api.py index effe0aca..52294643 100644 --- a/greenmine/projects/tasks/tests/tests_api.py +++ b/greenmine/projects/tasks/tests/tests_api.py @@ -18,7 +18,7 @@ from . import create_task class TasksTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1) # Project owner diff --git a/greenmine/projects/tests/tests_api.py b/greenmine/projects/tests/tests_api.py index 037f27ec..63134bb3 100644 --- a/greenmine/projects/tests/tests_api.py +++ b/greenmine/projects/tests/tests_api.py @@ -13,7 +13,7 @@ from greenmine.projects.models import Project, Membership from . import create_project, add_membership class ProfileTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1, is_superuser=True) @@ -154,7 +154,7 @@ class ProfileTestCase(test.TestCase): class ProjectsTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1) diff --git a/greenmine/projects/userstories/migrations/0001_initial.py b/greenmine/projects/userstories/migrations/0001_initial.py index 8733b6ed..41322abf 100644 --- a/greenmine/projects/userstories/migrations/0001_initial.py +++ b/greenmine/projects/userstories/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import datetime +from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -11,9 +11,9 @@ class Migration(SchemaMigration): # Adding model 'RolePoints' db.create_table('userstories_rolepoints', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user_story', self.gf('django.db.models.fields.related.ForeignKey')(related_name='role_points', to=orm['userstories.UserStory'])), - ('role', self.gf('django.db.models.fields.related.ForeignKey')(related_name='role_points', to=orm['users.Role'])), - ('points', self.gf('django.db.models.fields.related.ForeignKey')(related_name='role_points', to=orm['projects.Points'])), + ('user_story', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['userstories.UserStory'], related_name='role_points')), + ('role', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['users.Role'], related_name='role_points')), + ('points', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Points'], related_name='role_points')), )) db.send_create_signal('userstories', ['RolePoints']) @@ -23,16 +23,15 @@ class Migration(SchemaMigration): # Adding model 'UserStory' db.create_table('userstories_userstory', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('uuid', self.gf('django.db.models.fields.CharField')(max_length=40, unique=True, blank=True)), - ('ref', self.gf('django.db.models.fields.BigIntegerField')(db_index=True, null=True, default=None, blank=True)), - ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(null=True, blank=True, to=orm['milestones.Milestone'], default=None, related_name='user_stories', on_delete=models.SET_NULL)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_stories', to=orm['projects.Project'])), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(null=True, blank=True, related_name='owned_user_stories', to=orm['users.User'], on_delete=models.SET_NULL)), - ('status', self.gf('django.db.models.fields.related.ForeignKey')(null=True, blank=True, related_name='user_stories', to=orm['projects.UserStoryStatus'], on_delete=models.SET_NULL)), + ('ref', self.gf('django.db.models.fields.BigIntegerField')(default=None, blank=True, db_index=True, null=True)), + ('milestone', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_stories', default=None, blank=True, on_delete=models.SET_NULL, null=True, to=orm['milestones.Milestone'])), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'], related_name='user_stories')), + ('owner', self.gf('django.db.models.fields.related.ForeignKey')(related_name='owned_user_stories', blank=True, on_delete=models.SET_NULL, null=True, to=orm['users.User'])), + ('status', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user_stories', blank=True, on_delete=models.SET_NULL, null=True, to=orm['projects.UserStoryStatus'])), ('order', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=100)), - ('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('created_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now_add=True)), ('modified_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, auto_now=True)), - ('finish_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + ('finish_date', self.gf('django.db.models.fields.DateTimeField')(blank=True, null=True)), ('subject', self.gf('django.db.models.fields.CharField')(max_length=500)), ('description', self.gf('django.db.models.fields.TextField')(blank=True)), ('client_requirement', self.gf('django.db.models.fields.BooleanField')(default=False)), @@ -75,140 +74,210 @@ class Migration(SchemaMigration): 'auth.group': { 'Meta': {'object_name': 'Group'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) }, 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission', 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) }, 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType'}, + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'", 'ordering': "('name',)"}, 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, - 'milestones.milestone': { - 'Meta': {'ordering': "['project', '-created_date']", 'unique_together': "(('name', 'project'),)", 'object_name': 'Milestone'}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': '0.0', 'blank': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '200'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'blank': 'True', 'related_name': "'owned_milestones'", 'to': "orm['users.User']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'milestones'", 'to': "orm['projects.Project']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'blank': 'True'}) - }, - 'projects.membership': { - 'Meta': {'ordering': "['project', 'role', 'user']", 'unique_together': "(('user', 'project'),)", 'object_name': 'Membership'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['projects.Project']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.Role']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'to': "orm['users.User']"}) - }, - 'projects.points': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'Points'}, + 'domains.domain': { + 'Meta': {'object_name': 'Domain', 'ordering': "('domain',)"}, + 'domain': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'points'", 'to': "orm['projects.Project']"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) + 'public_register': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scheme': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '60', 'null': 'True'}) }, - 'projects.project': { - 'Meta': {'ordering': "['name']", 'object_name': 'Project'}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), + 'milestones.milestone': { + 'Meta': {'unique_together': "(('name', 'project'),)", 'object_name': 'Milestone', 'ordering': "['project', 'created_date']"}, + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'disponibility': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'blank': 'True', 'null': 'True'}), + 'estimated_finish': ('django.db.models.fields.DateField', [], {'default': 'None', 'blank': 'True', 'null': 'True'}), + 'estimated_start': ('django.db.models.fields.DateField', [], {'default': 'None', 'blank': 'True', 'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['projects.Membership']", 'symmetrical': 'False', 'related_name': "'projects'", 'to': "orm['users.User']"}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '250', 'unique': 'True'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_projects'", 'to': "orm['users.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'blank': 'True'}) + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), + 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_milestones'", 'blank': 'True', 'null': 'True', 'to': "orm['users.User']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'milestones'"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, - 'projects.userstorystatus': { - 'Meta': {'ordering': "['project', 'name']", 'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus'}, + 'projects.issuestatus': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'IssueStatus', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'us_statuses'", 'to': "orm['projects.Project']"}) + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_statuses'"}) + }, + 'projects.issuetype': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'IssueType', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'issue_types'"}) + }, + 'projects.membership': { + 'Meta': {'object_name': 'Membership', 'ordering': "['project', 'role']"}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True', 'auto_now_add': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), + 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), + 'token': ('django.db.models.fields.CharField', [], {'unique': 'True', 'default': 'None', 'blank': 'True', 'max_length': '60', 'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'memberships'", 'default': 'None', 'blank': 'True', 'null': 'True', 'to': "orm['users.User']"}) + }, + 'projects.points': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'Points', 'ordering': "['project', 'order', 'name']"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'points'"}), + 'value': ('django.db.models.fields.FloatField', [], {'default': 'None', 'blank': 'True', 'null': 'True'}) + }, + 'projects.priority': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'Priority', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'priorities'"}) + }, + 'projects.project': { + 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), + 'default_issue_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.IssueStatus']"}), + 'default_issue_type': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.IssueType']"}), + 'default_points': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.Points']"}), + 'default_priority': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.Priority']"}), + 'default_question_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.QuestionStatus']"}), + 'default_severity': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.Severity']"}), + 'default_task_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.TaskStatus']"}), + 'default_us_status': ('django.db.models.fields.related.OneToOneField', [], {'unique': 'True', 'related_name': "'+'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.UserStoryStatus']"}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'default': '1', 'null': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'projects'", 'to': "orm['users.User']", 'through': "orm['projects.Membership']"}), + 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['domains.Domain']", 'null': 'True', 'related_name': "'projects'"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}), + 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), + 'total_milestones': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True', 'null': 'True'}), + 'total_story_points': ('django.db.models.fields.FloatField', [], {'default': 'None', 'null': 'True'}) + }, + 'projects.questionstatus': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'QuestionStatus', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'question_status'"}) + }, + 'projects.severity': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'Severity', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'severities'"}) + }, + 'projects.taskstatus': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'TaskStatus', 'ordering': "['project', 'order', 'name']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#999999'", 'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'task_statuses'"}) + }, + 'projects.userstorystatus': { + 'Meta': {'unique_together': "(('project', 'name'),)", 'object_name': 'UserStoryStatus', 'ordering': "['project', 'order', 'name']"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'us_statuses'"}) }, 'users.role': { - 'Meta': {'ordering': "['order', 'slug']", 'object_name': 'Role'}, + 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'roles'", 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '250', 'unique': 'True', 'blank': 'True'}) + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Permission']", 'related_name': "'roles'"}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'blank': 'True', 'max_length': '250'}) }, 'users.user': { - 'Meta': {'ordering': "['username']", 'object_name': 'User'}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), + 'Meta': {'object_name': 'User', 'ordering': "['username']"}, + 'color': ('django.db.models.fields.CharField', [], {'default': "'#669933'", 'blank': 'True', 'max_length': '9'}), 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), + 'default_language': ('django.db.models.fields.CharField', [], {'default': "''", 'blank': 'True', 'max_length': '20'}), + 'default_timezone': ('django.db.models.fields.CharField', [], {'default': "''", 'blank': 'True', 'max_length': '20'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'related_name': "'user_set'", 'to': "orm['auth.Group']"}), + 'email': ('django.db.models.fields.EmailField', [], {'blank': 'True', 'max_length': '75'}), + 'first_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'last_name': ('django.db.models.fields.CharField', [], {'blank': 'True', 'max_length': '30'}), + 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'notify_level': ('django.db.models.fields.CharField', [], {'default': "'all_owned_projects'", 'max_length': '32'}), 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'default': 'None', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'symmetrical': 'False', 'related_name': "'user_set'", 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'}) + 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'blank': 'True', 'max_length': '500'}), + 'token': ('django.db.models.fields.CharField', [], {'default': 'None', 'blank': 'True', 'max_length': '200', 'null': 'True'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) }, 'userstories.rolepoints': { - 'Meta': {'unique_together': "(('user_story', 'role'),)", 'object_name': 'RolePoints'}, + 'Meta': {'unique_together': "(('user_story', 'role'),)", 'object_name': 'RolePoints', 'ordering': "['user_story', 'role']"}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'points': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['projects.Points']"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['users.Role']"}), - 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'role_points'", 'to': "orm['userstories.UserStory']"}) + 'points': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Points']", 'related_name': "'role_points'"}), + 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'role_points'"}), + 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userstories.UserStory']", 'related_name': "'role_points'"}) }, 'userstories.userstory': { - 'Meta': {'ordering': "['project', 'order']", 'unique_together': "(('ref', 'project'),)", 'object_name': 'UserStory'}, + 'Meta': {'unique_together': "(('ref', 'project'),)", 'object_name': 'UserStory', 'ordering': "['project', 'order']"}, 'client_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'created_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now_add': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'finish_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'blank': 'True', 'to': "orm['milestones.Milestone']", 'default': 'None', 'related_name': "'user_stories'", 'on_delete': 'models.SET_NULL'}), + 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'default': 'None', 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['milestones.Milestone']"}), 'modified_date': ('django.db.models.fields.DateTimeField', [], {'blank': 'True', 'auto_now': 'True'}), 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'blank': 'True', 'related_name': "'owned_user_stories'", 'to': "orm['users.User']", 'on_delete': 'models.SET_NULL'}), - 'points': ('django.db.models.fields.related.ManyToManyField', [], {'through': "orm['userstories.RolePoints']", 'symmetrical': 'False', 'related_name': "'userstories'", 'to': "orm['projects.Points']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'to': "orm['projects.Project']"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'default': 'None', 'blank': 'True'}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'blank': 'True', 'related_name': "'user_stories'", 'to': "orm['projects.UserStoryStatus']", 'on_delete': 'models.SET_NULL'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owned_user_stories'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['users.User']"}), + 'points': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'userstories'", 'to': "orm['projects.Points']", 'through': "orm['userstories.RolePoints']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'user_stories'"}), + 'ref': ('django.db.models.fields.BigIntegerField', [], {'default': 'None', 'blank': 'True', 'db_index': 'True', 'null': 'True'}), + 'status': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_stories'", 'blank': 'True', 'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['projects.UserStoryStatus']"}), 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), 'team_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'blank': 'True'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'null': 'True', 'blank': 'True', 'symmetrical': 'False', 'related_name': "'watched_us'", 'to': "orm['users.User']"}) + 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'watched_us'", 'blank': 'True', 'null': 'True', 'to': "orm['users.User']"}) } } diff --git a/greenmine/projects/userstories/migrations/0002_auto__del_field_userstory_uuid.py b/greenmine/projects/userstories/migrations/0002_auto__del_field_userstory_uuid.py deleted file mode 100644 index fbdc6310..00000000 --- a/greenmine/projects/userstories/migrations/0002_auto__del_field_userstory_uuid.py +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'UserStory.uuid' - db.delete_column('userstories_userstory', 'uuid') - - - def backwards(self, orm): - # Adding field 'UserStory.uuid' - db.add_column('userstories_userstory', 'uuid', - self.gf('django.db.models.fields.CharField')(max_length=40, unique=True, default='', blank=True), - keep_default=False) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'blank': 'True', 'to': "orm['auth.Permission']"}) - }, - 'auth.permission': { - 'Meta': {'object_name': 'Permission', 'unique_together': "(('content_type', 'codename'),)", 'ordering': "('content_type__app_label', 'content_type__model', 'codename')"}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'db_table': "'django_content_type'", 'object_name': 'ContentType', 'unique_together': "(('app_label', 'model'),)", 'ordering': "('name',)"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'milestones.milestone': { - 'Meta': {'object_name': 'Milestone', 'unique_together': "(('name', 'project'),)", 'ordering': "['project', '-created_date']"}, - 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'disponibility': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': '0.0', 'blank': 'True'}), - 'estimated_finish': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), - 'estimated_start': ('django.db.models.fields.DateField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'to': "orm['users.User']", 'blank': 'True', 'related_name': "'owned_milestones'"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'milestones'"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}) - }, - 'projects.membership': { - 'Meta': {'object_name': 'Membership', 'unique_together': "(('user', 'project'),)", 'ordering': "['project', 'role', 'user']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'memberships'"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'memberships'"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'memberships'"}) - }, - 'projects.points': { - 'Meta': {'object_name': 'Points', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'points'"}), - 'value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None', 'blank': 'True'}) - }, - 'projects.project': { - 'Meta': {'object_name': 'Project', 'ordering': "['name']"}, - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_issue_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_task_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'last_us_ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'default': '1'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'projects'", 'to': "orm['users.User']", 'through': "orm['projects.Membership']"}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.User']", 'related_name': "'owned_projects'"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'total_milestones': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'default': '0', 'blank': 'True'}), - 'total_story_points': ('django.db.models.fields.FloatField', [], {'null': 'True', 'default': 'None'}) - }, - 'projects.userstorystatus': { - 'Meta': {'object_name': 'UserStoryStatus', 'unique_together': "(('project', 'name'),)", 'ordering': "['project', 'name']"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'us_statuses'"}) - }, - 'users.role': { - 'Meta': {'object_name': 'Role', 'ordering': "['order', 'slug']"}, - 'computable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'order': ('django.db.models.fields.IntegerField', [], {'default': '10'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'roles'", 'to': "orm['auth.Permission']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '250', 'blank': 'True'}) - }, - 'users.user': { - 'Meta': {'object_name': 'User', 'ordering': "['username']"}, - 'color': ('django.db.models.fields.CharField', [], {'max_length': '9', 'default': "'#669933'", 'blank': 'True'}), - 'colorize_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'default_language': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'default_timezone': ('django.db.models.fields.CharField', [], {'max_length': '20', 'default': "''", 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'notify_changes_by_me': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'notify_level': ('django.db.models.fields.CharField', [], {'max_length': '32', 'default': "'all_owned_projects'"}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'photo': ('django.db.models.fields.files.FileField', [], {'null': 'True', 'max_length': '500', 'blank': 'True'}), - 'token': ('django.db.models.fields.CharField', [], {'null': 'True', 'max_length': '200', 'default': 'None', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'userstories.rolepoints': { - 'Meta': {'object_name': 'RolePoints', 'unique_together': "(('user_story', 'role'),)"}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'points': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Points']", 'related_name': "'role_points'"}), - 'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['users.Role']", 'related_name': "'role_points'"}), - 'user_story': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userstories.UserStory']", 'related_name': "'role_points'"}) - }, - 'userstories.userstory': { - 'Meta': {'object_name': 'UserStory', 'unique_together': "(('ref', 'project'),)", 'ordering': "['project', 'order']"}, - 'client_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'finish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'milestone': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'related_name': "'user_stories'", 'default': 'None', 'to': "orm['milestones.Milestone']", 'blank': 'True', 'on_delete': 'models.SET_NULL'}), - 'modified_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'to': "orm['users.User']", 'related_name': "'owned_user_stories'", 'blank': 'True', 'on_delete': 'models.SET_NULL'}), - 'points': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'userstories'", 'to': "orm['projects.Points']", 'through': "orm['userstories.RolePoints']"}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['projects.Project']", 'related_name': "'user_stories'"}), - 'ref': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True', 'default': 'None', 'db_index': 'True'}), - 'status': ('django.db.models.fields.related.ForeignKey', [], {'null': 'True', 'to': "orm['projects.UserStoryStatus']", 'related_name': "'user_stories'", 'blank': 'True', 'on_delete': 'models.SET_NULL'}), - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'tags': ('picklefield.fields.PickledObjectField', [], {'blank': 'True'}), - 'team_requirement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'watchers': ('django.db.models.fields.related.ManyToManyField', [], {'null': 'True', 'symmetrical': 'False', 'related_name': "'watched_us'", 'blank': 'True', 'to': "orm['users.User']"}) - } - } - - complete_apps = ['userstories'] \ No newline at end of file diff --git a/greenmine/projects/userstories/tests/tests_api.py b/greenmine/projects/userstories/tests/tests_api.py index 739be988..810a4d16 100644 --- a/greenmine/projects/userstories/tests/tests_api.py +++ b/greenmine/projects/userstories/tests/tests_api.py @@ -15,7 +15,7 @@ from . import create_userstory class UserStoriesTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1) # Project owner diff --git a/greenmine/projects/wiki/tests/tests_api.py b/greenmine/projects/wiki/tests/tests_api.py index e8ba4d2e..48f2f7ea 100644 --- a/greenmine/projects/wiki/tests/tests_api.py +++ b/greenmine/projects/wiki/tests/tests_api.py @@ -14,7 +14,7 @@ from . import create_wiki_page class WikiPagesTestCase(test.TestCase): - fixtures = ["initial_role.json", "initial_site.json"] + fixtures = ["initial_role.json", "initial_domains.json"] def setUp(self): self.user1 = create_user(1) diff --git a/greenmine/settings/common.py b/greenmine/settings/common.py index aee008b3..391a0a25 100644 --- a/greenmine/settings/common.py +++ b/greenmine/settings/common.py @@ -70,7 +70,9 @@ SITES_FRONT = { 1: {"domain": "localhost:9001", "scheme": "http"}, } +DOMAIN_ID = 1 +# Only for django. Not used. SITE_ID = 1 #SESSION BACKEND @@ -154,7 +156,7 @@ TEMPLATE_LOADERS = [ MIDDLEWARE_CLASSES = [ 'greenmine.base.middleware.CoorsMiddleware', - 'greenmine.base.middleware.SitesMiddleware', + 'greenmine.base.domains.middleware.DomainsMiddleware', # Common middlewares 'django.middleware.common.CommonMiddleware', @@ -192,6 +194,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'greenmine.base.users', + 'greenmine.base.domains', 'greenmine.base.notifications', 'greenmine.base.searches', 'greenmine.base', diff --git a/greenmine/urls.py b/greenmine/urls.py index 47c33fca..b0077a75 100644 --- a/greenmine/urls.py +++ b/greenmine/urls.py @@ -13,7 +13,7 @@ admin.autodiscover() urlpatterns = patterns('', url(r'^api/v1/', include(router.urls)), url(r'^api/v1/api-auth/', include('rest_framework.urls', namespace='rest_framework')), - url(r'^api/v1/sites', "greenmine.base.apiviews.sitestatus"), + url(r'^api/v1/sites', "greenmine.base.domains.api.domainstatus"), url(r'^admin/', include(admin.site.urls)), url(r'^grappelli/', include('grappelli.urls')), ) diff --git a/regenerate.sh b/regenerate.sh index 2e9e9bab..14b96fad 100755 --- a/regenerate.sh +++ b/regenerate.sh @@ -10,6 +10,8 @@ echo "-> Run syncdb" python manage.py syncdb --migrate --noinput --traceback # echo "-> Load initial Site" # python manage.py loaddata initial_site --traceback +echo "-> Load initial domain" +python manage.py loaddata initial_domains --traceback echo "-> Load initial user" python manage.py loaddata initial_user --traceback echo "-> Load initial roles" diff --git a/sql/sites.sql b/sql/sites.sql new file mode 100644 index 00000000..0a800899 --- /dev/null +++ b/sql/sites.sql @@ -0,0 +1,3 @@ +alter table base_site rename to domains_domain; +alter table base_sitemember rename to domains_domainmember; +delete from south_migrationhistory;