From: <al...@us...> - 2010-08-31 15:43:13
|
Revision: 15691 http://translate.svn.sourceforge.net/translate/?rev=15691&view=rev Author: alaaosh Date: 2010-08-31 15:42:45 +0000 (Tue, 31 Aug 2010) Log Message: ----------- backport r15667 natural keys to allow migration between database engines Modified Paths: -------------- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/language.py src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/permissions.py src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/profile.py src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/project.py src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/translation_project.py src/branches/Pootle-2.0/Pootle/local_apps/pootle_store/models.py Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/language.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/language.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/language.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -30,8 +30,13 @@ from pootle_app.models.directory import Directory from pootle_app.lib.util import RelatedManager +class LanguageManager(RelatedManager): + def get_by_natural_key(self, code): + return self.get(code=code) + class Language(models.Model): - objects = RelatedManager() + objects = LanguageManager() + class Meta: app_label = "pootle_app" ordering = ['code'] @@ -52,6 +57,10 @@ pootle_path = property(lambda self: '/%s/' % self.code) + def natural_key(self): + return (self.code,) + natural_key.dependencies = ['pootle_app.Directory'] + def __repr__(self): return self.fullname Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/permissions.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/permissions.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/permissions.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -86,8 +86,13 @@ return True return permission_codename in request.permissions +class PermissionSetManager(RelatedManager): + def get_by_natural_key(self, username, pootle_path): + return self.get(profile__user__username=username, directory__pootle_path=pootle_path) + + class PermissionSet(models.Model): - objects = RelatedManager() + objects = PermissionSetManager() class Meta: unique_together = ('profile', 'directory') app_label = "pootle_app" @@ -99,6 +104,10 @@ # compatibility with older versions negative_permissions = models.ManyToManyField(Permission, db_index=True, related_name='permission_sets_negative') + def natural_key(self): + return (self.profile.username, self.directory.pootle_path) + natural_key.dependencies = ['auth.User', 'pootle_app.Profile', 'pootle_app.Directory'] + def __unicode__(self): return "%s : %s" % (self.profile.user.username, self.directory.pootle_path) Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/profile.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/profile.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/profile.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -1,15 +1,15 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# +# # Copyright 2008 Zuza Software Foundation -# +# # This file is part of translate. # # translate is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. -# +# # translate is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -51,6 +51,9 @@ User.objects.__class__ = PootleUserManager class PootleProfileManager(models.Manager): + def get_by_natural_key(self, username): + return self.get(user__username=username) + def get_query_set(self): return super(PootleProfileManager, self).get_query_set().select_related( 'languages', 'projects', 'alt_src_langs') @@ -70,6 +73,10 @@ ui_lang = models.CharField(max_length=50, blank=True, null=True, choices=(choice for choice in lang_choices()), verbose_name=_('Interface Language')) alt_src_langs = models.ManyToManyField('pootle_app.Language', blank=True, db_index=True, limit_choices_to=~Q(code='templates'), related_name="user_alt_src_langs") + def natural_key(self): + return (self.user.username,) + natural_key.dependencies = ['auth.User'] + def __unicode__(self): return self.user.username def get_absolute_url(self): Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/project.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/project.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/project.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -32,7 +32,14 @@ from pootle_misc.util import getfromcache from pootle_misc.baseurl import l +class ProjectManager(models.Manager): + def get_by_natural_key(self, code): + return self.get(code=code) + + class Project(models.Model): + objects = ProjectManager() + class Meta: app_label = "pootle_app" ordering = ['code'] @@ -66,6 +73,9 @@ treestyle = models.CharField(max_length=20, default='auto', choices=treestyle_choices, verbose_name=_('Project Tree Style')) ignoredfiles = models.CharField(max_length=255, blank=True, null=False, default="", verbose_name=_('Ignore Files')) + def natural_key(self): + return (self.code,) + def __unicode__(self): return self.fullname @@ -140,5 +150,4 @@ project_path = absolute_real_path(instance.code) if not os.path.exists(project_path): os.makedirs(project_path) - pre_save.connect(create_project_directory, sender=Project) Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/translation_project.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/translation_project.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_app/models/translation_project.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -80,8 +80,14 @@ class VersionControlError(Exception): pass + +class TranslationProjectManager(RelatedManager): + def get_by_natural_key(self, pootle_path): + return self.get(pootle_path=pootle_path) + class TranslationProject(models.Model): - objects = RelatedManager() + objects = TranslationProjectManager() + index_directory = ".translation_index" class Meta: unique_together = ('language', 'project') @@ -93,6 +99,10 @@ directory = models.OneToOneField(Directory, db_index=True, editable=False) pootle_path = models.CharField(max_length=255, null=False, unique=True, db_index=True, editable=False) + def natural_key(self): + return (self.pootle_path,) + natural_key.dependencies = ['pootle_app.Directory', 'pootle_app.Language', 'pootle_app.Project'] + def __unicode__(self): return self.pootle_path Modified: src/branches/Pootle-2.0/Pootle/local_apps/pootle_store/models.py =================================================================== --- src/branches/Pootle-2.0/Pootle/local_apps/pootle_store/models.py 2010-08-31 15:40:48 UTC (rev 15690) +++ src/branches/Pootle-2.0/Pootle/local_apps/pootle_store/models.py 2010-08-31 15:42:45 UTC (rev 15691) @@ -32,6 +32,7 @@ from pootle_misc.util import getfromcache, deletefromcache from pootle_misc.baseurl import l from pootle_app.models.directory import Directory +from pootle_app.lib.util import RelatedManager from pootle_store.fields import TranslationStoreField from pootle_store.signals import translation_file_updated @@ -42,8 +43,15 @@ # regexp to parse suggester name from msgidcomment suggester_regexp = re.compile(r'suggested by (.*) \[[-0-9]+\]') +class StoreManager(RelatedManager): + def get_by_natural_key(self, pootle_path): + return self.get(pootle_path=pootle_path) + + class Store(models.Model): """A model representing a translation store (i.e. a PO or XLIFF file).""" + objects = StoreManager() + is_dir = False file = TranslationStoreField(upload_to="fish", max_length=255, storage=fs, db_index=True, null=False, editable=False) @@ -57,6 +65,10 @@ ordering = ['pootle_path'] unique_together = ('parent', 'name') + def natural_key(self): + return (self.pootle_path,) + natural_key.dependencies = ['pootle_app.Directory'] + def handle_file_update(self, sender, **kwargs): deletefromcache(self, ["getquickstats", "getcompletestats"]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |