From 1f863847110e1e0b6724280cff1ad3c255dd800f Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Mon, 23 Apr 2012 15:38:08 +0400 Subject: Custom manage.py commands for peers. Subclass for non-human users in models.py --- gstudio/management/commands/peers.py | 23 ++++++++++++ gstudio/management/commands/register-peer.py | 52 ++++++++++++++++++++++++++++ gstudio/models.py | 7 +++- 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 gstudio/management/commands/peers.py create mode 100644 gstudio/management/commands/register-peer.py diff --git a/gstudio/management/commands/peers.py b/gstudio/management/commands/peers.py new file mode 100644 index 0000000..cb79991 --- /dev/null +++ b/gstudio/management/commands/peers.py @@ -0,0 +1,23 @@ +# Copyright (c) 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program 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 +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from django.core.management.base import NoArgsCommand +import sys +from gstudio.models import Peer + +class Command(NoArgsCommand): + """Custom manage.py command to show all peers""" + def handle_noargs(self, **options): + sys.stdout.write("{0}\n".format(Peer.objects.all())) diff --git a/gstudio/management/commands/register-peer.py b/gstudio/management/commands/register-peer.py new file mode 100644 index 0000000..a068b2f --- /dev/null +++ b/gstudio/management/commands/register-peer.py @@ -0,0 +1,52 @@ +# Copyright (c) 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program 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 +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from django.core.management.base import BaseCommand +from optparse import make_option +import sys +from gstudio.models import Peer + +class Command(BaseCommand): + """Custom manage.py command to register a peer""" + option_list = BaseCommand.option_list + ( + make_option("--ip", action="store", type="string", + dest="ip", help="Specify an IP"), + make_option("--pkey", action="store", type="string", + dest="pkey", help="Specify a public-key")) + + def handle(self, *args, **options): + try: + ip = options["ip"] + pkey = options["pkey"] + + if not ip: + sys.stderr.write("Please specify an IP\n") + sys.exit(2) + + if not pkey: + sys.stderr.write("Please specify a public-key\n") + sys.exit(2) + + pkey = open(options["pkey"]).readline().rstrip() + + except (IOError, TypeError): + sys.stderr.write("Please specify a correct public-key\n") + sys.exit(2) + + ip = Peer(ip="{0}".format(ip)) + ip.save() + + pkey = Peer(pkey="{0}".format(pkey)) + pkey.save() diff --git a/gstudio/models.py b/gstudio/models.py index d793db0..a9d6928 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -1950,5 +1950,10 @@ post_save.connect(ping_directories_handler, sender=Nodetype, post_save.connect(ping_external_urls_handler, sender=Nodetype, dispatch_uid='gstudio.nodetype.post_save.ping_external_urls') +class Peer(User): + """Subclass for non-human users""" + def __unicode__(self): + return self.ip - + ip = models.IPAddressField("Peer's IP address") + pkey = models.CharField(("Peer's public-key"), max_length=255) -- cgit v1.1 From 7c987c6edc92554eafd5e0600fa92589b140d609 Mon Sep 17 00:00:00 2001 From: Kabir Date: Wed, 25 Apr 2012 15:59:58 +0530 Subject: Dashboard updated, basic models ( OT,O,AT,RT) put in a separate division --- demo/dashboard.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/demo/dashboard.py b/demo/dashboard.py index 93b0805..1b3d155 100644 --- a/demo/dashboard.py +++ b/demo/dashboard.py @@ -92,17 +92,29 @@ class CustomIndexDashboard(Dashboard): collapsible=False, children = [ modules.AppList( - #Gstudio models here ( other than attribute datatype) - _('Gstudio'), + _('Gstudio (Basic)'), column=1, collapsible=False, models=( - 'gstudio.models.Objecttype', + 'gstudio.models.Objecttype', + 'gstudio.models.Attributetype', + 'gstudio.models.Relationtype', + 'objectapp.models.Gbobject', + ), + ), + + modules.AppList( + + + #Gstudio models here ( other than attribute datatype and collapsible ones) + _('Gstudio (Advanced)'), + column=1, + collapsible=True, + models=( + 'gstudio.models.Metatype', 'gstudio.models.Relation', - 'gstudio.models.Relationtype', 'gstudio.models.Attribute', - 'gstudio.models.Attributetype', 'gstudio.models.Systemtype', 'gstudio.models.Processtype', 'gstudio.models.AttributeSpecification', @@ -116,18 +128,22 @@ class CustomIndexDashboard(Dashboard): ), #Object App models here - modules.AppList( - _('Object App'), + _('Object App (Advanced)'), column=1, - collapsible=False, + collapsible=True, models=( - 'objectapp.models.*', + 'objectapp.models.Process', + 'objectapp.models.System', ), ), + + + + # Gstudio Attribute datatype models here modules.AppList( -- cgit v1.1 From 5cbbbd831ed54e6a3912975de6f562691245ba32 Mon Sep 17 00:00:00 2001 From: Kabir Date: Wed, 25 Apr 2012 17:21:41 +0530 Subject: Peer class registered with Admin interface --- gstudio/admin/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gstudio/admin/__init__.py b/gstudio/admin/__init__.py index 030e056..159fcf2 100644 --- a/gstudio/admin/__init__.py +++ b/gstudio/admin/__init__.py @@ -36,6 +36,8 @@ from gstudio.models import AttributeFilePathField from gstudio.models import AttributeImageField from gstudio.models import AttributeURLField from gstudio.models import AttributeIPAddressField +from gstudio.models import Peer + #Admin imports @@ -79,6 +81,7 @@ from gstudio.admin.attribute_ipaddressfield import AttributeIPAddressFieldAdmin + admin.site.register(Objecttype, ObjecttypeAdmin) admin.site.register(Metatype, MetatypeAdmin) admin.site.register(Relationtype, RelationtypeAdmin) @@ -95,6 +98,8 @@ admin.site.register(Union, UnionAdmin) admin.site.register(Complement, ComplementAdmin) admin.site.register(Intersection, IntersectionAdmin) admin.site.register(Expression, ExpressionAdmin) +admin.site.register(Peer) + admin.site.register(AttributeCharField, AttributeCharFieldAdmin) admin.site.register(AttributeTextField, AttributeTextFieldAdmin) -- cgit v1.1 From 6bc86db91bebff8537fe0d0d9c3c530b392a8e1d Mon Sep 17 00:00:00 2001 From: Kabir Date: Wed, 25 Apr 2012 17:25:11 +0530 Subject: Dashboard updated with Peer class --- demo/dashboard.py | 1 + 1 file changed, 1 insertion(+) diff --git a/demo/dashboard.py b/demo/dashboard.py index 1b3d155..3e4c726 100644 --- a/demo/dashboard.py +++ b/demo/dashboard.py @@ -124,6 +124,7 @@ class CustomIndexDashboard(Dashboard): 'gstudio.models.Complement', 'gstudio.models.Intersection', 'gstudio.models.Expression', + 'gstudio.models.Peer', ), ), -- cgit v1.1 From eebf47e459a51288494ca2a3c8ae19a0ffbf4eac Mon Sep 17 00:00:00 2001 From: Anuja Date: Thu, 26 Apr 2012 15:45:13 +0530 Subject: Modified Relation and Attribute admin forms --- gstudio/admin/attribute.py | 10 +++++++++- gstudio/admin/forms.py | 16 ++-------------- gstudio/admin/relation.py | 15 ++++++++++++++- gstudio/models.py | 4 ++-- gstudio/views/ajaxviews.py | 8 +++----- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/gstudio/admin/attribute.py b/gstudio/admin/attribute.py index 336509e..7a34cb8 100644 --- a/gstudio/admin/attribute.py +++ b/gstudio/admin/attribute.py @@ -6,15 +6,23 @@ from django.utils.html import escape from gstudio.admin.forms import AttributeAdminForm from gstudio.models import * import reversion +from django.template.defaultfilters import slugify class AttributeAdmin(reversion.VersionAdmin): + fieldsets=((_('Attribute'),{'fields': ('subject','subject_scope','attributetype','attributetype_scope','svalue','value_scope','last_update','creation_date')}), + +) + + class Media: js = ("gstudio/js/gstudiojs.js",) def save_model(self, request, attribute, form, change): - attribute.title = attribute.composed_attribution + attribute.title = attribute.composed_sentence + attribute.slug = slugify(attribute.title) attribute.save() + diff --git a/gstudio/admin/forms.py b/gstudio/admin/forms.py index 37b578c..a2415c1 100644 --- a/gstudio/admin/forms.py +++ b/gstudio/admin/forms.py @@ -154,7 +154,7 @@ class RelationtypeAdminForm(forms.ModelForm): super(RelationtypeAdminForm, self).__init__(*args, **kwargs) prior = ManyToManyRel(Nodetype, 'id') post = ManyToManyRel(Nodetype, 'id') - + self.fields['priornodes'].widget = RelatedFieldWidgetWrapper( @@ -207,18 +207,6 @@ class RelationAdminForm(forms.ModelForm): AppNodeList = AppNode.objects.all() return AppNodeList - - - - - - - - - - - - class Meta: @@ -289,7 +277,7 @@ class AttributetypeAdminForm(forms.ModelForm): super(AttributetypeAdminForm, self).__init__(*args, **kwargs) prior = ManyToManyRel(Nodetype, 'id') post = ManyToManyRel(Nodetype, 'id') - + self.fields['sites'].initial = [Site.objects.get_current()] self.fields['priornodes'].widget = RelatedFieldWidgetWrapper( self.fields['priornodes'].widget, prior, self.admin_site) diff --git a/gstudio/admin/relation.py b/gstudio/admin/relation.py index 688ad6e..3d2f2e4 100644 --- a/gstudio/admin/relation.py +++ b/gstudio/admin/relation.py @@ -5,12 +5,25 @@ from django.utils.translation import ugettext_lazy as _ from gstudio.admin.forms import RelationAdminForm import reversion +from django.template.defaultfilters import slugify class RelationAdmin(reversion.VersionAdmin): - fieldsets=((_('Relation'),{'fields': ('title','last_update','creation_date','relationtype_scope','relationtype','left_subject_scope','left_subject' ,'right_subject_scope','right_subject')}), + fieldsets=((_('Relation'),{'fields': ('relationtype','relationtype_scope','left_subject' ,'left_subject_scope','right_subject','right_subject_scope','last_update','creation_date')}), ) + + def get_title(self, edge): + """Return the title with word count and number of comments""" + title = _('%(title)s (%(word_count)i words)') % \ + {'title': nodetype.title, 'word_count': nodetype.word_count} + comments = nodetype.comments.count() + if comments: + return _('%(title)s (%(comments)i comments)') % \ + {'title': title, 'comments': comments} + return title + get_title.short_description = _('title') def save_model(self, request, relation, form, change): relation.title = relation.composed_sentence + relation.slug = slugify(relation.title) relation.save() diff --git a/gstudio/models.py b/gstudio/models.py index a9d6928..4fa9380 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -1319,10 +1319,10 @@ class Relationtype(Nodetype): ''' inverse = models.CharField(_('inverse name'), help_text=_('when subjecttypes are interchanged, what should be the name of the relation type? This is mandatory field. If the relation is symmetric, same name will do.'), max_length=255,db_index=True ) left_subjecttype = models.ForeignKey(NID,related_name="left_subjecttype_of", verbose_name='left role') - left_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Node types for left role') + left_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for left role') left_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the left role') right_subjecttype = models.ForeignKey(NID,related_name="right_subjecttype_of", verbose_name='right role') - right_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Node types for right role') + right_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for right role') right_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the right role') is_symmetrical = models.NullBooleanField(verbose_name='Is symmetrical?') is_reflexive = models.NullBooleanField(verbose_name='Is reflexive?') diff --git a/gstudio/views/ajaxviews.py b/gstudio/views/ajaxviews.py index a909db2..8fbb6e0 100644 --- a/gstudio/views/ajaxviews.py +++ b/gstudio/views/ajaxviews.py @@ -308,12 +308,10 @@ def selectionlist_UP(obj): membs=eachchild.objecttypes.all() def selectionlist_OB(obj): global rlist - - obs=Gbobject.objects.filter(title=obj) + obs=Objecttype.objects.get(title=obj) #Get all members of OB - if obs: - obs=Gbobject.objects.get(title=obj) - rlist=additemdict(rlist,obs) + for each in obs.member_objects.all(): + rlist=additemdict(rlist,each) return rlist -- cgit v1.1 From 7f28aafd641a500474bd078e9cb2d5baf593a0fb Mon Sep 17 00:00:00 2001 From: Kabir Date: Thu, 26 Apr 2012 17:57:50 +0530 Subject: save method added in models to enable registration in reversion --- gstudio/models.py | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++ objectapp/models.py | 13 ++++ 2 files changed, 200 insertions(+) diff --git a/gstudio/models.py b/gstudio/models.py index a9d6928..3e036f5 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -106,6 +106,7 @@ import json import reversion from reversion.models import Version from django.core import serializers +from reversion.models import * NODETYPE_CHOICES = ( ('ND', 'Nodes'), @@ -319,6 +320,11 @@ class Node(NID): class Meta: abstract=False + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Node, self).save(*args, **kwargs) # Call the "real" save() method. + + class Edge(NID): @@ -327,6 +333,11 @@ class Edge(NID): class Meta: abstract=False + @reversion.create_revision() + # Save for edge + def save(self, *args, **kwargs): + super(Edge, self).save(*args, **kwargs) # Call the "real" save() method. + class Metatype(Node): @@ -508,6 +519,12 @@ class Metatype(Node): verbose_name = _('metatype') verbose_name_plural = _('metatypes') + # Save for metatype + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. + + @@ -1131,6 +1148,12 @@ class Nodetype(Node): verbose_name_plural = _('node types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + + # Save for nodetype + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Nodetype, self).save(*args, **kwargs) # Call the "real" save() method. + class Objecttype(Nodetype): @@ -1310,6 +1333,12 @@ class Objecttype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Objecttype + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. + + @@ -1351,6 +1380,12 @@ class Relationtype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Relationtype + @reversion.create_revision() + def save(self, *args, **kwargs): + super(RelationType, self).save(*args, **kwargs) # Call the "real" save() method. + + class Attributetype(Nodetype): ''' @@ -1394,6 +1429,12 @@ class Attributetype(Nodetype): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + # Save for Attributetype + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. + + class Relation(Edge): @@ -1484,6 +1525,13 @@ class Relation(Edge): function that composes the right_subject and relation name, as in "x as a friend", "y as a sibling" ''' return '%s as a %s' % (self.right_subject, self.relationtype) + + + # Save for Relation + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Relation, self).save(*args, **kwargs) # Call the "real" save() method. + class Attribute(Edge): @@ -1560,6 +1608,12 @@ class Attribute(Edge): for each in Objecttype.objects.all(): if attr.subjecttype.id == each.id: return each.get_members + + # Save for Attribute + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. + @@ -1570,12 +1624,23 @@ class AttributeCharField(Attribute): def __unicode__(self): return self.title + + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeCharField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeTextField(Attribute): value = models.TextField(verbose_name='text') def __unicode__(self): return self.title + + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeIntegerField(Attribute): value = models.IntegerField(max_length=100, verbose_name='Integer') @@ -1583,6 +1648,12 @@ class AttributeIntegerField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + + + class AttributeCommaSeparatedIntegerField(Attribute): value = models.CommaSeparatedIntegerField(max_length=100, verbose_name='integers separated by comma') @@ -1590,6 +1661,10 @@ class AttributeCommaSeparatedIntegerField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeBigIntegerField(Attribute): value = models.BigIntegerField(max_length=100, verbose_name='big integer') @@ -1604,12 +1679,19 @@ class AttributePositiveIntegerField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributePositiveIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDecimalField(Attribute): value = models.DecimalField(max_digits=3, decimal_places=2, verbose_name='decimal') def __unicode__(self): return self.title + def save(self, *args, **kwargs): + super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeFloatField(Attribute): @@ -1618,12 +1700,20 @@ class AttributeFloatField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeFloatField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeBooleanField(Attribute): value = models.BooleanField(verbose_name='boolean') def __unicode__(self): return self.title + def save(self, *args, **kwargs): + super(AttributeBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeNullBooleanField(Attribute): @@ -1632,6 +1722,11 @@ class AttributeNullBooleanField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeNullBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDateField(Attribute): value = models.DateField(max_length=100, verbose_name='date') @@ -1639,12 +1734,22 @@ class AttributeDateField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeDateField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeDateTimeField(Attribute): value = models.DateTimeField(max_length=100, verbose_name='date time') def __unicode__(self): return self.title + + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeTimeField(Attribute): @@ -1653,6 +1758,11 @@ class AttributeTimeField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeTimeField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeEmailField(Attribute): value = models.CharField(max_length=100,verbose_name='value') @@ -1660,6 +1770,11 @@ class AttributeEmailField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeEmailField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeFileField(Attribute): value = models.FileField(upload_to='/media', verbose_name='file') @@ -1667,6 +1782,11 @@ class AttributeFileField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeFileField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeFilePathField(Attribute): value = models.FilePathField(verbose_name='path of file') @@ -1674,6 +1794,11 @@ class AttributeFilePathField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeFilePathField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeImageField(Attribute): value = models.ImageField(upload_to='/media', verbose_name='image') @@ -1681,6 +1806,11 @@ class AttributeImageField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeImageField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeURLField(Attribute): value = models.URLField(max_length=100, verbose_name='url') @@ -1688,6 +1818,11 @@ class AttributeURLField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeURLField, self).save(*args, **kwargs) # Call the "real" save() method. + + class AttributeIPAddressField(Attribute): value = models.IPAddressField(max_length=100, verbose_name='ip address') @@ -1695,6 +1830,11 @@ class AttributeIPAddressField(Attribute): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeIPAddressField, self).save(*args, **kwargs) # Call the "real" save() method. + + class Processtype(Nodetype): @@ -1718,6 +1858,10 @@ class Processtype(Nodetype): verbose_name_plural = _('process types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. + @@ -1749,6 +1893,11 @@ class Systemtype(Nodetype): verbose_name_plural = _('system types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeSpecification(Node): @@ -1782,6 +1931,12 @@ class AttributeSpecification(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(AttributeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + + class RelationSpecification(Node): """ @@ -1805,11 +1960,17 @@ class RelationSpecification(Node): return self.composed_subject + class Meta: verbose_name = _('relation specification') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(RelationSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + class NodeSpecification(Node): """ @@ -1841,6 +2002,12 @@ class NodeSpecification(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(NodeSpecification, self).save(*args, **kwargs) # Call the "real" save() method. + + + class Expression(Node): """ @@ -1868,6 +2035,11 @@ class Expression(Node): permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Expression, self).save(*args, **kwargs) # Call the "real" save() method. + + class Union(Node): @@ -1879,6 +2051,11 @@ class Union(Node): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Union, self).save(*args, **kwargs) # Call the "real" save() method. + + class Complement(Node): @@ -1890,6 +2067,11 @@ class Complement(Node): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Complement, self).save(*args, **kwargs) # Call the "real" save() method. + + class Intersection(Node): """ Intersection of classes @@ -1898,6 +2080,11 @@ class Intersection(Node): def __unicode__(self): return self.title + + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Intersection, self).save(*args, **kwargs) # Call the "real" save() method. + reversion.register(NID) diff --git a/objectapp/models.py b/objectapp/models.py index c4a612d..16e36c9 100644 --- a/objectapp/models.py +++ b/objectapp/models.py @@ -113,6 +113,7 @@ from objectapp.moderator import GbobjectCommentModerator from objectapp.url_shortener import get_url_shortener from objectapp.signals import ping_directories_handler from objectapp.signals import ping_external_urls_handler +from reversion.models import * ''' class Author(User): @@ -649,6 +650,11 @@ class Gbobject(Node): 'day': self.creation_date.strftime('%d'), 'slug': self.slug}) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. + + class Meta: """Gbobject's Meta""" ordering = ['-creation_date'] @@ -688,6 +694,10 @@ class Process(Gbobject): def __unicode__(self): return self.title + @reversion.create_revision() + def save(self, *args, **kwargs): + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + class Meta: verbose_name = _('process') verbose_name_plural = _('processes') @@ -724,6 +734,9 @@ class System(Gbobject): system_set = models.ManyToManyField('self', related_name="in_system_set_of", verbose_name='nested systems', blank=True, null=False) + @reversion.create_revision() + def save(self, *args, **kwargs): + super(System, self).save(*args, **kwargs) # Call the "real" save() method. def __unicode__(self): -- cgit v1.1 From 82c7268e82bc3b7155e198d42d7edfd5efad3d9b Mon Sep 17 00:00:00 2001 From: Kabir Date: Fri, 27 Apr 2012 11:56:51 +0530 Subject: Small bug ( due to a spelling mistake ) in models fixed --- gstudio/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gstudio/models.py b/gstudio/models.py index f3d2fe1..3432920 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -1383,7 +1383,7 @@ class Relationtype(Nodetype): # Save for Relationtype @reversion.create_revision() def save(self, *args, **kwargs): - super(RelationType, self).save(*args, **kwargs) # Call the "real" save() method. + super(Relationtype, self).save(*args, **kwargs) # Call the "real" save() method. -- cgit v1.1 From 9f8f3af43fe8ab6c3f3f5c4882ff4f325ee417b2 Mon Sep 17 00:00:00 2001 From: Kabir Date: Tue, 1 May 2012 12:42:50 +0530 Subject: Relation filter modified to include OT, thier children, members of OTs and children.Creation, updation date removed from relation form --- gstudio/admin/relation.py | 2 +- gstudio/views/ajaxviews.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gstudio/admin/relation.py b/gstudio/admin/relation.py index 3d2f2e4..8f112ef 100644 --- a/gstudio/admin/relation.py +++ b/gstudio/admin/relation.py @@ -8,7 +8,7 @@ import reversion from django.template.defaultfilters import slugify class RelationAdmin(reversion.VersionAdmin): - fieldsets=((_('Relation'),{'fields': ('relationtype','relationtype_scope','left_subject' ,'left_subject_scope','right_subject','right_subject_scope','last_update','creation_date')}), + fieldsets=((_('Relation'),{'fields': ('relationtype','relationtype_scope','left_subject' ,'left_subject_scope','right_subject','right_subject_scope')}), ) diff --git a/gstudio/views/ajaxviews.py b/gstudio/views/ajaxviews.py index 8fbb6e0..3991a89 100644 --- a/gstudio/views/ajaxviews.py +++ b/gstudio/views/ajaxviews.py @@ -76,22 +76,37 @@ def additemdict(sdict,itemtoadd): sdict[itemtoadd.id]=itemtoadd.title return sdict def selectionlist_OT(obj): + # Basically the filter must filter out the OT, their members, the children and members of the children + global rlist # Return all OTs and members of subtypes of OT obs=Objecttype.objects.filter(title=obj) # Get all members of subtypes of each OT if obs: + # Add the items first + for each in obs: + rlist=additemdict(rlist,each) obs=Objecttype.objects.get(title=obj) + # Add the objects first + # for each in obs: + # rlist = additemdict(rlist,each) memobs=obs.get_members if memobs: for each in memobs: rlist=additemdict(rlist,each) childrenots=obs.get_children() + # Add children first + for each in childrenots: + rlist=additemdict(rlist,each) + # Add memebers of each child if childrenots: for eachchild in childrenots: membs=eachchild.ref.get_members for each in membs: rlist=additemdict(rlist,each) + + + return rlist def selectionlist_MT(obj): -- cgit v1.1