From 73d6a58a88f8d6e63404bbf90dc378ade3509662 Mon Sep 17 00:00:00 2001 From: met2012 Date: Fri, 25 May 2012 17:10:31 +0530 Subject: Returned strings made unicode --- gstudio/models.py | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'gstudio/models.py') diff --git a/gstudio/models.py b/gstudio/models.py index 2c9d51fa..7b1093bd 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -540,7 +540,7 @@ class Metatype(Node): nbh['typeof'] = self.parent # generate ids and names of children/members nbh['contains_subtypes'] = self.children.get_query_set() - nbh['contains_members'] = self.nodetypes.all() + nbh['contains_members'] = self.nodetypes_published() nbh['left_subjecttype_of'] = Relationtype.objects.filter(left_subjecttype=self.id) nbh['right_subjecttype_of'] = Relationtype.objects.filter(right_subjecttype=self.id) nbh['attributetypes'] = Attributetype.objects.filter(subjecttype=self.id) @@ -648,7 +648,7 @@ class Metatype(Node): # generate ids and names of children nbh['contains_subtypes'] = self.children.get_query_set() contains_members_list = [] - for each in self.nodetypes.all(): + for each in self.nodetypes_published(): contains_members_list.append('%s' % (each.get_absolute_url(), each.title)) nbh['contains_members'] = contains_members_list nbh['left_subjecttype_of'] = Relationtype.objects.filter(left_subjecttype=self.id) @@ -663,7 +663,7 @@ class Metatype(Node): def tree_path(self): """Return metatype's tree path, by its ancestors""" if self.parent: - return '%s/%s' % (self.parent.tree_path, self.slug) + return u'%s/%s' % (self.parent.tree_path, self.slug) return self.slug def __unicode__(self): @@ -673,8 +673,8 @@ class Metatype(Node): def composed_sentence(self): "composes the relation as a sentence in triple format." if self.parent: - return '%s is a kind of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.slug) + return u'%s is a kind of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.slug) @models.permalink @@ -968,15 +968,15 @@ class Nodetype(Node): def tree_path(self): """Return nodetype's tree path, by its ancestors""" if self.parent: - return '%s/%s' % (self.parent.tree_path, self.slug) + return u'%s/%s' % (self.parent.tree_path, self.slug) return self.slug @property def tree_path_sentence(self): """ Return the parent of the nodetype in a triple form """ if self.parent: - return '%s is a kind of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.title) + return u'%s is a kind of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.title) @property @@ -1304,22 +1304,22 @@ class Nodetype(Node): if self.metatypes.count: for each in self.metatypes.all(): - return '%s is a member of metatype %s' % (self.title, each) - return '%s is not a fully defined name, consider making it a member of a suitable metatype' % (self.title) + return u'%s is a member of metatype %s' % (self.title, each) + return u'%s is not a fully defined name, consider making it a member of a suitable metatype' % (self.title) @property def subtypeof_sentence(self): "composes the relation as a sentence in triple format." if self.parent: - return '%s is a subtype of %s' % (self.title, self.parent.tree_path) - return '%s is a root node' % (self.title) + return u'%s is a subtype of %s' % (self.title, self.parent.tree_path) + return u'%s is a root node' % (self.title) composed_sentence = property(subtypeof_sentence) def subtypeof(self): "retuns the parent nodetype." if self.parent: - return '%s' % (self.parent.tree_path) + return u'%s' % (self.parent.tree_path) return None @models.permalink @@ -1723,12 +1723,12 @@ class Relation(Edge): @property def composed_sentence(self): "composes the relation as a sentence in a triple format." - return '%s %s %s %s %s %s' % (self.left_subject_scope, self.left_subject, self.relationtype_scope, self.relationtype, self.right_subject_scope, self.right_subject) + return u'%s %s %s %s %s %s' % (self.left_subject_scope, self.left_subject, self.relationtype_scope, self.relationtype, self.right_subject_scope, self.right_subject) @property def inversed_sentence(self): "composes the inverse relation as a sentence in a triple format." - return '%s %s %s %s %s' % (self.objectScope, self.right_subject, self.relationtype.inverse, self.left_subject_scope, self.left_subject ) + return u'%s %s %s %s %s' % (self.objectScope, self.right_subject, self.relationtype.inverse, self.left_subject_scope, self.left_subject ) @property def key_value(self): @@ -1745,14 +1745,14 @@ class Relation(Edge): if self.relationtype: # for relation in self.relationtype(): - return '%s %s %s' % (self.left_subject,self.relationtype,self.right_subject ) + return u'%s %s %s' % (self.left_subject,self.relationtype,self.right_subject ) @property def partial_composition(self): ''' 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) + return u'%s as a %s' % (self.right_subject, self.relationtype) # Save for Relation @@ -1816,21 +1816,21 @@ class Attribute(Edge): ''' composes the attribution as a sentence in a triple format. ''' - return '%s %s has %s %s %s %s' % (self.subject_scope, self.subject, self.attributetype_scope, self.attributetype, self.value_scope, self.svalue) + return u'%s %s has %s %s %s %s' % (self.subject_scope, self.subject, self.attributetype_scope, self.attributetype, self.value_scope, self.svalue) @property def composed_attribution(self): ''' composes a name to the attribute ''' - return 'the %s of %s is %s' % (self.attributetype, self.subject, self.svalue) + return u'the %s of %s is %s' % (self.attributetype, self.subject, self.svalue) @property def partial_composition(self): ''' function that composes the value and attribute name, as in "red as color", "4 as length" ''' - return '%s as %s' % (self.svalue, self.attributetype) + return u'%s as %s' % (self.svalue, self.attributetype) def subject_filter(self,attr): @@ -2247,7 +2247,7 @@ class AttributeSpecification(Node): subjects = u'' for each in self.subjects.all(): subjects = subjects + each.title + ' ' - return 'the %s of %s' % (self.attributetype, subjects) + return u'the %s of %s' % (self.attributetype, subjects) def __unicode__(self): @@ -2288,7 +2288,7 @@ class RelationSpecification(Node): subjects = u'' for each in self.subjects.all(): subjects = subjects + each.title + ' ' - return 'the %s of %s' % (self.relationtype, subjects) + return u'the %s of %s' % (self.relationtype, subjects) def __unicode__(self): return self.composed_subject @@ -2330,7 +2330,7 @@ class NodeSpecification(Node): attributes = u'' for each in self.attributes.all(): attributes = attributes + each.partial_composition + ', ' - return 'the %s with %s, %s' % (self.subject, self.relations, self.attributes) + return u'the %s with %s, %s' % (self.subject, self.relations, self.attributes) def __unicode__(self): return self.composed_subject @@ -2369,7 +2369,7 @@ class Expression(Node): @property def composed_sentence(self): "composes the relation as a sentence in a triple format." - return '%s %s %s' % (self.left_term, self.relationtype, self.right_term) + return u'%s %s %s' % (self.left_term, self.relationtype, self.right_term) class Meta: -- cgit v1.2.3-70-g09d2 From ccd58321500b40ddeed94a9016e7f97fa0731bb2 Mon Sep 17 00:00:00 2001 From: met2012 Date: Fri, 25 May 2012 17:19:42 +0530 Subject: Return string converted to unicode.Minor changes in Metatype class --- gstudio/models.py | 1 + objectapp/models.py | 1 + 2 files changed, 2 insertions(+) (limited to 'gstudio/models.py') diff --git a/gstudio/models.py b/gstudio/models.py index 7b1093bd..18ecf465 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -65,6 +65,7 @@ + """Super models of Gstudio """ import warnings diff --git a/objectapp/models.py b/objectapp/models.py index 8aa779f7..7aad9858 100644 --- a/objectapp/models.py +++ b/objectapp/models.py @@ -113,6 +113,7 @@ from objectapp.url_shortener import get_url_shortener from objectapp.signals import ping_directories_handler from objectapp.signals import ping_external_urls_handler from objectapp.settings import OBJECTAPP_VERSIONING + if OBJECTAPP_VERSIONING: import reversion from reversion.models import * -- cgit v1.2.3-70-g09d2 From f28648fce9a224b6f4c3a24cfaf4b29082dbb775 Mon Sep 17 00:00:00 2001 From: csitifr Date: Mon, 28 May 2012 18:40:43 +0530 Subject: Relation can be now saved and viewed hierachy wise.Attribute does not get saved in duplicate --- demo/settings.py | 6 +- gstudio/models.py | 73 ++++-- gstudio/templates/gstudio/nodetype_detail.html | 3 +- objectapp/models.py | 61 +++-- objectapp/static/objectapp/js/savert.js | 2 +- objectapp/templates/objectapp/fillAT.html | 4 +- objectapp/templates/objectapp/gbobject_detail.html | 34 +-- objectapp/templates/objectapp/selectRT.html | 3 +- objectapp/views/dynamicAT.py | 41 ++- objectapp/views/dynamicRT.py | 282 +++++++++++++++------ 10 files changed, 352 insertions(+), 157 deletions(-) (limited to 'gstudio/models.py') diff --git a/demo/settings.py b/demo/settings.py index 77296fb8..96de64f0 100644 --- a/demo/settings.py +++ b/demo/settings.py @@ -78,8 +78,10 @@ DATABASES = {'default': STATIC_URL = '/static/' MEDIA_URL = '/static' -MEDIA_ROOT = '/static' +#MEDIA_ROOT = '/static' +MEDIA_ROOT = os.path.join(os.path.dirname(__file__), '../gstudio/static') +GSTUDIO_UPLOAD_TO = 'img/' ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/" @@ -157,7 +159,7 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.sites', 'mptt', - # 'reversion', + 'reversion', 'tagging', 'django_xmlrpc', 'grappelli.dashboard', diff --git a/gstudio/models.py b/gstudio/models.py index 5b5cf424..d4cdc5f2 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -288,36 +288,61 @@ class NID(models.Model): @property def getat(self): + """This is will give the possible attributetypes """ try: + pt = [] attributetype = [] - ot = self.ref - attributetype.append(ot.subjecttype_of.all()) + returndict = {} + + pt.append(self.ref) + obj = self.ref + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + + for each in pt: + attributetype.append(each.subjecttype_of.all()) + attributetype = [num for elem in attributetype for num in elem] - return attributetype + + for i in attributetype: + if str(i.applicable_nodetypes) == 'OT': + returndict.update({str(i.title):i.id}) + + return returndict.keys() except: return None @property def getrt(self): - pt =[] #contains parenttype - reltype =[] #contains relationtype - titledict = {} #contains relationtype's title - inverselist = [] #contains relationtype's inverse - finaldict = {} #contains either title of relationtype or inverse of relationtype - listval=[] #contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid - # pt.append(Objecttype.objects.get(title = str(gbid))) - # name = NID.objects.get(title = str(gbid)) + """pt =[] contains parenttype + reltype =[] contains relationtype + titledict = {} contains relationtype's title + inverselist = [] contains relationtype's inverse + finaldict = {} contains either title of relationtype or inverse of relationtype + listval=[] contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid""" + + pt =[] + reltype =[] + titledict = {} + inverselist = [] + finaldict = {} + listval=[] + pt.append(self.ref) + obj = self.ref + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + for i in range(len(pt)): if Relationtype.objects.filter(left_subjecttype = pt[i].id): reltype.append(Relationtype.objects.filter(left_subjecttype = pt[i].id)) if Relationtype.objects.filter(right_subjecttype = pt[i].id): reltype.append(Relationtype.objects.filter(right_subjecttype = pt[i].id)) - - # it converts 2 or more list as one list reltype = [num for elem in reltype for num in elem] #this rqud for filtering - + for i in reltype: titledict.update({i:i.id}) @@ -325,16 +350,16 @@ class NID(models.Model): for i in range(len(titledict)): listval.append(Relationtype.objects.get(title = titledict.keys()[i])) inverselist.append(str(titledict.keys()[i].inverse)) - - + for j in range(len(pt)): for i in range(len(listval)): - if pt[j].id == listval[i].left_subjecttype_id : - finaldict.update({titledict.values()[i]:titledict.keys()[i]}) - elif pt[j].id == listval[i].right_subjecttype_id: - finaldict.update({titledict.values()[i]:inverselist[i]}) + if pt[j].id == listval[i].left_subjecttype_id and str(listval[i].left_applicable_nodetypes) == 'OT' : + finaldict.update({titledict.keys()[i]:titledict.values()[i]}) + if pt[j].id == listval[i].right_subjecttype_id and str(listval[i].right_applicable_nodetypes)=='OT': + finaldict.update({inverselist[i]:titledict.values()[i]}) + - return finaldict.values() + return finaldict.keys() @property @@ -1959,7 +1984,7 @@ class AttributeTimeField(Attribute): class AttributeEmailField(Attribute): - value = models.CharField(max_length=100,verbose_name='value') + value = models.EmailField(max_length=100,verbose_name='value') def __unicode__(self): return self.title @@ -1975,7 +2000,7 @@ class AttributeEmailField(Attribute): class AttributeFileField(Attribute): - value = models.FileField(upload_to='/media', verbose_name='file') + value = models.FileField(upload_to='media/'+UPLOAD_TO, verbose_name='file') def __unicode__(self): return self.title @@ -2009,7 +2034,7 @@ class AttributeFilePathField(Attribute): class AttributeImageField(Attribute): - value = models.ImageField(upload_to='/media', verbose_name='image') + value = models.ImageField(upload_to='media/'+UPLOAD_TO, verbose_name='image') def __unicode__(self): return self.title diff --git a/gstudio/templates/gstudio/nodetype_detail.html b/gstudio/templates/gstudio/nodetype_detail.html index 7947e585..1a012799 100644 --- a/gstudio/templates/gstudio/nodetype_detail.html +++ b/gstudio/templates/gstudio/nodetype_detail.html @@ -250,6 +250,7 @@ {% endblock %} +{% if user.is_authenticated %}

{% if object.reftype == 'Objecttype' %} Add Attributes: @@ -264,7 +265,7 @@ {{ i }}; {% endfor %} {% endif %} - +{% endif %}

diff --git a/objectapp/models.py b/objectapp/models.py index d6c7d308..c0c2d5ba 100644 --- a/objectapp/models.py +++ b/objectapp/models.py @@ -208,12 +208,6 @@ class Gbobject(Node): objects = models.Manager() published = GbobjectPublishedManager() - - # @property - # def getdataType(self): - # gb = 'attribute'+str(self.get_dataType.display()) - # gb = gb.lower() - # return gb @property def getattributetypes(self): @@ -221,17 +215,30 @@ class Gbobject(Node): Returns the attributetypes of self as well as its parent's attributetype. """ try: - parenttype = [] + originalnt = [] + pt = [] attributetype = [] - returnlist = [] + returndict = {} obj = self - parenttype = obj.objecttypes.all() + originalnt = obj.objecttypes.all() + + for i in range(len(originalnt)): + obj = originalnt[i].ref + pt.append(obj) + while obj.parent: + pt.append((obj.parent).ref) + obj = obj.parent + attributetype.append(obj.subjecttype_of.all()) - for each in parenttype: + for each in pt: attributetype.append(each.subjecttype_of.all()) attributetype = [num for elem in attributetype for num in elem] - return attributetype + + for i in attributetype: + returndict.update({str(i.title):i.id}) + + return returndict.keys() except: return None @@ -240,6 +247,8 @@ class Gbobject(Node): @property def getrelationtypes(self): + originalnt= [] + originalpt = [] pt =[] #contains parenttype reltype =[] #contains relationtype titledict = {} #contains relationtype's title @@ -247,19 +256,22 @@ class Gbobject(Node): finaldict = {} #contains either title of relationtype or inverse of relationtype listval=[] #contains keys of titledict to check whether parenttype id is equals to listval's left or right subjecttypeid - #gb= Gbobject.objects.get(title=str(gbid)) - gb=self - pt = gb.objecttypes.all() + gb=self.ref + originalnt = gb.objecttypes.all() + for i in originalnt: + pt.append(i.ref) + + for i in range(len(originalnt)): + obj = originalnt[i].ref + while obj.parent: + pt.append((obj.parent).ref) + obj = obj.parent + pt.append(gb) for i in range(len(pt)): if Relationtype.objects.filter(left_subjecttype = pt[i].id): reltype.append(Relationtype.objects.filter(left_subjecttype = pt[i].id)) if Relationtype.objects.filter(right_subjecttype = pt[i].id): reltype.append(Relationtype.objects.filter(right_subjecttype = pt[i].id)) - if Relationtype.objects.filter(left_subjecttype = gb): - reltype.append(Relationtype.objects.filter(left_subjecttype = gb)) - if Relationtype.objects.filter(right_subjecttype = gb): - reltype.append(Relationtype.objects.filter(right_subjecttype = gb)) - reltype = [num for elem in reltype for num in elem] @@ -273,13 +285,14 @@ class Gbobject(Node): for j in range(len(pt)): for i in range(len(listval)): - if pt[j].id == listval[i].left_subjecttype_id or gb.id == listval[i].left_subjecttype_id : - finaldict.update({titledict.values()[i]: titledict.keys()[i]}) - elif pt[j].id == listval[i].right_subjecttype_id or gb.id == listval[i].right_subjecttype_id: - finaldict.update({titledict.values()[i]:inverselist[i]}) + if pt[j].id == listval[i].left_subjecttype_id and (str(listval[i].left_applicable_nodetypes) == 'OT' or str(listval[i].left_applicable_nodetypes) == 'OB'): + finaldict.update({titledict.keys()[i]:titledict.values()[i]}) + if pt[j].id == listval[i].right_subjecttype_id and (str(listval[i].right_applicable_nodetypes)=='OT' or str(listval[i].right_applicable_nodetypes) == 'OB'): + finaldict.update({inverselist[i]:titledict.values()[i]}) + - return finaldict.values() + return finaldict.keys() def get_relations(self): relation_set = {} diff --git a/objectapp/static/objectapp/js/savert.js b/objectapp/static/objectapp/js/savert.js index 549e8196..b5294cc5 100644 --- a/objectapp/static/objectapp/js/savert.js +++ b/objectapp/static/objectapp/js/savert.js @@ -48,7 +48,7 @@ $ = django.jQuery absolute_url = document.getElementById("id_back_url") url = "/objects/dynamicRelation/save/"+ left.value+"/"+rt.value+"/"+right.value+"/" //alert(url); - $.get(url,function(data){ + $.get(url, function(data){ window.location.replace(absolute_url.value); }); diff --git a/objectapp/templates/objectapp/fillAT.html b/objectapp/templates/objectapp/fillAT.html index 6a474d0d..95bea924 100644 --- a/objectapp/templates/objectapp/fillAT.html +++ b/objectapp/templates/objectapp/fillAT.html @@ -2,12 +2,12 @@ {% load i18n %} {% block content %} -
+ {% csrf_token %} {{ title }} {% for field in form %} -{{ field }} {{ field.errors }} +{{ field }} {{ field.errors }} {{ field.widget }} {% endfor %} diff --git a/objectapp/templates/objectapp/gbobject_detail.html b/objectapp/templates/objectapp/gbobject_detail.html index 283f9c68..5e7108e0 100644 --- a/objectapp/templates/objectapp/gbobject_detail.html +++ b/objectapp/templates/objectapp/gbobject_detail.html @@ -73,6 +73,25 @@ {% endwith %} {% endblock %} + +
+


+ +{% if user.is_authenticated %} +AddAttributes: + +{% for i in object.getattributetypes %} +{{ i }}; +{% endfor %} +

+

+Add Relations: +{% for i in object.getrelationtypes %} +{{ i }}; +{% endfor %} +

+{% endif %} + {% block gbobject-widgets %}
{% with object.next_gbobject as next_gbobject %} @@ -128,21 +147,6 @@ {% endblock %} - -


-Add Attributes: - -{% for i in object.getattributetypes %} -{{ i }}; -{% endfor %} -

-

-Add Relations: -{% for i in object.getrelationtypes %} -{{ i }}; -{% endfor %} -

- {% block gbobject-comments %}

{% trans "Comments" %}

diff --git a/objectapp/templates/objectapp/selectRT.html b/objectapp/templates/objectapp/selectRT.html index 713a45cf..5ceae85e 100644 --- a/objectapp/templates/objectapp/selectRT.html +++ b/objectapp/templates/objectapp/selectRT.html @@ -5,7 +5,8 @@ {% block content %} {% csrf_token %} -Details of {{ gb }} +{{ gb }} +{{ reltit }} diff --git a/objectapp/views/dynamicAT.py b/objectapp/views/dynamicAT.py index aec02fc2..a5d71de9 100644 --- a/objectapp/views/dynamicAT.py +++ b/objectapp/views/dynamicAT.py @@ -15,35 +15,62 @@ def MakeForm(model_cls, *args, **kwargs): class ContextForm(ModelForm): class Meta: model = model_cls.values()[0] + print 'model' ,model fields = ('value',) + print 'fields',fields + def __init__(self, *args, **kwargs): + super(ContextForm,self).__init__(*args, **kwargs) return ContextForm(*args, **kwargs) + + def dynamic_save(request, attit, memtit): rdict ={} savedict = {} memtit = NID.objects.get(title = str(memtit)) name = memtit.ref + absolute_url_node = name.get_absolute_url() + at = Attributetype.objects.get(title = str(attit)) dt = str(at.get_dataType_display()) MyModel = eval('Attribute'+dt) + rdict.update({str(at.title):MyModel}) + print "rdict",str(rdict) + if request.method == 'POST': - form = MakeForm(rdict,request.POST) - if form.is_valid(): - value = form.cleaned_data['value'] - savedict = {'title':value,'slug':value,'svalue':value,'subject':memtit, 'attributetype':at,'value':value} - att = MyModel.objects.create(**savedict) - att.save() - return HttpResponseRedirect(absolute_url_node) + form = MakeForm(rdict,request.POST,request.FILES) + try: + if form.is_valid(): + value = form.cleaned_data['value'] + + if Attribute.objects.filter(subject = memtit.id) and Attribute.objects.filter(attributetype = at.id): + att = Attribute.objects.get(subject = memtit.id, attributetype = at.id) + att.delete() + del att + savedict = {'title':str(value),'slug':str(value),'svalue':str(value),'subject':memtit, 'attributetype':at,'value':str(value)} + att = MyModel.objects.create(**savedict) + att.save() + print 'savedict',str(savedict) + return HttpResponseRedirect(absolute_url_node) + else: + savedict = {'title':str(value),'slug':str(value),'svalue':str(value),'subject':memtit, 'attributetype':at,'value':str(value)} + att = MyModel.objects.create(**savedict) + att.save() + print 'savedict',str(savedict) + return HttpResponseRedirect(absolute_url_node) + except: + raise Http404() else: form = MakeForm(rdict) + template = "objectapp/fillAT.html" context = RequestContext(request,{'form' : form,'title':str(attit), 'absolute_url_node':absolute_url_node}) return render_to_response(template,context) diff --git a/objectapp/views/dynamicRT.py b/objectapp/views/dynamicRT.py index 78370b54..f85fe53e 100644 --- a/objectapp/views/dynamicRT.py +++ b/objectapp/views/dynamicRT.py @@ -8,96 +8,181 @@ from django.forms import ModelForm from gstudio.models import * from objectapp.models import * - def context_member(request,reltit , memtit): + member = [] + subtype = [] + subtypemember = [] + finaldict = {} + nt = [] + parenttype = [] + +#------------------------------------------------------------- + if Objecttype.objects.filter(title = str(memtit)): + ot = Objecttype.objects.get(title = str(memtit)) + absolute_url_node = ot.get_absolute_url() + elif Gbobject.objects.filter(title = str(memtit)): + ot = Gbobject.objects.get(title = str(memtit)) + absolute_url_node = ot.get_absolute_url() +#-------------------------------------------------------------- + if Relationtype.objects.filter(title = str(reltit)): r =Relationtype.objects.get(title = str(reltit)) + role = r.left_subjecttype.ref + roletype = str(r.left_applicable_nodetypes) + print "Original is left role of relation" + newrole = r.right_subjecttype.ref + newroletype = str(r.right_applicable_nodetypes) + print 'original ' ,str(role) + print 'newrole (i.e right)', str(newrole) + else: r = Relationtype.objects.get(inverse = str(reltit)) + role = r.right_subjecttype.ref + roletype = str(r.right_applicable_nodetypes) + print "Original is right role of relation" + newrole = r.left_subjecttype.ref + newroletype = str(r.left_applicable_nodetypes) + print 'original ' ,str(role) + print 'newrole (i.e left)', str(newrole) - gbdict = {} - otmem=[] - childpt = [] - childmem = [] - finaldict={} - memdict = {} #otmem + childmem - - if Objecttype.objects.filter(title = str(memtit)): - flag = 1 - name = Objecttype.objects.get(title = str(memtit)) - #get members of name - for i in name.get_members: - otmem.append(i) - - #get children of name - for i in name.children.all(): - childpt.append(Objecttype.objects.get(title = NID.objects.get(title = i.title))) - #get child's members - for i in childpt: - childmem = i.get_members - for i in otmem: - memdict.update({i.id:str(i.title)}) - for i in childmem: - memdict.update({i.id:str(i.title)}) - elif Gbobject.objects.filter(title = str(memtit)): - flag = 0 - nt = [] - name = Gbobject.objects.get(title = str(memtit)) - nt = name.objecttypes.all() #nodetype - pt = [] +#--------------------------------------------------------------------- + + if newrole.reftype == 'Objecttype' and newroletype == 'OT': + print "Objecttype and OT" + for i in newrole.get_members: + member.append(i) + + for i in member: + finaldict.update({i.id:str(i.title)}) + + # for i in newrole.get_children(): + # subtype.append(i.ref) + for i in newrole.get_descendants(): + subtype.append(i.ref) + + for i in subtype: + finaldict.update({i.id:str(i.title)}) + + for i in subtype: + subtypemember.append(i.get_members) + + subtypemember = [num for elem in subtypemember for num in elem] + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + finaldict.update({newrole.id:str(newrole.title)}) + + elif newrole.reftype == 'Gbobject' and newroletype == 'OB': + print "Gbobject and OB" + nt = newrole.objecttypes.all() + for i in nt: - pt.append(Objecttype.objects.get(title = NID.objects.get(title = i.title))) - for i in pt: - otmem.append(i.get_members) + parenttype.append(i.ref) + + for i in parenttype: + member.append(i.get_members) + + member = [num for elem in member for num in elem] + subtypent = [] - otmem = [num for elem in otmem for num in elem] - gbdict.update({name.id :str(name.title)}) + # for i in parenttype: + # subtypent.append(i.get_children()) + # subtypent = [num for elem in subtypent for num in elem] -#----------------------------------------------------------------------- - - memid = name.id - if r.left_subjecttype_id == memid: - nodetype = str(r.right_applicable_nodetypes) - print"equal to left" - else: - print"equal to right" - nodetype = str(r.left_applicable_nodetypes) + # for i in subtypent: + # subtype.append(i.ref) + # subtype = [num for elem in subtype for num in elem] + + for i in parenttype: + subtypent.append(i.get_descendants()) -#------------------------------------------------------------------------ + for i in subtypent: + subtype.append(i.ref) - if nodetype=="OB" and flag==0:# gb itself - finaldict=gbdict - for i in otmem: + for i in subtype: + subtypemember.append(i.get_members) + subtypemember = [num for elem in subtypemember for num in elem] + + + for i in member: finaldict.update({i.id:str(i.title)}) - print "nodetype OB and Flag 0" - elif nodetype=="OT" and flag==1:#name,name ka child ,member of both - print "nodetype OT and Flag 1" - finaldict.update({name.id:str(name.title)})#ot itself - for i in childpt:#otchild + for i in subtypemember: finaldict.update({i.id:str(i.title)}) - for i in range(len(memdict)):#member of both - finaldict.update({memdict.keys()[i]:memdict.values()[i]}) - - elif nodetype=="OT" and flag==0: #name,name ka ot ,ot ka mem - print "nodetype OT and Flag 0" - finaldict.update({name.id:str(name.title)}) - for i in name.objecttypes.all(): - finaldict.update({i.id : str(i.title)}) - for i in otmem: + + elif newrole.reftype == 'Objecttype' and newroletype == 'OB': + print "Objecttype and OB" + for i in newrole.get_members: + member.append(i) + + for i in member: finaldict.update({i.id:str(i.title)}) - elif nodetype=="OB" and flag==1: #child of both - print "nodetype OB and Flag 1" - finaldict=memdict - - absolute_url_node = name.get_absolute_url() - print finaldict - + # for i in newrole.get_children(): + # subtype.append(i.ref) + + for i in newrole.get_descendants(): + subtype.append(i.ref) + for i in subtype: + subtypemember.append(i.get_members) + + subtypemember = [num for elem in subtypemember for num in elem] + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + print 'member',str(member) + print 'subtype', str(subtype) + print 'subtypemember', str(subtypemember) + elif newrole.reftype == 'Gbobject' and newroletype == 'OT': + print "Gbobject and OT" + nt = newrole.objecttypes.all() + for i in nt: + parenttype.append(i.ref) + + for i in parenttype: + member.append(i.get_members) + + member = [num for elem in member for num in elem] + subtypent = [] + + # for i in parenttype: + # subtypent.append(i.get_children()) + # subtypent = [num for elem in subtypent for num in elem] + + # for i in subtypent: + # subtype.append(i.ref) + # subtype = [num for elem in subtype for num in elem] + for i in parenttype: + subtypent.append(i.get_descendants()) + + for i in subtypent: + subtype.append(i.ref) + + for i in subtype: + subtypemember.append(i.get_members) + subtypemember = [num for elem in subtypemember for num in elem] + + + for i in subtype: + finaldict.update({i.id:str(i.title)}) + + for i in parenttype: + finaldict.update({i.id:str(i.title)}) + + for i in member: + finaldict.update({i.id:str(i.title)}) + + for i in subtypemember: + finaldict.update({i.id:str(i.title)}) + + + print 'absolute_url_node', str(absolute_url_node) template="objectapp/selectRT.html" - context = RequestContext(request,{'finaldict':finaldict,'gb':name,'reltit':reltit, 'absolute_url_node': absolute_url_node}) + context = RequestContext(request,{'finaldict':finaldict,'gb':memtit,'reltit':reltit, 'absolute_url_node': absolute_url_node}) return render_to_response(template,context) @@ -107,37 +192,74 @@ def context_save(request,leftmem, reltype, rightmem): reltype = str(reltype) rightmem = str(rightmem) + + + print 'leftmem :', leftmem, 'rightmem :', rightmem + pt = [] + nt = [] + left = NID.objects.get(title = leftmem) + print 'leftid', str(left.id) right = NID.objects.get(title = rightmem) - + print 'rightid', str(right.id) + if Relationtype.objects.filter(title=reltype): relation = Relationtype.objects.get(title = reltype) else: relation = Relationtype.objects.get(inverse = reltype) rightrole = relation.right_subjecttype_id + r = relation.right_subjecttype.ref + print 'rightrole', str(r) leftrole = relation.left_subjecttype_id + l=relation.left_subjecttype.ref + print 'leftrole', str(l) #----------------------------------------------------------------------- flag = 1 if Objecttype.objects.filter(title = leftmem): - if left.id == leftrole : - flag = 0 - print "Objecttype flag = 0 " - else: - print "Objecttype flag = 1 " + + obj = Objecttype.objects.get(title = leftmem) + print 'OT', str(obj) + + while obj.parent: + pt.append((obj.parent).ref) + obj=obj.parent + for i in range(len(pt)): + if pt[i].id == leftrole : + flag = 0 + print "Objecttype flag = 0 " + break + else: + print "Objecttype flag = 1 " + elif Gbobject.objects.filter(title = leftmem): gb = Gbobject.objects.get(title = leftmem) - pt = gb.objecttypes.all() + print 'Ob', str(gb) + nt = gb.objecttypes.all() + print 'nt ', str(nt) + + + for i in range(len(nt)): + pt.append(nt[i].ref) + obj = nt[i].ref + while obj.parent: + pt.append(obj.parent.ref) + obj = obj.parent + + print 'pt ', str(pt) for i in range(len(pt)): if left.id == leftrole or pt[i].id == leftrole: flag = 0 print "Object flag = 0" + break else: print "Object flag = 1" - + print 'pt:',str(pt) #----------------------------------------------------------------------------------- + if flag == 0: + print 'left_subject_id', l savedict = {'title':relation, 'slug':relation, 'left_subject_id':left.id, 'right_subject_id':right.id, 'relationtype_id':relation.id, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' ' } else: savedict = {'title':relation, 'slug':relation, 'left_subject_id':right.id, 'right_subject_id':left.id, 'relationtype_id':relation.id, 'left_subject_scope':' ', 'right_subject_scope':' ', 'relationtype_scope':' '} @@ -152,6 +274,6 @@ def context_save(request,leftmem, reltype, rightmem): #return savedict except IntegrityError: #Exception raised when the relational integrity of the database is affected, e.g. a foreign key check fails, duplicate key, etc. - raise Http404() + return HttpResponseRedirect("/nodetypes/") #pass -- cgit v1.2.3-70-g09d2 From 81f1310e441c5dfd71e332aaa09e0964052ab9e3 Mon Sep 17 00:00:00 2001 From: Neha shah Date: Tue, 29 May 2012 16:23:34 +0530 Subject: nbh added for relatiotype --- gstudio/models.py | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'gstudio/models.py') diff --git a/gstudio/models.py b/gstudio/models.py index 105dc7bf..f6c5efeb 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -1140,8 +1140,12 @@ class Nodetype(Node): nbh['count_title'] = len(nbh['title']) nbh['altnames'] = self.altnames nbh['count_altnames'] = len(nbh['altnames']) - nbh['plural'] = self.plural - nbh['count_plural'] = len(nbh['plural']) + nbh['plural'] = self.plural + try: + nbh['count_plural'] = len(nbh['plural']) + except: + pass + #get all MTs member_of_dict = {} for each in self.metatypes.all(): @@ -1393,11 +1397,7 @@ class Objecttype(Nodetype): def __unicode__(self): return self.title - - - - - + @property def get_attributetypes(self): @@ -1607,6 +1607,37 @@ class Relationtype(Nodetype): def __unicode__(self): return self.title + @property + def get_nbh(self): + """ + Returns the neighbourhood of the nodetype + """ + nbh = {} + nbh['title'] = self.title + nbh['altnames'] = self.altnames + nbh['plural'] = self.plural + + nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id) + # get all the objects inheriting this OT + nbh['contains_members'] = self.member_objects.all() + nbh['prior_nodes'] = self.prior_nodes.all() + nbh['posterior_nodes'] = self.posterior_nodes.all() + nbh['inverse']=self.inverse + nbh['left_subjecttype']=self.left_subjecttype + nbh['left_applicable_nodetypes']=self.left_applicable_nodetypes + nbh['left_cardinality']=self.left_cardinality + nbh['right_subjecttype']=self.right_subjecttype + nbh['right_applicable_nodetypes']=self.right_applicable_nodetypes + nbh['right_cardinality']=self.right_cardinality + nbh['is_symmetrical']=self.is_symmetrical + nbh['is_reflexive']=self.is_reflexive + nbh['is_transitive']=self.is_transitive + + + + return nbh + + class Meta: """ relation type's meta class -- cgit v1.2.3-70-g09d2 From adb0662690f845be8524d68cf2aa9f57c10fac13 Mon Sep 17 00:00:00 2001 From: Arun yadav Date: Wed, 30 May 2012 19:01:12 +0530 Subject: Full version control for OTs,Objects,ATs,RTs done.Merge and revert also done.Extra history field added in nbhood --- gstudio/admin/objecttype.py | 1 - gstudio/models.py | 790 ++++++++++++++++++----- gstudio/settings.py | 2 +- gstudio/templates/gstudio/display.html | 261 +++++--- gstudio/templates/gstudio/skeleton.html | 2 +- gstudio/templates/gstudio/version_diff.html | 333 +++++++--- gstudio/urls/history.py | 6 +- gstudio/views/history.py | 519 +++++++++++++-- objectapp/models.py | 86 ++- objectapp/settings.py | 2 +- objectapp/templates/objectapp/base.html | 14 + objectapp/templates/objectapp/display.html | 609 +++++++++++++++++ objectapp/templates/objectapp/gbobject_list.html | 2 +- objectapp/templates/objectapp/version_base.html | 129 ++++ objectapp/templates/objectapp/version_diff.html | 262 ++++++++ objectapp/urls/__init__.py | 1 + objectapp/urls/history.py | 10 + objectapp/views/history.py | 436 +++++++++++++ 18 files changed, 3047 insertions(+), 418 deletions(-) create mode 100644 objectapp/templates/objectapp/display.html create mode 100644 objectapp/templates/objectapp/version_base.html create mode 100644 objectapp/templates/objectapp/version_diff.html create mode 100644 objectapp/urls/history.py create mode 100644 objectapp/views/history.py (limited to 'gstudio/models.py') diff --git a/gstudio/admin/objecttype.py b/gstudio/admin/objecttype.py index 5072fe9a..45e07c0d 100644 --- a/gstudio/admin/objecttype.py +++ b/gstudio/admin/objecttype.py @@ -177,7 +177,6 @@ class ObjecttypeAdmin(parent_class): if not form.cleaned_data.get('authors'): form.cleaned_data['authors'].append(request.user) - nodetype.save() # nodetype.nbhood = nodetype.get_nbh # nodetype.last_update = datetime.now() diff --git a/gstudio/models.py b/gstudio/models.py index 2c9d51fa..a93b151b 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -303,8 +303,7 @@ class NID(models.Model): # # Returned value is a list, so splice it. # vrs = vrs[0] # except: - # return None - + # return None # return vrs.object @@ -391,59 +390,59 @@ class NID(models.Model): version = Version.objects.get(id=self.id) return version.serialized_data + - - def get_Version_graph_json(self,ssid): + # def get_Version_graph_json(self,ssid): - # # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"} - # slist=self.get_ssid - ver_dict=self.version_info(ssid) - # ver_dict=str(ver['nbhood']) - # ver_dict=ast.literal_eval(ver_dict) + # # # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"} + # # slist=self.get_ssid + # ver_dict=self.version_info(ssid) + # #ver_dict=str(ver['nbhood']) + # ver_dict=ast.literal_eval(ver_dict['nbhood']) - g_json = {} - g_json["node_metadata"]= [] - predicate_id = {} - counter = 1 - for key in ver_dict.keys(): - val = "a" + str(counter) - predicate_id[key] = val - counter = counter + 1 - #print predicate_id - - attr_counter = -1 - - this_node = {"_id":str(ver_dict['id']),"title":ver_dict['title'],"screen_name":ver_dict['title'], "url":self.get_absolute_url()} - g_json["node_metadata"].append(this_node) - - for key in predicate_id.keys(): - if ver_dict[key]: - try: - g_json[str(key)]=[] - g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) - g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 }) - if not isinstance(ver_dict[key],basestring): - for item in ver_dict[key]: - # user - g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title, "title":item.title, "url":item.get_absolute_url()}) - g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + # g_json = {} + # g_json["node_metadata"]= [] + # predicate_id = {} + # counter = 1 + # for key in ver_dict.keys(): + # val = "a" + str(counter) + # predicate_id[key] = val + # counter = counter + 1 + # #print predicate_id + + # attr_counter = -1 + + # this_node = {"_id":str(self.id),"title":ver_dict['title'],"screen_name":ver_dict['title'], "url":self.get_absolute_url()} + # g_json["node_metadata"].append(this_node) + + # for key in predicate_id.keys(): + # if ver_dict[key]: + # try: + # g_json[str(key)]=[] + # g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) + # g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 }) + # if not isinstance(ver_dict[key],basestring): + # for item in ver_dict[key]: + # # user + # g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title, "title":item.title, "url":item.get_absolute_url()}) + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) - else: - #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} - #this_node[str(key)]=nbh[key] key, nbh[key] - #for item in value.keys(): - g_json["node_metadata"].append({"_id":attr_counter,"screen_name":ver_dict[key]}) - g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) - attr_counter-=1 + # else: + # #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} + # #this_node[str(key)]=nbh[key] key, nbh[key] + # #for item in value.keys(): + # g_json["node_metadata"].append({"_id":attr_counter,"screen_name":ver_dict[key]}) + # g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) + # attr_counter-=1 - except: - pass - # print g_json + # except: + # pass + # # print g_json - return json.dumps(g_json) + # return json.dumps(g_json) def __unicode__(self): @@ -452,7 +451,7 @@ class NID(models.Model): class Meta: """NID's Meta""" - + class Node(NID): """ @@ -472,7 +471,8 @@ class Node(NID): sites = models.ManyToManyField(Site, verbose_name=_('sites publication'), related_name='nodetypes') - nbhood = models.TextField(help_text="The neighbourhood of the model.") + nbhood = models.TextField(help_text="The rendered neighbourhood of the model.") + # nbh = models.TextField(help_text="The neighbourhood of the model.") published = NodePublishedManager() def __unicode__(self): @@ -480,18 +480,9 @@ class Node(NID): class Meta: abstract=False - + + - def save(self, *args, **kwargs): - - # self.nbhood=self.get_nbh - if GSTUDIO_VERSIONING: - with reversion.create_revision(): - super(Node, self).save(*args, **kwargs) # Call the "real" save() method. - - super(Node, self).save(*args, **kwargs) # Call the "real" save() method. - - class Edge(NID): @@ -638,13 +629,28 @@ class Metatype(Node): """ Returns the neighbourhood of the metatype """ + history=[] + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) nbh = {} + history_list=self.get_ssid nbh['title'] = self.title nbh['altnames'] = self.altnames nbh['plural'] = self.plural if self.parent: - nbh['typeof'] = self.parent + obj=NID.objects.get(id=self.parent) + typeof[parent] = obj.ref.get_absolute_url() + #nbh['typeof'] = self.parent # generate ids and names of children nbh['contains_subtypes'] = self.children.get_query_set() contains_members_list = [] @@ -654,7 +660,7 @@ class Metatype(Node): nbh['left_subjecttype_of'] = Relationtype.objects.filter(left_subjecttype=self.id) nbh['right_subjecttype_of'] = Relationtype.objects.filter(right_subjecttype=self.id) nbh['attributetypes'] = Attributetype.objects.filter(subjecttype=self.id) - + nbh['history']=history return nbh @@ -693,7 +699,7 @@ class Metatype(Node): def save(self, *args, **kwargs): super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. - self.nbhood=self.get_nbh + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): @@ -856,8 +862,8 @@ class Nodetype(Node): rels['possible_rightroles'] = right_subset return rels - - + + def get_graph_json(self): @@ -865,7 +871,7 @@ class Nodetype(Node): g_json = {} g_json["node_metadata"]= [] g_json["relations"]=[] - g_json["relset"]=[] + global counter global attr_counter @@ -902,7 +908,7 @@ class Nodetype(Node): # create nodes g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"expanded":"false"}) - g_json["relset"].append(item.id) + # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) @@ -935,7 +941,8 @@ class Nodetype(Node): pass #print g_json - return json.dumps(g_json) + return json.dumps(g_json) + @property def get_possible_attributes(self): """ @@ -1014,7 +1021,7 @@ class Nodetype(Node): return relations @property - def get_relations1(self): + def get_rendered_relations(self): """ Returns all the relations of the nodetype """ @@ -1038,7 +1045,7 @@ class Nodetype(Node): if each.relationtype.title==key: fl=1 predicate_values.append(predicate) - reltype[key]=predicate_values + reltype[key]=predicate_values if fl==0: predicate_values=predicate reltype[relation]=predicate_values @@ -1078,6 +1085,7 @@ class Nodetype(Node): relations['rrelations']=reltype return relations + @property def get_attributes(self): attributes_dict = {} @@ -1103,12 +1111,26 @@ class Nodetype(Node): val.extend(value) attributes_dict[atr_key]=val return attributes_dict - + + # def history(self,ssid): + #ver @property def get_rendered_nbh(self): """ Returns the neighbourhood of the nodetype """ + history=[] + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) nbh = {} nbh['title'] = self.title nbh['count_title'] = len(nbh['title']) @@ -1167,8 +1189,8 @@ class Nodetype(Node): relns={} rellft={} relrgt={} - if self.get_relations1: - NTrelns=self.get_relations1 + if self.get_rendered_relations: + NTrelns=self.get_rendered_relations for key,value in NTrelns.items(): if key=="rrelations": relrgt={} @@ -1176,7 +1198,7 @@ class Nodetype(Node): relnvalue={} if isinstance(rgtvalue,list): for items in rgtvalue: - relnvalue[items]=items.get_absolute_url() + relnvalue[items.title]=items.get_absolute_url() else: relnvalue[rgtvalue]=rgtvalue.get_absolute_url() @@ -1189,7 +1211,7 @@ class Nodetype(Node): relnvalue={} if isinstance(lftvalue,list): for items in lftvalue: - relnvalue[items]=items.get_absolute_url() + relnvalue[items.title]=items.get_absolute_url() else: relnvalue[lftvalue]=lftvalue.get_absolute_url() @@ -1219,7 +1241,7 @@ class Nodetype(Node): rightroles[each.title]=each.get_absolute_url() nbh['rightroles']=rightroles nbh['count_rightroles'] = len(nbh['rightroles']) - + nbh['history']=history return nbh @@ -1350,16 +1372,7 @@ class Nodetype(Node): verbose_name_plural = _('node types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) - - # Save for nodetype - def save(self, *args, **kwargs): - if GSTUDIO_VERSIONING: - with reversion.create_revision(): - super(Nodetype, self).save(*args, **kwargs) # Call the "real" save() method. - super(Nodetype, self).save(*args, **kwargs) # Call the "real" save() method. - - - + class Objecttype(Nodetype): ''' Object class @@ -1473,61 +1486,190 @@ class Objecttype(Nodetype): #nbh['authors'] = self.authors.all() return nbh - @property def get_rendered_nbh(self): + """ + Returns the neighbourhood of the nodetype """ - Returns the neighbourhood of the nodetype with the hyperlinks of nodes rendered - """ + history=[] + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) nbh = {} nbh['title'] = self.title + nbh['count_title'] = len(nbh['title']) nbh['altnames'] = self.altnames - nbh['plural'] = self.plural - member_of_metatypes_list = [] + nbh['count_altnames'] = len(nbh['altnames']) + nbh['plural'] = self.plural + #nbh['count_plural'] = len(nbh['plural']) + #get all MTs + member_of_dict = {} for each in self.metatypes.all(): - member_of_metatypes_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['member_of_metatypes'] = member_of_metatypes_list - - - attributetypes_list = [] - for each in self.get_attributetypes: - attributetypes_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['attributetypes'] = attributetypes_list - - - # get all the RTs for the objecttype - reltypes_list = [] - for each in self.get_relationtypes: - reltypes_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['relationtypes'] = reltypes_list - - nbh['type_of'] = self.parent - - nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id) - # get all the objects inheriting this OT - contains_members_list = [] - for each in self.gbobjects.all(): - contains_members_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['contains_members'] = contains_members_list - - prior_nodes_list = [] + member_of_dict[each.title]= each.get_absolute_url() + nbh['member_of_metatypes']=member_of_dict + nbh['count_member_of_metatypes'] = len(nbh['member_of_metatypes']) + typeof={} + parent=self.parent_id + if parent: + obj=NID.objects.get(id=parent) + typeof[parent] = obj.ref.get_absolute_url() + nbh['type_of']=typeof + nbh['count_type_of'] = len(nbh['type_of']) + #get all subtypes + subtypes={} + for each in Nodetype.objects.filter(parent=self.id): + subtypes[each.title] =each.get_absolute_url() + nbh['contains_subtypes']=subtypes + nbh['count_contains_subtypes'] = len(nbh['contains_subtypes']) + # get all the objects inheriting this OT + contains_members_dict = {} + for each in self.member_objects.all(): + contains_members_dict[each.title]= each.get_absolute_url() + nbh['contains_members'] = contains_members_dict + nbh['count_contains_members'] = len(nbh['contains_members']) + #get prior nodes + priornodes_dict = {} for each in self.prior_nodes.all(): - prior_nodes_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['prior_nodes'] = prior_nodes_list - - posterior_nodes_list = [] + priornodes_dict[each.title]= each.get_absolute_url() + nbh['priornodes'] = priornodes_dict + nbh['count_priornodes'] = len(nbh['priornodes']) + #get posterior nodes + posteriornodes_dict = {} for each in self.posterior_nodes.all(): - posterior_nodes_list.append('%s' % (each.get_absolute_url(), each.title)) - nbh['posterior_nodes'] = posterior_nodes_list - - author_list = [] + posteriornodes_dict[each.title]= each.get_absolute_url() + nbh['posteriornodes'] = posteriornodes_dict + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + #get authors + author_dict = {} for each in self.authors.all(): - author_list.append('' % (each.get_absolute_url())) - nbh['authors'] = author_list + author_dict['User'] = each.get_absolute_url() + nbh['authors'] = author_dict + #get siblings + siblings={} + for each in self.get_siblings(): + siblings[each.title]=each.get_absolute_url() + nbh['siblings']=siblings + nbh['count_siblings'] = len(nbh['siblings']) + #get Relations + relns={} + rellft={} + relrgt={} + if self.get_rendered_relations: + NTrelns=self.get_rendered_relations + for key,value in NTrelns.items(): + if key=="rrelations": + relrgt={} + for rgtkey,rgtvalue in value.items(): + relnvalue={} + if isinstance(rgtvalue,list): + for items in rgtvalue: + relnvalue[items.title]=items.get_absolute_url() + else: + relnvalue[rgtvalue]=rgtvalue.get_absolute_url() + + relrgt[rgtkey]=relnvalue + + else: + rellft={} + relns['left']=rellft + for lftkey,lftvalue in value.items(): + relnvalue={} + if isinstance(lftvalue,list): + for items in lftvalue: + relnvalue[items.title]=items.get_absolute_url() + else: + relnvalue[lftvalue]=lftvalue.get_absolute_url() + + rellft[lftkey]=relnvalue + + nbh['relations']=relrgt + + nbh['relations'].update(rellft) + nbh['count_relations'] = len(nbh['relations']) + #get Attributes + attributes =self.get_attributes + nbh['attributes']=attributes + nbh['count_attributes'] = len(nbh['attributes']) + #get ATs + attributetypes={} + for each in self.subjecttype_of.all(): + attributetypes[each.title]=each.get_absolute_url() + nbh['ats']=attributetypes + #get RTs as leftroles and rightroles + leftroles = {} + for each in self.left_subjecttype_of.all(): + leftroles[each.title]=each.get_absolute_url() + nbh['leftroles']=leftroles + nbh['count_leftroles'] = len(nbh['leftroles']) + rightroles = {} + for each in self.right_subjecttype_of.all(): + rightroles[each.title]=each.get_absolute_url() + nbh['rightroles']=rightroles + nbh['count_rightroles'] = len(nbh['rightroles']) + nbh['history']=history return nbh + + def get_Version_graph_json(self,ssid): + + + # # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"} + # slist=self.get_ssid + ver_dict=self.version_info(ssid) + ver_dict1=self.version_info(ssid) + #ver_dict=str(ver['nbhood']) + ver_dict=ast.literal_eval(ver_dict['nbhood']) + g_json = {} + g_json["node_metadata"]= [] + predicate_id = {} + counter = 1 + for key in ver_dict.keys(): + val = "a" + str(counter) + predicate_id[key] = val + counter = counter + 1 + #print predicate_id + attr_counter = -1 + this_node = {"_id":str(self.id),"title":ver_dict['title'],"screen_name":ver_dict['title'], "url":self.get_absolute_url()} + g_json["node_metadata"].append(this_node) + for key in predicate_id.keys(): + if ver_dict[key]: + try: + g_json[str(key)]=[] + g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) + g_json[str(key)].append({"from":self.id , "to":predicate_id[key],"value":1, "level":1 }) + if not isinstance(ver_dict[key],basestring): + for item in ver_dict[key]: + # user + g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title, "title":item.title, "url":item.get_absolute_url()}) + g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 }) + + else: + #value={nbh["plural"]:"a4",nbh["altnames"]:"a5"} + #this_node[str(key)]=nbh[key] key, nbh[key] + #for item in value.keys(): + g_json["node_metadata"].append({"_id":attr_counter,"screen_name":ver_dict[key]}) + g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 }) + attr_counter-=1 + + except: + pass + # print g_json + + + + return json.dumps(g_json) + + class Meta: """ object type's meta class @@ -1539,15 +1681,22 @@ class Objecttype(Nodetype): # Save for Objecttype # @reversion.create_revision() - def save(self, *args, **kwargs): + def save(self,*args, **kwargs): self.nodemodel = self.__class__.__name__ super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. - self.nbhood=self.get_nbh + self.nbhood=self.get_rendered_nbh + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + self.nodemodel = self.__class__.__name__ + if self.parent: + ot=NID.objects.get(id=self.parent.id) + ot.ref.save() + super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. + + def save_revert_or_merge(self,*args, **kwargs): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. - - @@ -1581,6 +1730,139 @@ class Relationtype(Nodetype): def __unicode__(self): return self.title + @property + def get_rendered_nbh(self): + """ + Returns the neighbourhood of the Relationtype + """ + history=[] + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) + nbh = {} + nbh['title'] = self.title + nbh['count_title'] = len(nbh['title']) + nbh['altnames'] = self.altnames + nbh['count_altnames'] = len(nbh['altnames']) + nbh['plural'] = self.plural +# nbh['count_plural'] = len(nbh['plural']) + #get all MTs + member_of_dict = {} + for each in self.metatypes.all(): + member_of_dict[each.title]= each.get_absolute_url() + nbh['member_of_metatypes']=member_of_dict + nbh['count_member_of_metatypes'] = len(nbh['member_of_metatypes']) + typeof={} + parent=self.parent_id + if parent: + obj=NID.objects.get(id=parent) + typeof[parent] = obj.ref.get_absolute_url() + nbh['type_of']=typeof + nbh['count_type_of'] = len(nbh['type_of']) + #get all subtypes + subtypes={} + for each in Nodetype.objects.filter(parent=self.id): + subtypes[each.title] =each.get_absolute_url() + nbh['contains_subtypes']=subtypes + nbh['count_contains_subtypes'] = len(nbh['contains_subtypes']) + # get all the objects inheriting this OT + contains_members_dict = {} + for each in self.member_objects.all(): + contains_members_dict[each.title]= each.get_absolute_url() + nbh['contains_members'] = contains_members_dict + nbh['count_contains_members'] = len(nbh['contains_members']) + #get prior nodes + priornodes_dict = {} + for each in self.prior_nodes.all(): + priornodes_dict[each.title]= each.get_absolute_url() + nbh['priornodes'] = priornodes_dict + nbh['count_priornodes'] = len(nbh['priornodes']) + #get posterior nodes + posteriornodes_dict = {} + for each in self.posterior_nodes.all(): + posteriornodes_dict[each.title]= each.get_absolute_url() + nbh['posteriornodes'] = posteriornodes_dict + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + #get authors + author_dict = {} + for each in self.authors.all(): + author_dict['User'] = each.get_absolute_url() + nbh['authors'] = author_dict + #get siblings + siblings={} + for each in self.get_siblings(): + siblings[each.title]=each.get_absolute_url() + nbh['siblings']=siblings + nbh['count_siblings'] = len(nbh['siblings']) + #get Relations + relns={} + rellft={} + relrgt={} + if self.get_rendered_relations: + NTrelns=self.get_rendered_relations + for key,value in NTrelns.items(): + if key=="rrelations": + relrgt={} + for rgtkey,rgtvalue in value.items(): + relnvalue={} + if isinstance(rgtvalue,list): + for items in rgtvalue: + relnvalue[items]=items.get_absolute_url() + else: + relnvalue[rgtvalue]=rgtvalue.get_absolute_url() + + relrgt[rgtkey]=relnvalue + + else: + rellft={} + relns['left']=rellft + for lftkey,lftvalue in value.items(): + relnvalue={} + if isinstance(lftvalue,list): + for items in lftvalue: + relnvalue[items]=items.get_absolute_url() + else: + relnvalue[lftvalue]=lftvalue.get_absolute_url() + + rellft[lftkey]=relnvalue + + nbh['relations']=relrgt + + nbh['relations'].update(rellft) + nbh['count_relations'] = len(nbh['relations']) + #get Attributes + attributes =self.get_attributes + nbh['attributes']=attributes + nbh['count_attributes'] = len(nbh['attributes']) + #get ATs + attributetypes={} + for each in self.subjecttype_of.all(): + attributetypes[each.title]=each.get_absolute_url() + nbh['ats']=attributetypes + #get RTs as leftroles and rightroles + leftroles = {} + for each in self.left_subjecttype_of.all(): + leftroles[each.title]=each.get_absolute_url() + nbh['leftroles']=leftroles + nbh['count_leftroles'] = len(nbh['leftroles']) + rightroles = {} + for each in self.right_subjecttype_of.all(): + rightroles[each.title]=each.get_absolute_url() + nbh['rightroles']=rightroles + nbh['count_rightroles'] = len(nbh['rightroles']) + nbh['history']=history + return nbh + + + class Meta: """ relation type's meta class @@ -1594,12 +1876,12 @@ class Relationtype(Nodetype): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(Relationtype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): self.nodemodel = self.__class__.__name__ - - - super(Relationtype, self).save(*args, **kwargs) # Call the "real" save() method. + super(Relationtype, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1633,6 +1915,140 @@ class Attributetype(Nodetype): editable=models.NullBooleanField(verbose_name='required', null=True, blank=True, help_text='If False, the field will not be editable') + + @property + def get_rendered_nbh(self): + """ + Returns the neighbourhood of the Attributetype + """ + history=[] + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) + nbh = {} + nbh['title'] = self.title + nbh['count_title'] = len(nbh['title']) + nbh['altnames'] = self.altnames + nbh['count_altnames'] = len(nbh['altnames']) + # nbh['plural'] = self.plural + # nbh['count_plural'] = len(nbh['plural']) + #get all MTs + member_of_dict = {} + for each in self.metatypes.all(): + member_of_dict[each.title]= each.get_absolute_url() + nbh['member_of_metatypes']=member_of_dict + nbh['count_member_of_metatypes'] = len(nbh['member_of_metatypes']) + typeof={} + parent=self.parent_id + if parent: + obj=NID.objects.get(id=parent) + typeof[parent] = obj.ref.get_absolute_url() + nbh['type_of']=typeof + nbh['count_type_of'] = len(nbh['type_of']) + #get all subtypes + subtypes={} + for each in Nodetype.objects.filter(parent=self.id): + subtypes[each.title] =each.get_absolute_url() + nbh['contains_subtypes']=subtypes + nbh['count_contains_subtypes'] = len(nbh['contains_subtypes']) + # get all the objects inheriting this OT + contains_members_dict = {} + for each in self.member_objects.all(): + contains_members_dict[each.title]= each.get_absolute_url() + nbh['contains_members'] = contains_members_dict + nbh['count_contains_members'] = len(nbh['contains_members']) + #get prior nodes + priornodes_dict = {} + for each in self.prior_nodes.all(): + priornodes_dict[each.title]= each.get_absolute_url() + nbh['priornodes'] = priornodes_dict + nbh['count_priornodes'] = len(nbh['priornodes']) + #get posterior nodes + posteriornodes_dict = {} + for each in self.posterior_nodes.all(): + posteriornodes_dict[each.title]= each.get_absolute_url() + nbh['posteriornodes'] = posteriornodes_dict + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + #get authors + author_dict = {} + for each in self.authors.all(): + author_dict['User'] = each.get_absolute_url() + nbh['authors'] = author_dict + #get siblings + siblings={} + for each in self.get_siblings(): + siblings[each.title]=each.get_absolute_url() + nbh['siblings']=siblings + nbh['count_siblings'] = len(nbh['siblings']) + #get Relations + relns={} + rellft={} + relrgt={} + if self.get_rendered_relations: + NTrelns=self.get_rendered_relations + for key,value in NTrelns.items(): + if key=="rrelations": + relrgt={} + for rgtkey,rgtvalue in value.items(): + relnvalue={} + if isinstance(rgtvalue,list): + for items in rgtvalue: + relnvalue[items]=items.get_absolute_url() + else: + relnvalue[rgtvalue]=rgtvalue.get_absolute_url() + + relrgt[rgtkey]=relnvalue + + else: + rellft={} + relns['left']=rellft + for lftkey,lftvalue in value.items(): + relnvalue={} + if isinstance(lftvalue,list): + for items in lftvalue: + relnvalue[items]=items.get_absolute_url() + else: + relnvalue[lftvalue]=lftvalue.get_absolute_url() + + rellft[lftkey]=relnvalue + + nbh['relations']=relrgt + + nbh['relations'].update(rellft) + nbh['count_relations'] = len(nbh['relations']) + #get Attributes + attributes =self.get_attributes + nbh['attributes']=attributes + nbh['count_attributes'] = len(nbh['attributes']) + #get ATs + attributetypes={} + for each in self.subjecttype_of.all(): + attributetypes[each.title]=each.get_absolute_url() + nbh['ats']=attributetypes + #get RTs as leftroles and rightroles + leftroles = {} + for each in self.left_subjecttype_of.all(): + leftroles[each.title]=each.get_absolute_url() + nbh['leftroles']=leftroles + nbh['count_leftroles'] = len(nbh['leftroles']) + rightroles = {} + for each in self.right_subjecttype_of.all(): + rightroles[each.title]=each.get_absolute_url() + nbh['rightroles']=rightroles + nbh['count_rightroles'] = len(nbh['rightroles']) + nbh['history']=history + + return nbh + + def __unicode__(self): return self.title @@ -1656,13 +2072,17 @@ class Attributetype(Nodetype): def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ - -# self.nbhood=self.get_nbh + super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. - - super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. + def save_revert_or_merge(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. + class Relation(Edge): @@ -1758,14 +2178,22 @@ class Relation(Edge): # Save for Relation def save(self, *args, **kwargs): + + """ + left_subject and right_subject should be saved after creating the relation + """ self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Relation, self).save(*args, **kwargs) # Call the "real" save() method. + left_subject = self.left_subject + right_subject = self.right_subject + left_subject.ref.save() + right_subject.ref.save() super(Relation, self).save(*args, **kwargs) # Call the "real" save() method. - class Attribute(Edge): ''' Attribute value store for default datatype varchar. Subject can be any of the @@ -1848,7 +2276,8 @@ class Attribute(Edge): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1865,11 +2294,14 @@ class AttributeCharField(Attribute): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeCharField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeCharField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributeTextField(Attribute): @@ -1885,6 +2317,8 @@ class AttributeTextField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1900,7 +2334,8 @@ class AttributeIntegerField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1918,6 +2353,8 @@ class AttributeCommaSeparatedIntegerField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeBigIntegerField(Attribute): @@ -1926,6 +2363,17 @@ class AttributeBigIntegerField(Attribute): def __unicode__(self): return self.title + + # @reversion.create_revision() + def save(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeBigIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() + super(AttributeBigIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + class AttributePositiveIntegerField(Attribute): @@ -1940,6 +2388,8 @@ class AttributePositiveIntegerField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributePositiveIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() super(AttributePositiveIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1954,8 +2404,8 @@ class AttributeDecimalField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. - - + subject=self.subject + subject.ref.save() super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeFloatField(Attribute): @@ -1971,7 +2421,8 @@ class AttributeFloatField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeFloatField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeFloatField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -1986,7 +2437,8 @@ class AttributeBooleanField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2003,6 +2455,8 @@ class AttributeNullBooleanField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeNullBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() super(AttributeNullBooleanField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2018,7 +2472,8 @@ class AttributeDateField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeDateField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeDateField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2035,7 +2490,8 @@ class AttributeDateTimeField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2052,7 +2508,8 @@ class AttributeTimeField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeTimeField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeTimeField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2068,7 +2525,8 @@ class AttributeEmailField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeEmailField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeEmailField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2085,7 +2543,8 @@ class AttributeFileField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeFileField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeFileField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2102,7 +2561,8 @@ class AttributeFilePathField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeFilePathField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeFilePathField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2116,6 +2576,11 @@ class AttributeImageField(Attribute): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + if GSTUDIO_VERSIONING: + with reversion.create_revision(): + super(AttributeImageField, self).save(*args, **kwargs) # Call the "real" save() method. + subject=self.subject + subject.ref.save() super(AttributeImageField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2132,7 +2597,8 @@ class AttributeURLField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeURLField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeURLField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2149,7 +2615,8 @@ class AttributeIPAddressField(Attribute): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(AttributeIPAddressField, self).save(*args, **kwargs) # Call the "real" save() method. - + subject=self.subject + subject.ref.save() super(AttributeIPAddressField, self).save(*args, **kwargs) # Call the "real" save() method. @@ -2179,11 +2646,13 @@ class Processtype(Nodetype): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. - super(Processtype, self).save(*args, **kwargs) # Call the "real" save() method. + @@ -2220,13 +2689,12 @@ class Systemtype(Nodetype): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. - super(Systemtype, self).save(*args, **kwargs) # Call the "real" save() method. - - class AttributeSpecification(Node): """ @@ -2454,7 +2922,7 @@ if GSTUDIO_VERSIONING == True: reversion.register(NID) if not reversion.is_registered(Systemtype): - reversion.register(Systemtype) + reversion.register(Systemtype,follow=["nodetype_ptr"] ) if not reversion.is_registered(Objecttype): reversion.register(Objecttype , follow=["nodetype_ptr"]) @@ -2467,7 +2935,7 @@ if GSTUDIO_VERSIONING == True: if not reversion.is_registered(Processtype): - reversion.register(Processtype, follow=["changing_attributetype_set", "changing_relationtype_set"]) + reversion.register(Processtype, follow=["nodetype_ptr","changing_attributetype_set", "changing_relationtype_set"]) if not reversion.is_registered(Nodetype): reversion.register(Nodetype, follow=["node_ptr","parent", "metatypes","prior_nodes", "posterior_nodes"]) @@ -2477,10 +2945,10 @@ if GSTUDIO_VERSIONING == True: if not reversion.is_registered(Relationtype): - reversion.register(Relationtype, follow=["left_subjecttype", "right_subjecttype"]) + reversion.register(Relationtype, follow=["nodetype_ptr","left_subjecttype", "right_subjecttype"]) if not reversion.is_registered(Attributetype): - reversion.register(Attributetype, follow=["subjecttype"]) + reversion.register(Attributetype, follow=["nodetype_ptr","subjecttype"]) if not reversion.is_registered(Attribute): reversion.register(Attribute, follow=["subject", "attributetype"]) diff --git a/gstudio/settings.py b/gstudio/settings.py index 75606676..a0c40c9a 100644 --- a/gstudio/settings.py +++ b/gstudio/settings.py @@ -153,4 +153,4 @@ USE_TWITTER = getattr(settings, 'GSTUDIO_USE_TWITTER', bool(TWITTER_ACCESS_KEY and TWITTER_ACCESS_SECRET and \ TWITTER_CONSUMER_KEY and TWITTER_CONSUMER_SECRET)) -GSTUDIO_VERSIONING = False +GSTUDIO_VERSIONING = True diff --git a/gstudio/templates/gstudio/display.html b/gstudio/templates/gstudio/display.html index 184b58de..9d48285d 100644 --- a/gstudio/templates/gstudio/display.html +++ b/gstudio/templates/gstudio/display.html @@ -1,4 +1,3 @@ - {% load i18n comments gstudio_tags %} {% load gstudio_tags i18n %} {% get_tags as nodetype_tags %} @@ -6,7 +5,6 @@ - @@ -165,7 +163,7 @@ .attr("width", w) .attr("height", h); - vis.append("svg:g").attr("class", "edges"); + vis.append("svg:g").attr("class", "edges"); vis.append("svg:g").attr("class", "nodes"); $(function() { @@ -176,7 +174,7 @@ $(function() { success : function(json) { //var node = NID.objects.get(slug='{{ slug }}'); - var force; + var force; // this contains all the nodes as a dict with _id as the key @@ -336,18 +334,18 @@ $(function() { nodes_by_id[{{ nt.id }}].y = h/2.0; all_edges = new Array(); - all_edges = all_edges.concat(follows_edges, member_of, contains_members, contains_subtypes, mentions_edges, right_subjecttype_of, left_subjecttype_of, subjecttype_of, type_of,plural,altnames,contains_members,content, prior_nodes, posterior_nodes); - /* all_edges.concat(follows_edges); - all_edges.concat(member_of_metatype); + all_edges = all_edges.concat(follows_edges, member_of, contains_members, contains_subtypes, mentions_edges, right_subjecttype_of, left_subjecttype_of, subjecttype_of, type_of,plural,altnames,contains_members,content, prior_nodes, posterior_nodes); + /* all_edges.concat(follows_edges); + all_edges.concat(member_of_metatype); all_edges.concat(contains_members); - all_edges.concat(contains_subtypes); - all_edges.concat(mentions_edges); + all_edges.concat(contains_subtypes); + all_edges.concat(mentions_edges); - document.getElementById('debugbox1').value= follows_edges; //member_of_metatype + document.getElementById('debugbox1').value= follows_edges; //member_of_metatype document.getElementById('debugbox2').value= mentions_edges; - //document.getElementById('debugbox2').value= member_of_metatype; - document.getElementById('debugbox3').value= all_edges; + //document.getElementById('debugbox2').value= member_of_metatype; + document.getElementById('debugbox3').value= all_edges; */ var force = d3.layout.force() .linkStrength(0.5) @@ -372,7 +370,7 @@ $(function() { if(nodes_by_id[e.to] && !nodes_by_id[e.to].added){ nodes_by_id[e.to].added = true; acc.push(nodes_by_id[e.to]); - } + } return acc; }, []); @@ -390,7 +388,7 @@ $(function() { } */ ) .attr("x1", function(d) { return d.source.x; - }) + }) .attr("y1", function(d) { return d.source.y; }) @@ -405,13 +403,13 @@ $(function() { }) .append("a") - .text(function(d) { return d.type; }); + .text(function(d) { return d.type; }); - var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); + var node = d3.select("#chart g.nodes").selectAll("g.node").data(nodes); var new_g = node.enter().append("svg:a") - .attr("class", function(d) { if (d._id=={{ nt.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) + .attr("class", function(d) { if (d._id=={{ nt.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) .attr("xlink:href",function(d){return d.url;}) .call(force.drag); @@ -428,14 +426,14 @@ $(function() { new_g.append("svg:text") .attr("class",function(d) { if (d._id=={{ nt.id }}) return "mainnode"; else if (isNaN(d._id)) return "relnode"; else if ((d._id)<0) return "nodetext"; else return "node"; }) .attr("dy", 20) - .attr("dx", 25) - .attr("text-anchor",function text(d) { if (isNaN(d._id) || (d._id)<0) return "middle" ; else return "left"}) + .attr("dx", 25) + .attr("text-anchor",function text(d) { if (isNaN(d._id) || (d._id)<0) return "middle" ; else return "left"}) -// .attr("style",function text(d) { if (isNaN(d._id)) return "font-size:9.00pt;fill:#333;" ; else return "font-size:9.00pt;fill:black;"}) +// .attr("style",function text(d) { if (isNaN(d._id)) return "font-size:9.00pt;fill:#333;" ; else return "font-size:9.00pt;fill:black;"}) .text(function(d) { return d.screen_name; - }); + }); node.exit().remove(); @@ -465,7 +463,7 @@ $(function() { /* $('input#follows').change(function(){ update(all_edges); }); - */ + */ /* $('input#mentions').change(function(){ update(all_edges); @@ -480,9 +478,12 @@ $(function() { }); - +
+ + +
{% include "gstudio/_header.html" %} @@ -583,13 +689,8 @@ $(function() { {{ GSTUDIO_VERSION }}.

-
+ - - - - - diff --git a/gstudio/templates/gstudio/skeleton.html b/gstudio/templates/gstudio/skeleton.html index 3b945f48..96a22875 100644 --- a/gstudio/templates/gstudio/skeleton.html +++ b/gstudio/templates/gstudio/skeleton.html @@ -207,7 +207,7 @@ $(function fgraph() { $.getJSON('/nodetypes/graphs/graph_json/' + {{object.id}}, function (json1) { metadata=json1.node_metadata; relations=json1.relations; - relnset=json1.relset + init(metadata,relations); load({{object.id}}) }); diff --git a/gstudio/templates/gstudio/version_diff.html b/gstudio/templates/gstudio/version_diff.html index a640f071..4a11ec2a 100644 --- a/gstudio/templates/gstudio/version_diff.html +++ b/gstudio/templates/gstudio/version_diff.html @@ -108,38 +108,154 @@

{% block content %} {% block nodetype-content %}

- {{ ver_new.title }} + {{ ver_new_dict.title }} {{ nt.id }}.{{ version_no1 }}

- - - - - - {% with nt1.html_content|safe as object_content %}
- Name:{{ ver_new.title }}
- {% if ver_new.altnames %} - Alternate names:{{ ver_new.altnames }} -
- {% endif %} - {% if ver_new.plural %} - Plural Name:{{ ver_new.plural }}
- {% endif %} - - Content:{{ ver_new.content }}
- + + {% with nt.html_content|safe as object_content %}
- {% if nt1.get_rendered_nbh.authors %}Authors: - {% endif %} - {% for author in nt1.authors.all %} - - - {% if not forloop.last %}, {% endif %} - {% endfor %}
- {% endwith %} - {% endblock %} - {% endblock %} + Name: {{ ver_new_nbh_dict.title }}
+ + {% if ver_new_nbh_dict.plural or ver_old_nbh_dict.plural %} + Plural Name: + {{ ver_new_nbh_dict.plural}}
+ {% endif %} + {% if ver_new_nbh_dict.altnames or ver_old_nbh_dict.altnames%} + Alternate names: + {{ ver_new_nbh_dict.altnames}}
+ {% endif %} + {% if ver_new_nbh_dict.type_of or ver_old_nbh_dict.type_of %} + Type of: + {% for typekey,typevalue in ver_new_nbh_dict.type_of.items %} + {{typekey}}; + {% endfor %}
+ {% endif %} + + + {% if ver_new_nbh_dict.member_of_metatypes or ver_old_nbh_dict.member_of_metatypes %} + + + Member of Metatypes: + {% for mkey,mvalue in ver_new_nbh_dict.member_of_metatypes.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + + + {% if ver_new_nbh_dict.contains_subtypes or ver_old_nbh_dict.contains_subtypes %} + Contains SubTypes: + {% for stkey,stvalue in ver_new_nbh_dict.items %} + {{stkey}}; + {% endfor %}
+ {% endif %} + + + {% if ver_new_nbh_dict.contains_members or ver_old_nbh_dict.contains_members %} + + + Contains Members: + {% for mkey,mvalue in ver_new_nbh_dict.contains_members.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + + + + + + + + + + + + + + + + + + + + {% if ver_new_nbh_dict.priornodes or ver_old_nbh_dict.priornodes %} + + + Prior nodes: + {% for mkey,mvalue in ver_new_nbh_dict.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_new_nbh_dict.posteriornodes or ver_old_nbh_dict.posteriornodes %} + + + Posterior nodes: + {% for mkey,mvalue in ver_new_nbh_dict.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_new_nbh_dict.relations or ver_old_nbh_dict.relations %} + + + {% for relkey,relvalue in ver_new_nbh_dict.relations.items %} + {{relkey}}: + {% for relk, relv in relvalue.items %} + {{relk}}; + {% endfor %}
+ {% endfor %} + {% endif %} + + {% if ver_new_nbh_dict.attributes or ver_old_nbh_dict.attributes %} + + {% for atkey,atvalue in ver_new_nbh_dict.attributes.items %} + {% if atvalue %} + {{atkey}}: + {% for atr in atvalue %} + {{atr}}; + {% endfor %}
+ {% endif %} + {% endfor %} + {% endif %} + {% if ver_new_nbh_dict.leftroles or ver_old_nbh_dict.leftroles %} + + + Left roles: + + {% for lrkey,lrvalue in ver_new_nbh_dict.leftroles.items %} + {{lrkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_new_nbh_dict.rightroles or ver_old_nbh_dict.rightroles %} + + Right roles: + + {% for rrkey,rrvalue in ver_new_nbh_dict.rightroles.items %} + {{rrkey}}; + {% endfor %}
+ {% endif %} + + + {% if ver_new_nbh_dict.ats or ver_old_nbh_dict.ats %} + + + Subjecttype of: + + {% for atkey,atvalue in ver_new_nbh_dict.ats.items %} + {{atkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_new_nbh_dict.content or ver_old_nbh_dict.content %} + Content:{{ ver_new_nbh_dict.content }} + {% endif %} + + {% endwith %} + {% endblock %} + {% endblock %} @@ -147,71 +263,126 @@

{% block content1 %} {% block nodetype-content1 %}

- {{ ver_old.title }} + {{ ver_old_dict.title }} {{ nt.id }}.{{ version_no2 }} -

- - - - -
- {% with nt1.html_content|safe as object_content %} +
+ {% with nt.html_content|safe as object_content %} + Name:{% autoescape off %} - {{ diffs.0 }} + {{ compare_dict.title }} {% endautoescape %}
- {% if ver_old.altnames %} + {% if ver_old_nbh_dict.plural or ver_new_nbh_dict.plural %} + Plural Name: {% autoescape off %} + {{ compare_dict.plural }} + {% endautoescape %}
+ {% endif %} + {% if ver_old_nbh_dict.altnames or ver_new_nbh_dict.altnames %} Alternate names: {% autoescape off %} - {{ diffs.1 }} + {{ compare_dict.altnames }} {% endautoescape %}
{% endif %} - {% if ver_old.plural %} - Plural Name: {% autoescape off %} - {{ diffs.2 }} - {% endautoescape %}
+ {% if ver_new_nbh_dict.type_of or ver_old_nbh_dict.type_of %} + Type of: {% autoescape off %} + {{ compare_dict.type_of }} + {% endautoescape %} +
{% endif %} - - Content: {% autoescape off %} - {{ diffs.3 }} + {% if ver_new_nbh_dict.member_of_metatypes or ver_old_nbh_dict.member_of_metatypes %} + Member of Metatypes: {% autoescape off %} + {{ compare_dict.member_of_metatypes }} + {% endautoescape %} +
+ {% endif %} + {% if ver_new_nbh_dict.contains_subtypes or ver_old_nbh_dict.contains_subtypes %} + Contain subtypes: {% autoescape off %} + {{ compare_dict.contains_subtypes }} + {% endautoescape %} +
+ {% endif %} + + {% if ver_old_nbh_dict.contains_members or ver_new_nbh_dict.contains_members %} + Contains Members:{% autoescape off %} + {{ compare_dict.contains_members }} {% endautoescape %}
+ {% endif %} + {% if ver_new_nbh_dict.priornodes or ver_old_nbh_dict.priornodes %} + Prior nodes: {% autoescape off %} + {{ compare_dict.priornodes }} + {% endautoescape %}
+ + + {% endif %} + {% if ver_new_nbh_dict.posteriornodes or ver_old_nbh_dict.posteriornodes %} + Posterior nodes: {% autoescape off %} + {{ compare_dict.posteriornodes }} + {% endautoescape %}
+ + + {% endif %} + + {% if ver_new_nbh_dict.relations or ver_old_nbh_dict.relations %} + {% for relkey,relvalue in compare_dict.relations.items %} + {{relkey}}: + {% autoescape off %} + + + {{ relvalue }} + + + {% endautoescape %} +
+ {% endfor %} + {% endif %} + + {% if ver_new_nbh_dict.attributes or ver_old_nbh_dict.attributes %} + Attributes: {% autoescape off %} + {{ compare_dict.attributes }} + {% endautoescape %}
+ {% endif %} - - {% if nt1.get_rendered_nbh.authors %}Authors: - {% endif %} - {% for author in nt1.authors.all %} - - - {% if not forloop.last %}, {% endif %} - {% endfor %}
+ + {% if ver_new_nbh_dict.leftroles or ver_old_nbh_dict.leftroles %} + Left roles: {% autoescape off %} + {{ compare_dict.leftroles }} + {% endautoescape %} +
+ {% endif %} + {% if ver_new_nbh_dict.rightroles or ver_old_nbh_dict.rightroles %} + Right roles: {% autoescape off %} + {{ compare_dict.rightroles }} + {% endautoescape %} +
+ {% endif %} + {% if ver_new_nbh_dict.ats or ver_old_nbh_dict.ats %} + + + Subjecttype of: {% autoescape off %} + {{ compare_dict.ats }} + {% endautoescape %}
+ {% endif %} + {% if ver_new_nbh_dict.content or ver_old_nbh_dict.content %} + Content: {% autoescape off %} + {{ compare_dict.content }} + {% endautoescape %}
+ {% endif %} {% endwith %} {% endblock %} {% endblock %} - - - - - - - - - - - - - - - - - - - - - - - - - +
+ + +
+ +
+ + +
+ + +
+ + diff --git a/gstudio/urls/history.py b/gstudio/urls/history.py index 3932cd62..b2c489e3 100644 --- a/gstudio/urls/history.py +++ b/gstudio/urls/history.py @@ -3,6 +3,8 @@ from django.conf.urls.defaults import url from django.conf.urls.defaults import patterns urlpatterns = patterns('gstudio.views.history', - url(r'^viewhistory/(?P\d+)/(?P\d+)/$', 'history', + url(r'^viewhistory/(?P\d+)/(?P\d+)/$', 'history', name='gstudio_history'), - url(r'^showhistory/(?P\d+)/$','showHistory'),) + url(r'^compare_history/(?P\d+)/$','compare_history'), + url(r'^merge/(?P\d+)/(?P\d+)/$','merge_version'), + url(r'^revert/$','revert_version'),) diff --git a/gstudio/views/history.py b/gstudio/views/history.py index d4adac9e..10fc7abb 100644 --- a/gstudio/views/history.py +++ b/gstudio/views/history.py @@ -12,94 +12,491 @@ from gstudio.views.decorators import protect_nodetype from gstudio.views.decorators import update_queryset import ast -def history(request,ssid,cnt): +def history(request,ssid,version_no): # iden=request.GET["id"] nt1=Version.objects.get(id=ssid) nt=nt1.object.ref ver_dict=nt.version_info(ssid) - variables = RequestContext(request,{'ver_dict':ver_dict ,'nt':nt,'ssid':ssid,'cnt':cnt }) + ver_nbh=ver_dict['nbhood'] + ver_nbh_dict=ast.literal_eval(ver_nbh) + content=ver_dict['content'] + content=content[3:-4] + ver_nbh_dict['content']=content + + variables = RequestContext(request,{'ver_nbh_dict':ver_nbh_dict ,'nt':nt,'ssid':ssid,'version_no':version_no}) template="gstudio/display.html" return render_to_response(template,variables) -def showHistory(request,ssid): - # vid1=request.GET["group1"] - vid1=ssid - vid2=request.GET["group2"] - nt=Version.objects.get(id=vid1) - nt1=nt.object.ref +def get_version_counter(value): + counter1=str(value) + index=counter1.rfind(".") + counter1=counter1[index+1:] + version_no=int(counter1) + return version_no + + +def get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,field): + ver_new="" + ver_old="" + diffs="" + if ver_new_nbh_dict[field] or ver_old_nbh_dict[field]: + for each in ver_new_nbh_dict[field]: + ver_new+=str(each)+"," + ver_new=ver_new[0:-1] + for each in ver_old_nbh_dict[field]: + ver_old+=str(each)+"," + ver_old=ver_old[0:-1] + diffs = dmp.diff_main(ver_new, ver_old) + return diffs + +def compare_history(request,ssid): + ssid1=ssid + + version_counter1=request.GET["group1"] + version_no1=get_version_counter(version_counter1) + version_counter2=request.GET["group2"] + version_no2=get_version_counter(version_counter2) + counter2=float(version_counter2) + ssid2=int(counter2) + + ver_obj=Version.objects.get(id=ssid1) + ot=ver_obj.object.ref pp=pprint.PrettyPrinter(indent=4) - ver_new1=Version.objects.get(id=vid1) - ver_old1=Version.objects.get(id=vid2) - ver_new_dict=nt1.version_info(request.GET["group1"]) + ver_new_dict=ot.version_info(ssid1) content=str(ver_new_dict['content']) content=content[3:-4] ver_new_dict['content']=content - ver_old_dict=nt1.version_info(request.GET["group2"]) + + ver_old_dict=ot.version_info(ssid2) content=str(ver_old_dict['content']) content=content[3:-4] ver_old_dict['content']=content ver_new_nbh=ver_new_dict['nbhood'] - ver_new_dict1=ast.literal_eval(ver_new_nbh) + ver_new_nbh_dict=ast.literal_eval(ver_new_nbh) ver_old_nbh=ver_old_dict['nbhood'] - ver_old_dict1=ast.literal_eval(ver_old_nbh) - - # ver_new_nbh=ver_new_nbh.replace(",","\n") - # ver_old_nbh=ver_old_nbh.replace(",","\n") - d=[] - d1=[] - field=['Name','Plural Name','Alternate Name','Authors','Content'] - for each in ver_new_dict1: + ver_old_nbh_dict=ast.literal_eval(ver_old_nbh) + + compare_dict={} + for each in ver_new_nbh_dict: ver_new="" ver_old="" - if each =='altnames': - ver_new+=ver_new_dict['altnames'] - ver_old+=ver_old_dict['altnames'] - - diffs = dmp.diff_main(ver_new, ver_old) - d.append(dmp.diff_prettyHtml(diffs)) - # diffs = dmp.diff_main(ver_old, ver_new) - # d1.append(dmp.diff_prettyHtml(diffs)) + if each=='altnames': + if ver_new_nbh_dict['altnames'] or ver_old_nbh_dict['altnames']: + ver_new+=ver_new_nbh_dict['altnames'] + ver_old+=ver_old_nbh_dict['altnames'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['altnames']=dmp.diff_prettyHtml(diffs) + - if each =='title': - ver_new+=ver_new_dict['title'] - ver_old+=ver_old_dict['title'] - diffs = dmp.diff_main(ver_new, ver_old) - d.append(dmp.diff_prettyHtml(diffs)) - # diffs = dmp.diff_main(ver_old, ver_new) - # d1.append(dmp.diff_prettyHtml(diffs)) - if each =='plural': - ver_new+=ver_new_dict['plural'] - ver_old+=ver_old_dict['plural'] - diffs = dmp.diff_main(ver_new, ver_old) - d.append(dmp.diff_prettyHtml(diffs)) - # diffs = dmp.diff_main(ver_old, ver_new) - # d1.append(dmp.diff_prettyHtml(diffs)) - # if each =='content': + elif each=='title': + if ver_new_nbh_dict['title'] or ver_old_nbh_dict['title']: + ver_new+=ver_new_nbh_dict['title'] + ver_old+=ver_old_nbh_dict['title'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['title']=dmp.diff_prettyHtml(diffs) + elif each =='plural': + if ver_new_nbh_dict['plural'] or ver_old_nbh_dict['plural']: + ver_new+=ver_new_nbh_dict['plural'] + ver_old+=ver_old_nbh_dict['plural'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['plural']=dmp.diff_prettyHtml(diffs) + elif each =='contains_members': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['contains_members']=dmp.diff_prettyHtml(diffs) + elif each =='leftroles': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['leftroles']=dmp.diff_prettyHtml(diffs) + elif each =='ats': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['ats']=dmp.diff_prettyHtml(diffs) + elif each =='rightroles': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['rightroles']=dmp.diff_prettyHtml(diffs) + elif each =='attributes': + compare_rel_new={} + compare_rel_old={} + compare={} + for rkey,rvalue in ver_new_nbh_dict[each].items(): + ver_new="" + for relvalue in rvalue: + ver_new+=str(relvalue) + "," + ver_new=ver_new[0:-1] + compare_rel_new[str(rkey)]=ver_new + for rkey,rvalue in ver_old_nbh_dict[each].items(): + ver_old="" + for rv in rvalue: + ver_old+=str(rv) + "," + ver_old=ver_old[0:-1] + compare_rel_old[str(rkey)]=ver_old + if len(compare_rel_new) >= len(compare_rel_old): + for rkey,rvalue in compare_rel_new.items(): + if compare_rel_old.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + + else: + diffs=dmp.diff_main(compare_rel_new[str(rkey)],"") + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + for rkey,rvalue in compare_rel_old.items(): + if compare_rel_new.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + diffs=dmp.diff_main("",compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + compare_dict['attributes']=compare + + elif each =='relations': + + ver_new="" + ver_old="" + compare_rel_new={} + compare_rel_old={} + compare={} + for rkey,rvalue in ver_new_nbh_dict[each].items(): + ver_new="" + for relk,relvalue in rvalue.items(): + ver_new+=str(relk) + "," + ver_new=ver_new[0:-1] + compare_rel_new[str(rkey)]=ver_new + for rkey,rvalue in ver_old_nbh_dict[each].items(): + ver_old="" + for relk,relvalue in rvalue.items(): + ver_old+=str(relk) + "," + ver_old=ver_old[0:-1] + compare_rel_old[str(rkey)]=ver_old + if len(compare_rel_new) >= len(compare_rel_old): + for rkey,rvalue in compare_rel_new.items(): + if compare_rel_old.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + + else: + diffs=dmp.diff_main(compare_rel_new[str(rkey)],"") + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + for rkey,rvalue in compare_rel_old.items(): + if compare_rel_new.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + diffs=dmp.diff_main("",compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + compare_dict['relations']=compare + elif each =='priornodes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['priornodes']=dmp.diff_prettyHtml(diffs) + elif each =='posteriornodes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['posteriornodes']=dmp.diff_prettyHtml(diffs) + elif each =='type_of': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['type_of']=dmp.diff_prettyHtml(diffs) + elif each =='contains_subtypes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['contains_subtypes']=dmp.diff_prettyHtml(diffs) + elif each =='member_of_metatypes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['member_of_metatypes']=dmp.diff_prettyHtml(diffs) + + ver_new="" ver_old="" ver_new+=ver_new_dict['content'] ver_old+=ver_old_dict['content'] diffs = dmp.diff_main(ver_new, ver_old) - d.append(dmp.diff_prettyHtml(diffs)) - # diffs = dmp.diff_main(ver_old, ver_new) - # d1.append(dmp.diff_prettyHtml(diffs)) - - # for each in ver_new_dict1: -# ver_new="" - # ver_old="" - # ver_new+=each + ":" + str(ver_new_dict1[each]) -# ver_old+=each + ":" + str(ver_old_dict1[each]) - # diffs = dmp.diff_main(ver_new, ver_old) - # d.append(dmp.diff_prettyHtml(diffs)) - - # return HttpResponse(d) - ver_new=nt1.version_info(request.GET["group1"]) - ver_old=nt1.version_info(request.GET["group2"]) - - variables=RequestContext(request,{'nt':nt1,'ver_old':ver_old_dict,'ver_new':ver_new_dict,'diffs':d ,'vid1':vid1,'vid2':vid2 }) + compare_dict['content']=dmp.diff_prettyHtml(diffs) + ver_new_nbh_dict['content']=ver_new_dict['content'] + ver_old_nbh_dict['content']=ver_old_dict['content'] + + + + variables=RequestContext(request,{'nt':ot,'ver_old_dict':ver_old_dict,'ver_new_dict':ver_new_dict,'compare_dict':compare_dict ,'ssid1':ssid1,'ssid2':ssid2,'version_no1':version_no1,'version_no2':version_no2,'ver_new_nbh_dict':ver_new_nbh_dict,'ver_old_nbh_dict':ver_old_nbh_dict}) template="gstudio/version_diff.html" return render_to_response(template,variables) + +def set_objecttype_field(obj,ver_merge): + # setting the objecttypes fields + obj.slug = ver_merge['slug'] + obj.altnames=ver_merge['altnames'] + obj.rght = ver_merge['rght'] + obj.nodemodel = ver_merge['nodemodel'] + obj.lft = ver_merge['lft'] + obj.comment_enabled = ver_merge['comment_enabled'] + obj.title = ver_merge['title'] + obj.sites = ver_merge['sites'] + obj.content = ver_merge['content'] + obj.template = ver_merge['template'] + obj.tree_id = ver_merge['tree_id'] + obj.plural = ver_merge['plural'] + obj.status = ver_merge['status'] + obj.nid_ptr = NID.objects.get(id=ver_merge['nid_ptr']) + + # obj.nbh=ver_merge['nbh'] + obj.id = ver_merge['id'] + obj.pingback_enabled = ver_merge['pingback_enabled'] + + return obj +def set_attributetype_field(obj,ver_merge): + # setting the objecttypes fields + obj.subjecttype = NID.objects.get(id=ver_merge['nid_ptr']) + obj.applicable_nodetypes=ver_merge['applicable_nodetypes'] + obj.dataType = ver_merge['dataType'] + obj.verbose_name = ver_merge['verbose_name'] + obj.null = ver_merge['null'] + obj.blank = ver_merge['blank'] + obj.help_text = ver_merge['help_text'] + # obj.max_digits = ver_merge['max_digits'] + # obj.decimal_places = ver_merge['decimal_places'] + obj.auto_now = ver_merge['auto_now'] + obj.auto_now_add = ver_merge['auto_now_add'] + obj.upload_to = ver_merge['upload_to'] + obj.path = ver_merge['path'] + obj.verify_exists = ver_merge['verify_exists'] + # obj.min_length= ver_merge['min_length'] + obj.required= ver_merge['required'] + obj.label = ver_merge['label'] + obj.unique = ver_merge['unique'] + # obj.validators= ver_merge['validators'] + obj.default= ver_merge['default'] + obj.editable= ver_merge['editable'] + # return HttpResponse(ver_merge) + return obj +def set_relationtype_field(obj,ver_merge): + + + # setting the relationtype types fields + obj.inverse = ver_merge['inverse'] + obj.left_subjecttype=ver_merge['left_subjecttype'] + obj.left_applicable_nodetypes= ver_merge['left_applicable_nodetypes'] + obj.left_cardinality = ver_merge['left_cardinality'] + obj.right_subjecttype= ver_merge['right_subjecttype'] + obj.right_cadinality= ver_merge['right_cadinality'] + obj.right_cadinality= ver_merge['right_cadinality'] + obj.is_symmetrical= ver_merge['is_symmetrical'] + obj.is_reflexive= ver_merge['is_reflexive'] + obj.is_transitive= ver_merge['is_transitive'] + + return obj + +def set_processtype_field(obj,ver_merge): + # setting the processtype types fields + obj.changing_attributetype_set = ver_merge[''] + obj.changing_relationtype_set=ver_merge[''] + return obj + +def set_systemtype_field(obj,ver_merge): + # setting the systemtype types fields + obj.nodetype_set = ver_merge['nodetype_set'] + obj.relationtype_set=ver_merge['relationtype_set'] + obj.attributetype_set= ver_merge['attributetype_set'] + obj.metatype_set = ver_merge['metatype_set'] + obj.processtype_set= ver_merge['processtype_set'] + return obj + +def get_merge_dict(ssid1,ssid2,direction): + ver_merge={} + ot=Version.objects.get(id=ssid1) + obj=ot.object.ref + ver_left_dict=obj.version_info(ssid1) + ver_right_dict=obj.version_info(ssid2) + + + + if direction =='right': + # swap left and right + temp_dict={} + temp_dict=ver_left_dict + ver_left_dict=ver_right_dict + ver_right_dict=temp_dict + # swap ssid1 and ssid2 for managing nbhood history + temp=int(ssid1) + ssid1=int(ssid2) + ssid2=temp + ver_left_nbh_dict=ast.literal_eval(ver_left_dict['nbhood']) + ver_right_nbh_dict=ast.literal_eval(ver_right_dict['nbhood']) + # By default value of content is removed + if ver_left_dict['content']=='
': + ver_left_dict['content']='' + if ver_right_dict['content']=='
': + ver_right_dict['content']='' + # Getting merged dictionary + for each in ver_left_dict: + if ver_left_dict[each] and ver_right_dict[each]: + ver_merge[each]=ver_right_dict[each] + elif ver_left_dict[each]: + if not ver_right_dict[each]: + ver_merge[each]=ver_left_dict[each] + elif ver_right_dict[each]: + if not ver_left_dict[each]: + ver_merge[each]=ver_right_dict[each] + else: + if not ver_left_dict[each]: + if not ver_right_dict[each]: + ver_merge[each]=ver_right_dict[each] + ver_merge_nbh_dict={} + # processing nbhood for merged version + for each in ver_left_nbh_dict: + if isinstance(ver_left_nbh_dict[each],dict): + if ver_left_nbh_dict[each] and ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=dict(ver_left_nbh_dict[each].items()+ver_right_nbh_dict[each].items()) + elif ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_left_nbh_dict[each] + elif ver_right_nbh_dict[each]: + if not ver_left_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if not ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if ver_left_nbh_dict[each] and ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + elif ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_left_nbh_dict[each] + elif ver_right_nbh_dict[each]: + if not ver_left_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if not ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + + # Removing auto generated fields + del(ver_merge['start_publication']) + del(ver_merge['end_publication']) + del(ver_merge['creation_date']) + del(ver_merge['last_update']) + + history_left_list=[] + history_right_list=[] + history_merged_list=[] + + history_left_list=ver_left_nbh_dict['history'] + history_left_list.append(ssid1) + history_right_list=ver_right_nbh_dict['history'] + history_right_list.append(ssid2) + history_merged_list.append(history_left_list) + history_merged_list.append(history_right_list) + ver_merge_nbh_dict['history']=history_merged_list + + obj.nbhood = unicode(ver_merge_nbh_dict) + if isinstance(obj,Objecttype): + obj=set_objecttype_field(obj,ver_merge) + if isinstance(obj,Attributetype): + obj=set_objecttype_field(obj,ver_merge) + obj=set_attributetype_field(obj,ver_merge) + if isinstance(obj,Relationtype): + obj=set_objecttype_field(obj,ver_merge) + obj=set_relationtype_field(obj,ver_merge) + if isinstance(obj,Processtype): + obj=set_objecttype_field(obj,ver_merge) + obj=set_processtype_field(obj,ver_merge) + if isinstance(obj,Systemtype): + obj=set_objecttype_field(obj,ver_merge) + obj=set_systemtype_field(obj,ver_merge) + + + obj.save_revert_or_merge() + content=ver_merge['content'] + content=content[3:-4] + ver_merge['content']= content + return ver_merge + + +def merge_version(request,ssid1,ssid2): + direction="" + ver_merge={} + for each in request.GET: + direction=each + ot=Version.objects.get(id=ssid1) + obj=ot.object.ref + ver_merge=get_merge_dict(ssid1,ssid2,direction) + slist=[] + slist=obj.get_ssid + version_counter=len(slist) + merged_ver_ssid=slist[version_counter-1] + ver_merged_dict=obj.version_info(merged_ver_ssid) + ver_merged_nbh_dict=ast.literal_eval(ver_merged_dict['nbhood']) + ver_merged_nbh_dict['content']=ver_merge['content'] + variables = RequestContext(request,{'ver_nbh_dict':ver_merged_nbh_dict ,'nt':obj,'ssid':merged_ver_ssid,'version_no':version_counter}) + template="gstudio/display.html" + return render_to_response(template,variables) + +def revert(ssid): + ver_revert={} + ot=Version.objects.get(id=ssid) + obj=ot.object.ref + ver_revert=obj.version_info(ssid) + + # Removing auto generated fields + del(ver_revert['start_publication']) + del(ver_revert['end_publication']) + del(ver_revert['creation_date']) + del(ver_revert['last_update']) + history=[] + ver_revert_nbh_dict=ast.literal_eval(ver_revert['nbhood']) + + history=ver_revert_nbh_dict['history'] + history.append(ssid) + ver_revert_nbh_dict['history']=history + + + # ver_revert_nbh_dict['history']=ver_revert_nbh_history.append(ssid) + ver_revert['nbhood']=unicode(ver_revert_nbh_dict) + obj.nbhood=ver_revert['nbhood'] + if isinstance(obj,Objecttype): + obj=set_objecttype_field(obj,ver_revert) + if isinstance(obj,Attributetype): + obj=set_objecttype_field(obj,ver_revert) + obj=set_attributetype_field(obj,ver_revert) + if isinstance(obj,Relationtype): + obj=set_objecttype_field(obj,ver_revert) + obj=set_relationtype_field(obj,ver_revert) + if isinstance(obj,Processtype): + obj=set_objecttype_field(obj,ver_revert) + obj=set_processtype_field(obj,ver_revert) + if isinstance(obj,Systemtype): + obj=set_objecttype_field(obj,ver_revert) + obj=set_systemtype_field(obj,ver_revert) + + obj.save_revert_or_merge() + + # formatting content field + content=ver_revert['content'] + content=content[3:-4] + ver_revert['content']= content + + return ver_revert + +def revert_version(request): + ver_revert={} + for each in request.GET: + ssid=each + ssid=int(ssid) + ot=Version.objects.get(id=ssid) + obj=ot.object.ref + + ver_revert=revert(ssid) + ver_revert['nbhood'] + slist=[] + slist=obj.get_ssid + version_counter=len(slist) + revert_ver_ssid=slist[version_counter-1] + ver_revert_dict=obj.version_info(revert_ver_ssid) + ver_revert_nbh_dict=ast.literal_eval(ver_revert_dict['nbhood']) + ver_revert_nbh_dict['content']=ver_revert['content'] + + variables = RequestContext(request,{'ver_nbh_dict':ver_revert_nbh_dict ,'nt':obj,'ssid':revert_ver_ssid,'version_no':version_counter}) + template="gstudio/display.html" + return render_to_response(template,variables) + # return HttpResponse(ver_revert['nbhood']) + + diff --git a/objectapp/models.py b/objectapp/models.py index d6c7d308..1d2df912 100644 --- a/objectapp/models.py +++ b/objectapp/models.py @@ -97,7 +97,7 @@ from gstudio.models import Relation from gstudio.models import Node from gstudio.models import Edge from gstudio.models import Author - +import ast from objectapp.settings import UPLOAD_TO from objectapp.settings import MARKUP_LANGUAGE from objectapp.settings import GBOBJECT_TEMPLATES @@ -504,9 +504,8 @@ class Gbobject(Node): #print g_json return json.dumps(g_json) - @property - def get_relations1(self): + def get_rendered_relations(self): """ Returns all the relations of the nodetype """ @@ -530,7 +529,7 @@ class Gbobject(Node): if each.relationtype.title==key: fl=1 predicate_values.append(predicate) - reltype[key]=predicate_values + reltype[key]=predicate_values if fl==0: predicate_values=predicate reltype[relation]=predicate_values @@ -569,12 +568,26 @@ class Gbobject(Node): reltype[relation]=predicate_values relations['rrelations']=reltype return relations + @property def get_rendered_nbh(self): """ Returns the neighbourhood of the object """ fields = ['title','altname','pluralform'] + history=[] + version_list=self.get_ssid + version_list=self.get_ssid + if version_list: + length=len(version_list) + history_ssid=version_list[length-1] + history_dict=self.version_info(history_ssid) + history_nbh_dict=ast.literal_eval(history_dict['nbhood']) + #ssid_current.append(history_ssid) + history=history_nbh_dict['history'] + history.append(history_ssid) + else: + history.append(0) nbh = {} nbh['title'] = self.title nbh['altnames'] = self.altnames @@ -600,8 +613,8 @@ class Gbobject(Node): relns={} rellft={} relrgt={} - if self.get_relations1: - NTrelns=self.get_relations1 + if self.get_rendered_relations: + NTrelns=self.get_rendered_relations for key,value in NTrelns.items(): if key=="rrelations": relrgt={} @@ -609,9 +622,9 @@ class Gbobject(Node): relnvalue={} if isinstance(rgtvalue,list): for items in rgtvalue: - relnvalue[items]=items.get_absolute_url() + relnvalue[items.title]=items.get_absolute_url() else: - relnvalue[rgtvalue]=rgtvalue.get_absolute_url() + relnvalue[rgtvalue.title]=rgtvalue.get_absolute_url() relrgt[rgtkey]=relnvalue @@ -622,9 +635,9 @@ class Gbobject(Node): relnvalue={} if isinstance(lftvalue,list): for items in lftvalue: - relnvalue[items]=items.get_absolute_url() + relnvalue[items.title]=items.get_absolute_url() else: - relnvalue[lftvalue]=lftvalue.get_absolute_url() + relnvalue[lftvalue.title]=lftvalue.get_absolute_url() rellft[lftkey]=relnvalue @@ -634,7 +647,8 @@ class Gbobject(Node): #get Attributes attributes =self.get_attributes() - nbh['attributes']=attributes + nbh['attributes']=attributes + nbh['history']=history return nbh @@ -737,7 +751,9 @@ class Gbobject(Node): return '%s is a member of objecttype %s' % (self.title, each) return '%s is not a fully defined name, consider making it a member of a suitable objecttype' % (self.title) - + @property + def ref(self): + return eval(self.nodemodel).objects.get(id=self.id) @models.permalink def get_absolute_url(self): """Return gbobject's URL""" @@ -750,16 +766,16 @@ class Gbobject(Node): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. + + def save_revert_or_merge(self, *args, **kwargs): if OBJECTAPP_VERSIONING: with reversion.create_revision(): super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. - - super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method. - @property - def ref(self): - return eval(self.nodemodel).objects.get(id=self.id) - - class Meta: """Gbobject's Meta""" @@ -803,12 +819,18 @@ class Process(Gbobject): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if OBJECTAPP_VERSIONING: with reversion.create_revision(): - super(Process, self).save(*args, **kwargs) # Call the "real" save() method. - - super(Process, self).save(*args, **kwargs) # Call the "real" save() method. - + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + + def save_revert_or_merge(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(Process, self).save(*args, **kwargs) # Call the "real" save() method. + class Meta: verbose_name = _('process') verbose_name_plural = _('processes') @@ -848,11 +870,19 @@ class System(Gbobject): # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ + super(System, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if OBJECTAPP_VERSIONING: with reversion.create_revision(): super(System, self).save(*args, **kwargs) # Call the "real" save() method. + + def save_revert_or_merge(self, *args, **kwargs): + self.nodemodel = self.__class__.__name__ + if OBJECTAPP_VERSIONING: + with reversion.create_revision(): + super(System, self).save(*args, **kwargs) # Call the "real" save() method. - super(System, self).save(*args, **kwargs) # Call the "real" save() method. + def __unicode__(self): @@ -861,13 +891,13 @@ class System(Gbobject): if OBJECTAPP_VERSIONING == True: if not reversion.is_registered(Process): - reversion.register(Process, follow=["priorstate_attribute_set", "priorstate_relation_set", "poststate_attribute_set", "poststate_relation_set", "prior_nodes", "posterior_nodes"]) + reversion.register(Process, follow=["gbobject_ptr","priorstate_attribute_set", "priorstate_relation_set", "poststate_attribute_set", "poststate_relation_set", "prior_nodes", "posterior_nodes"]) if not reversion.is_registered(System): - reversion.register(System, follow=["systemtypes", "gbobject_set", "relation_set", "attribute_set", "process_set", "system_set", "prior_nodes", "posterior_nodes"]) + reversion.register(System, follow=["gbobject_ptr","systemtypes", "gbobject_set", "relation_set", "attribute_set", "process_set", "system_set", "prior_nodes", "posterior_nodes"]) if not reversion.is_registered(Gbobject): - reversion.register(Gbobject, follow=["objecttypes", "prior_nodes", "posterior_nodes"]) + reversion.register(Gbobject, follow=["node_ptr","objecttypes", "prior_nodes", "posterior_nodes"]) moderator.register(Gbobject, GbobjectCommentModerator) @@ -877,4 +907,4 @@ post_save.connect(ping_directories_handler, sender=Gbobject, post_save.connect(ping_external_urls_handler, sender=Gbobject, dispatch_uid='objectapp.gbobject.post_save.ping_external_urls') - + diff --git a/objectapp/settings.py b/objectapp/settings.py index ba6004dc..bb357e62 100644 --- a/objectapp/settings.py +++ b/objectapp/settings.py @@ -134,4 +134,4 @@ USE_TWITTER = getattr(settings, 'OBJECTAPP_USE_TWITTER', bool(TWITTER_ACCESS_KEY and TWITTER_ACCESS_SECRET and \ TWITTER_CONSUMER_KEY and TWITTER_CONSUMER_SECRET)) -OBJECTAPP_VERSIONING = False +OBJECTAPP_VERSIONING = True diff --git a/objectapp/templates/objectapp/base.html b/objectapp/templates/objectapp/base.html index d2b78ceb..f026494f 100644 --- a/objectapp/templates/objectapp/base.html +++ b/objectapp/templates/objectapp/base.html @@ -40,6 +40,20 @@ {% get_objecttypes %} --> +
+ +

{% trans "Versions" %}

+ + + {% for sid in object.ref.get_ssid %} + + + {{ object.title }} {{ object.id }}.{{ forloop.counter }}
+ + {% endfor %} + + +

{% trans "Authors" %}

{% get_authors %} diff --git a/objectapp/templates/objectapp/display.html b/objectapp/templates/objectapp/display.html new file mode 100644 index 00000000..7c920678 --- /dev/null +++ b/objectapp/templates/objectapp/display.html @@ -0,0 +1,609 @@ +{% load i18n comments gstudio_tags %} +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} + + + + + + + + + {% block blockbots %} + + {% endblock %} + {% block stylesheets %} + + {% if LANGUAGE_BIDI %} + + {% endif %} + + + {% endblock %} + {% block extrastyle %}{% endblock %} + {% block javascripts %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block extrahead %}{% endblock %} + + {% endblock %} + + + + + + + + {% block meta %}{% endblock %} + + + + + + + + + {% block link %}{% endblock %} + {% block script %}{% endblock %} Gnowledge Studio - {% block title %}{% endblock %} + + +
+
+ +
+ +
+ + + + + + + + +
+
+ + + +
+ {% include "gstudio/_header.html" %} + +
+
+

{% block content %} + {% block nodetype-content %} +

+ {{ ver_nbh_dict.title }} {{ nt.id }}.{{ version_no }} + +

+ {% with nt.html_content|safe as object_content %} + Name: {{ ver_nbh_dict.title }}
+ + {% if ver_nbh_dict.plural %} + Plural Name: + {{ ver_nbh_dict.plural}}
+ {% endif %} + {% if ver_nbh_dict.altnames %} + Alternate names: + {{ ver_nbh_dict.altnames}}
+ {% endif %} + {% if ver_nbh_dict.member_of %} + Member of : + + {% for mkey,mvalue in ver_nbh_dict.member_of.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_nbh_dict.relations %} + + + {% for relkey,relvalue in ver_nbh_dict.relations.items %} + {{relkey}}: + {% for relk, relv in relvalue.items %} + {{relk}}; + {% endfor %}
+ {% endfor %} + + {% endif %} + + {% if ver_nbh_dict.attributes %} + {% for atkey,atvalue in ver_nbh_dict.attributes.items %} + {% if atvalue %} + {{atkey}}: + + {% for items in atvalue %} + {{items}}; + {% endfor %} + {% endif %}
+ {% endfor %} + {% endif %} + Authors: + {% for author in nt.authors.all %} + + + {% if not forloop.last %}, {% endif %} + {% endfor %}
+ + + + + + {% endwith %} + {% endblock %} + {% endblock %} +
+ +
+ + + + + {% for sid in nt.get_ssid %} + + {% if sid|stringformat:"s" != ssid|stringformat:"s" %} + + + {% endif %} + {% endfor %}
{{ nt.id }}.{{ version_no }}
+ + + {{ nt.id }}.{{ forloop.counter }} +
+ + + + +
+ + + {% endblock %} + + + + + + + + + diff --git a/objectapp/templates/objectapp/gbobject_list.html b/objectapp/templates/objectapp/gbobject_list.html index 73a3adff..3bc34a8d 100644 --- a/objectapp/templates/objectapp/gbobject_list.html +++ b/objectapp/templates/objectapp/gbobject_list.html @@ -1,4 +1,4 @@ -{% extends "objectapp/base.html" %} +{% extends "objectapp/version_base.html" %} {% load i18n objectapp_tags %} {% block meta-description %}{% trans "Latest gbobjects for" %} {% if Objecttype %}{% trans "the Objecttype" %} {{ Objecttype }}{% if Objecttype.description %}: {{ Objecttype.description|striptags|safe }}{% endif %}{% endif %}{% if tag %}{% trans "the tag" %} {{ tag }}{% endif %}{% if author %}{% trans "the author" %} {{ author }}{% endif %}{% if page_obj %}{% ifnotequal page_obj.number 1 %} {% trans "page" %} {{ page_obj.number }}{% endifnotequal %}{% endif %}{% endblock %} diff --git a/objectapp/templates/objectapp/version_base.html b/objectapp/templates/objectapp/version_base.html new file mode 100644 index 00000000..6972c9e2 --- /dev/null +++ b/objectapp/templates/objectapp/version_base.html @@ -0,0 +1,129 @@ +{% extends "gstudio/skeleton.html" %} +{% load gstudio_tags i18n %} +{% load objectapp_tags i18n %} + + {% block meta %} + +{% endblock %} + +{% block link %} + + + + + + +{% endblock %} + +{% block breadcrumbs %} + {% gstudio_breadcrumbs %} +{% endblock %} + +{% block sidebar %} + ? +

Rssfeed

+ + + +
+ + + + + + + + + + + + + + + + + + +
+

{% trans "Authors" %}

+ {% get_authors %} +
+
+

{% trans "Calendar" %}

+ {% get_calendar_gbobjects %} +
+
+

{% trans "Tags" %}

+ {% get_tag_cloud %} +
+
+

{% trans "Recent gbobjects" %}

+ {% get_recent_gbobjects 5 %} +
+
+

{% trans "Recent comments" %}

+ {% get_recent_comments 5 %} +
+
+

{% trans "Recent linkbacks" %}

+ {% get_recent_linkbacks 5 %} +
+
+

{% trans "Random gbobjects" %}

+ {% get_random_gbobjects 5 %} +
+
+

{% trans "Popular gbobjects" %}

+ {% get_popular_gbobjects 5 %} +
+
+

{% trans "Archives" %}

+ {% get_archives_gbobjects_tree %} +
+{% if user.is_authenticated %} +
+

{% trans "Tools" %}

+ +
+{% endif %} +{% endblock %} + + diff --git a/objectapp/templates/objectapp/version_diff.html b/objectapp/templates/objectapp/version_diff.html new file mode 100644 index 00000000..a552b5c9 --- /dev/null +++ b/objectapp/templates/objectapp/version_diff.html @@ -0,0 +1,262 @@ + +{% load i18n comments gstudio_tags %} +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} + + +{% load gstudio_tags i18n %} +{% get_tags as nodetype_tags %} +{% load adminmedia grp_tags %} + + + + + {% block blockbots %} + + {% endblock %} + {% block stylesheets %} + + {% if LANGUAGE_BIDI %} + + {% endif %} + + + {% endblock %} + {% block extrastyle %}{% endblock %} + {% block javascripts %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block extrahead %}{% endblock %} + + {% endblock %} + + + + + + + + {% block meta %}{% endblock %} + + + + + + + + {% block link %}{% endblock %} + {% block script %}{% endblock %} Gnowledge Studio - {% block title %}{% endblock %} + + + + + + + + + {% include "gstudio/_header.html" %} + + + + + + + + + + + +
+ +

{% block content %} + {% block nodetype-content %} +

+ {{ ver_new_dict.title }} {{ nt.id }}.{{ version_no1 }} + +

+ + {% with nt.html_content|safe as object_content %}
+ + Name: {{ ver_new_nbh_dict.title }}
+ + {% if ver_new_nbh_dict.plural or ver_old_nbh_dict.plural %} + Plural Name: + {{ ver_new_nbh_dict.plural}}
+ {% endif %} + {% if ver_new_nbh_dict.altnames or ver_old_nbh_dict.altnames%} + Alternate names: + {{ ver_new_nbh_dict.altnames}}
+ {% endif %} + {% if ver_new_nbh_dict.member_of or ver_old_nbh_dict.member_of %} + Member of : + + {% for mkey,mvalue in ver_new_nbh_dict.member_of.items %} + {{mkey}}; + {% endfor %}
+ {% endif %} + + {% if ver_new_nbh_dict.relations or ver_old_nbh_dict.relations %} + + {% for relkey,relvalue in ver_new_nbh_dict.relations.items %} + {{relkey}}: + {% for relk, relv in relvalue.items %} + {{relk}}; + {% endfor %}
+ {% endfor %} + + {% endif %} + + {% if ver_new_nbh_dict.attributes or ver_old_nbh_dict.attributes%} + {% for atkey,atvalue in ver_new_nbh_dict.attributes.items %} + {% if atvalue %} + {{atkey}}: + + {% for items in atvalue %} + {{items}}; + {% endfor %} + {% endif %}
+ {% endfor %} + {% endif %} + {% if ver_new_nbh_dict.content or ver_old_nbh_dict.content %} + Content:{{ ver_new_nbh_dict }}
+ {% endif %} + + + {% endwith %} + {% endblock %} + {% endblock %} + +
+ +

{% block content1 %} + {% block nodetype-content1 %} +

+ {{ ver_old_dict.title }} {{ nt.id }}.{{ version_no2 }} + +


+ {% with nt.html_content|safe as object_content %} + + Name:{% autoescape off %} + {{ compare_dict.title }} + {% endautoescape %}
+ {% if ver_old_nbh_dict.plural or ver_new_nbh_dict.plural %} + Plural Name: {% autoescape off %} + {{ compare_dict.plural }} + {% endautoescape %}
+ {% endif %} + {% if ver_old_nbh_dict.altnames or ver_new_nbh_dict.altnames %} + Alternate names: {% autoescape off %} + {{ compare_dict.altnames }} + {% endautoescape %} +
+ {% endif %} + {% if ver_new_nbh_dict.member_of or ver_old_nbh_dict.member_of %} + Member of: {% autoescape off %} + {{ compare_dict.member_of }} + {% endautoescape %} +
+ {% endif %} + + {% if ver_new_nbh_dict.relations or ver_old_nbh_dict.relations %} + {% for relkey,relvalue in compare_dict.relations.items %} + {{relkey}}: + {% autoescape off %} + + + {{ relvalue }} + + + {% endautoescape %} +
+ {% endfor %} + + {% endif %} + + {% if ver_old_nbh_dict.attributes or ver_new_nbh_dict.attributes %} + {% for relkey,revalue in compare_dict.attributes.items %} + {{relkey}}: + {% autoescape off %} + + + {{ revalue }} + + + {% endautoescape %} +
+ {% endfor %} + + {% endif %} + + + {% if ver_new_nbh_dict.ats or ver_old_nbh_dict.ats %} + + + Subjecttype of: {% autoescape off %} + {{ compare_dict.ats }} + {% endautoescape %}
+ {% endif %} + {% if ver_new_nbh_dict.content or ver_old_nbh_dict.content %} + Content: {% autoescape off %} + {{ compare_dict.content }} + {% endautoescape %}
+ {% endif %} + {% endwith %} + {% endblock %} + {% endblock %} +
+
+
+
+
+
+ + + + + + diff --git a/objectapp/urls/__init__.py b/objectapp/urls/__init__.py index 1406f49c..12cffc5e 100644 --- a/objectapp/urls/__init__.py +++ b/objectapp/urls/__init__.py @@ -78,6 +78,7 @@ urlpatterns = patterns( url(r'^trackback/', include('objectapp.urls.trackback')), url(r'^discussions/', include('objectapp.urls.discussions')), url(r'^add/', include('objectapp.urls.add')), + url(r'^display/',include('objectapp.urls.history')), url(r'^', include('objectapp.urls.quick_gbobject')), url(r'^', include('objectapp.urls.capabilities')), url(r'^', include('objectapp.urls.gbobjects')), diff --git a/objectapp/urls/history.py b/objectapp/urls/history.py new file mode 100644 index 00000000..83e53452 --- /dev/null +++ b/objectapp/urls/history.py @@ -0,0 +1,10 @@ +"""Urls for Gstudio forms""" +from django.conf.urls.defaults import url +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('objectapp.views.history', + url(r'^viewhistory/(?P\d+)/(?P\d+)/$', 'history', + name='gstudio_history'), + url(r'^compare_history/(?P\d+)/$','compare_history'), + url(r'^merge/(?P\d+)/(?P\d+)/$','merge_version'), + url(r'^revert/$','revert_version'),) diff --git a/objectapp/views/history.py b/objectapp/views/history.py new file mode 100644 index 00000000..e5e2ff1f --- /dev/null +++ b/objectapp/views/history.py @@ -0,0 +1,436 @@ +from django.http import * +from reversion.models import * +from gstudio.models import * +from django.template import RequestContext +from django.shortcuts import render_to_response +from django.views.generic.date_based import object_detail +from reversion.helpers import * +import pprint +from gstudio.models import * +from reversion.models import * +from gstudio.views.decorators import protect_nodetype +from gstudio.views.decorators import update_queryset +import ast +from objectapp.models import * + +def history(request,ssid,version_no): + # iden=request.GET["id"] + nt1=Version.objects.get(id=ssid) + nt=nt1.object.ref + ver_dict=nt.version_info(ssid) + ver_nbh=ver_dict['nbhood'] + ver_nbh_dict=ast.literal_eval(ver_nbh) + content=ver_dict['content'] + content=content[3:-4] + ver_nbh_dict['content']=content + + variables = RequestContext(request,{'ver_nbh_dict':ver_nbh_dict ,'nt':nt,'ssid':ssid,'version_no':version_no}) + template="objectapp/display.html" + return render_to_response(template,variables) + +def get_version_counter(value): + counter1=str(value) + index=counter1.rfind(".") + counter1=counter1[index+1:] + version_no=int(counter1) + return version_no + + +def get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,field): + ver_new="" + ver_old="" + diffs="" + ver_new_dict={} + ver_old_dict={} + + if ver_new_nbh_dict[field] or ver_old_nbh_dict[field]: +# if isinstance(ver_new_nbh_dict[field],dict): + for each in ver_new_nbh_dict[field]: + #ver_new=ver_new_dict[each]= + ver_new+=str(each)+"," + ver_new=ver_new[0:-1] + for each in ver_old_nbh_dict[field]: + ver_old+=str(each)+"," + ver_old=ver_old[0:-1] + diffs = dmp.diff_main(ver_new, ver_old) + return diffs + +def get_diff_from_nested_dict(ver_new_nbh_dict,ver_old_nbh_dict,field): + + + return compare +def compare_history(request,ssid): + ssid1=ssid + + version_counter1=request.GET["group1"] + version_no1=get_version_counter(version_counter1) + version_counter2=request.GET["group2"] + version_no2=get_version_counter(version_counter2) + counter2=float(version_counter2) + ssid2=int(counter2) + + ver_obj=Version.objects.get(id=ssid1) + ot=ver_obj.object.ref + pp=pprint.PrettyPrinter(indent=4) + + ver_new_dict=ot.version_info(ssid1) + content=str(ver_new_dict['content']) + content=content[3:-4] + ver_new_dict['content']=content + + ver_old_dict=ot.version_info(ssid2) + content=str(ver_old_dict['content']) + content=content[3:-4] + ver_old_dict['content']=content + + ver_new_nbh=ver_new_dict['nbhood'] + ver_new_nbh_dict=ast.literal_eval(ver_new_nbh) + + ver_old_nbh=ver_old_dict['nbhood'] + ver_old_nbh_dict=ast.literal_eval(ver_old_nbh) + + compare_dict={} + for each in ver_new_nbh_dict: + ver_new="" + ver_old="" + if each=='altnames': + if ver_new_nbh_dict['altnames'] or ver_old_nbh_dict['altnames']: + ver_new+=ver_new_nbh_dict['altnames'] + ver_old+=ver_old_nbh_dict['altnames'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['altnames']=dmp.diff_prettyHtml(diffs) + + + elif each=='title': + if ver_new_nbh_dict['title'] or ver_old_nbh_dict['title']: + ver_new+=ver_new_nbh_dict['title'] + ver_old+=ver_old_nbh_dict['title'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['title']=dmp.diff_prettyHtml(diffs) + elif each =='plural': + if ver_new_nbh_dict['plural'] or ver_old_nbh_dict['plural']: + ver_new+=ver_new_nbh_dict['plural'] + ver_old+=ver_old_nbh_dict['plural'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['plural']=dmp.diff_prettyHtml(diffs) + elif each =='member_of': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['member_of']=dmp.diff_prettyHtml(diffs) + elif each =='leftroles': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['leftroles']=dmp.diff_prettyHtml(diffs) + elif each =='ats': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['ats']=dmp.diff_prettyHtml(diffs) + elif each =='rightroles': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['rightroles']=dmp.diff_prettyHtml(diffs) + elif each =='attributes': + + compare_rel_new={} + compare_rel_old={} + compare={} + for rkey,rvalue in ver_new_nbh_dict[each].items(): + ver_new="" + for relvalue in rvalue: + ver_new+=str(relvalue) + "," + ver_new=ver_new[0:-1] + compare_rel_new[str(rkey)]=ver_new + for rkey,rvalue in ver_old_nbh_dict[each].items(): + ver_old="" + for rv in rvalue: + ver_old+=str(rv) + "," + ver_old=ver_old[0:-1] + compare_rel_old[str(rkey)]=ver_old + if len(compare_rel_new) >= len(compare_rel_old): + for rkey,rvalue in compare_rel_new.items(): + if compare_rel_old.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + + else: + diffs=dmp.diff_main(compare_rel_new[str(rkey)],"") + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + for rkey,rvalue in compare_rel_old.items(): + if compare_rel_new.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + diffs=dmp.diff_main("",compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + compare_dict['attributes']=compare + + elif each =='relations': + ver_new="" + ver_old="" + compare_rel_new={} + compare_rel_old={} + compare={} + for rkey,rvalue in ver_new_nbh_dict[each].items(): + ver_new="" + for relk,relvalue in rvalue.items(): + ver_new+=str(relk) + "," + ver_new=ver_new[0:-1] + compare_rel_new[str(rkey)]=ver_new + for rkey,rvalue in ver_old_nbh_dict[each].items(): + ver_old="" + for relk,relvalue in rvalue.items(): + ver_old+=str(relk) + "," + ver_old=ver_old[0:-1] + compare_rel_old[str(rkey)]=ver_old + if len(compare_rel_new) >= len(compare_rel_old): + for rkey,rvalue in compare_rel_new.items(): + if compare_rel_old.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + + else: + diffs=dmp.diff_main(compare_rel_new[str(rkey)],"") + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + for rkey,rvalue in compare_rel_old.items(): + if compare_rel_new.has_key(rkey): + diffs=dmp.diff_main(compare_rel_new[str(rkey)],compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + else: + diffs=dmp.diff_main("",compare_rel_old[str(rkey)]) + compare[str(rkey)]=dmp.diff_prettyHtml(diffs) + compare_dict['relations']=compare + elif each =='priornodes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['priornodes']=dmp.diff_prettyHtml(diffs) + elif each =='posteriornodes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['posteriornodes']=dmp.diff_prettyHtml(diffs) + elif each =='type_of': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['type_of']=dmp.diff_prettyHtml(diffs) + elif each =='contains_subtypes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['contains_subtypes']=dmp.diff_prettyHtml(diffs) + elif each =='member_of_metatypes': + diffs=get_diff_from_dict(ver_new_nbh_dict,ver_old_nbh_dict,each) + compare_dict['member_of_metatypes']=dmp.diff_prettyHtml(diffs) + + + ver_new="" + ver_old="" + ver_new+=ver_new_dict['content'] + ver_old+=ver_old_dict['content'] + diffs = dmp.diff_main(ver_new, ver_old) + compare_dict['content']=dmp.diff_prettyHtml(diffs) + ver_new_nbh_dict['content']=ver_new_dict['content'] + ver_old_nbh_dict['content']=ver_old_dict['content'] + + + + variables=RequestContext(request,{'nt':ot,'ver_old_dict':ver_old_dict,'ver_new_dict':ver_new_dict,'compare_dict':compare_dict ,'ssid1':ssid1,'ssid2':ssid2,'version_no1':version_no1,'version_no2':version_no2,'ver_new_nbh_dict':ver_new_nbh_dict,'ver_old_nbh_dict':ver_old_nbh_dict}) + template="objectapp/version_diff.html" + return render_to_response(template,variables) + + +def get_merge_dict(ssid1,ssid2,direction): + ver_merge={} + ot=Version.objects.get(id=ssid1) + obj=ot.object.ref + ver_left_dict=obj.version_info(ssid1) + ver_right_dict=obj.version_info(ssid2) + + + + if direction =='right': + # swap left and right + temp_dict={} + temp_dict=ver_left_dict + ver_left_dict=ver_right_dict + ver_right_dict=temp_dict + # swap ssid1 and ssid2 for managing nbhood history + temp=int(ssid1) + ssid1=int(ssid2) + ssid2=temp + ver_left_nbh_dict=ast.literal_eval(ver_left_dict['nbhood']) + ver_right_nbh_dict=ast.literal_eval(ver_right_dict['nbhood']) + # By default value of content is removed + if ver_left_dict['content']=='
': + ver_left_dict['content']='' + if ver_right_dict['content']=='
': + ver_right_dict['content']='' + # Getting merged dictionary + for each in ver_left_dict: + if ver_left_dict[each] and ver_right_dict[each]: + ver_merge[each]=ver_right_dict[each] + elif ver_left_dict[each]: + if not ver_right_dict[each]: + ver_merge[each]=ver_left_dict[each] + elif ver_right_dict[each]: + if not ver_left_dict[each]: + ver_merge[each]=ver_right_dict[each] + elif not ver_left_dict[each]: + if not ver_right_dict[each]: + ver_merge[each]='' + ver_merge_nbh_dict={} + # processing nbhood for merged version + for each in ver_left_nbh_dict: + if isinstance(ver_left_nbh_dict[each],dict): + if ver_left_nbh_dict[each] and ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=dict(ver_left_nbh_dict[each].items()+ver_right_nbh_dict[each].items()) + elif ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_left_nbh_dict[each] + elif ver_right_nbh_dict[each]: + if not ver_left_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if not ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if ver_left_nbh_dict[each] and ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + elif ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_left_nbh_dict[each] + elif ver_right_nbh_dict[each]: + if not ver_left_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + else: + if not ver_left_nbh_dict[each]: + if not ver_right_nbh_dict[each]: + ver_merge_nbh_dict[each]=ver_right_nbh_dict[each] + + # Removing auto generated fields + del(ver_merge['start_publication']) + del(ver_merge['end_publication']) + del(ver_merge['creation_date']) + del(ver_merge['last_update']) + + history_left_list=[] + history_right_list=[] + history_merged_list=[] + + history_left_list=ver_left_nbh_dict['history'] + history_left_list.append(ssid1) + history_right_list=ver_right_nbh_dict['history'] + history_right_list.append(ssid2) + history_merged_list.append(history_left_list) + history_merged_list.append(history_right_list) + ver_merge_nbh_dict['history']=history_merged_list + obj.nbhood = unicode(ver_merge_nbh_dict) + + # setting the objecttypes fields + obj.slug = ver_merge['slug'] + obj.altnames=ver_merge['altnames'] + obj.nodemodel = ver_merge['nodemodel'] + obj.comment_enabled = ver_merge['comment_enabled'] + obj.title = ver_merge['title'] + obj.sites = ver_merge['sites'] + obj.content = ver_merge['content'] + obj.template = ver_merge['template'] + + obj.plural = ver_merge['plural'] + obj.status = ver_merge['status'] + obj.nid_ptr = NID.objects.get(id=ver_merge['nid_ptr']) + obj.nbhood = ver_merge_nbh_dict + # obj.nbh=ver_merge['nbh'] + obj.id = ver_merge['id'] + obj.pingback_enabled = ver_merge['pingback_enabled'] + obj.save_revert_or_merge() + # formatting content field + content=ver_merge['content'] + content=content[3:-4] + ver_merge['content']= content + + return ver_merge + + +def merge_version(request,ssid1,ssid2): + direction="" + ver_merge={} + for each in request.GET: + direction=each + ot=Version.objects.get(id=ssid1) + obj=ot.object.ref + ver_merge=get_merge_dict(ssid1,ssid2,direction) + slist=[] + slist=obj.get_ssid + version_counter=len(slist) + merged_ver_ssid=slist[version_counter-1] + ver_merged_dict=obj.version_info(merged_ver_ssid) + ver_merged_nbh_dict=ast.literal_eval(ver_merged_dict['nbhood']) + ver_merged_nbh_dict['content']=ver_merge['content'] + variables = RequestContext(request,{'ver_nbh_dict':ver_merged_nbh_dict ,'nt':obj,'ssid':merged_ver_ssid,'version_no':version_counter}) + template="objectapp/display.html" + return render_to_response(template,variables) + +def revert(ssid): + ver_revert={} + ot=Version.objects.get(id=ssid) + obj=ot.object.ref + ver_revert=obj.version_info(ssid) + + # Removing auto generated fields + del(ver_revert['start_publication']) + del(ver_revert['end_publication']) + del(ver_revert['creation_date']) + del(ver_revert['last_update']) + + # setting nbhood history + history=[] + ver_revert_nbh_dict=ast.literal_eval(ver_revert['nbhood']) + + history=ver_revert_nbh_dict['history'] + history.append(ssid) + ver_revert_nbh_dict['history']=history + + # setting the revert version fields + obj.slug = ver_revert['slug'] + obj.altnames=ver_revert['altnames'] + + obj.nodemodel = ver_revert['nodemodel'] + + obj.comment_enabled = ver_revert['comment_enabled'] + obj.title = ver_revert['title'] + obj.sites = ver_revert['sites'] + obj.content = ver_revert['content'] + obj.template = ver_revert['template'] + + obj.plural = ver_revert['plural'] + obj.status = ver_revert['status'] + obj.nid_ptr = NID.objects.get(id=ver_revert['nid_ptr']) + obj.nbhood = unicode(ver_revert_nbh_dict) + # obj.nbh=ver_revert['nbh'] + obj.id = ver_revert['id'] + obj.pingback_enabled = ver_revert['pingback_enabled'] + obj.save_revert_or_merge() + # formatting content field + content=ver_revert['content'] + content=content[3:-4] + ver_revert['content']= content + + return ver_revert + +def revert_version(request): + ver_revert={} + for each in request.GET: + ssid=each + ssid=int(ssid) + ot=Version.objects.get(id=ssid) + obj=ot.object.ref + + ver_revert=revert(ssid) + ver_revert['nbhood'] + slist=[] + slist=obj.get_ssid + version_counter=len(slist) + revert_ver_ssid=slist[version_counter-1] + ver_revert_dict=obj.version_info(revert_ver_ssid) + ver_revert_nbh_dict=ast.literal_eval(ver_revert_dict['nbhood']) + ver_revert_nbh_dict['content']=ver_revert['content'] + + variables = RequestContext(request,{'ver_nbh_dict':ver_revert_nbh_dict ,'nt':obj,'ssid':revert_ver_ssid,'version_no':version_counter}) + template="objectapp/display.html" + return render_to_response(template,variables) + # return HttpResponse(ver_revert['nbhood']) + + -- cgit v1.2.3-70-g09d2 From e43d13d7c65fb15f61911a9e0bdec410ace7dc77 Mon Sep 17 00:00:00 2001 From: Arun yadav Date: Wed, 30 May 2012 19:12:48 +0530 Subject: Small error in get_graph_json in models file corrected --- gstudio/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gstudio/models.py') diff --git a/gstudio/models.py b/gstudio/models.py index 905720f6..995ecaf9 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -914,7 +914,7 @@ class Nodetype(Node): this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"expanded":"true"} g_json["node_metadata"].append(this_node) - g_json["relset"].append(self.id) + for key in predicate_id.keys(): if nbh[key]: -- cgit v1.2.3-70-g09d2