diff options
-rw-r--r-- | gstudio/models.py | 1579 | ||||
-rw-r--r-- | setup.py | 2 |
2 files changed, 807 insertions, 774 deletions
diff --git a/gstudio/models.py b/gstudio/models.py index 694c49f4..427b3757 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -15,7 +15,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -# This project incorporates work covered by the following copyright and permission notice: +# This project incorporates work covered by the following copyright and permission notice: # Copyright (c) 2009, Julien Fache # All rights reserved. @@ -151,24 +151,24 @@ DEPTYPE_CHOICES = ( ) FIELD_TYPE_CHOICES = ( - ('1', 'CharField'), - ('2', 'TextField'), - ('3', 'IntegerField'), + ('1', 'CharField'), + ('2', 'TextField'), + ('3', 'IntegerField'), ('4', 'CommaSeparatedIntegerField'), - ('5', 'BigIntegerField'), - ('6', 'PositiveIntegerField'), + ('5', 'BigIntegerField'), + ('6', 'PositiveIntegerField'), ('7', 'DecimalField'), ('8', 'FloatField'), ('9', 'BooleanField'), ('10', 'NullBooleanField'), ('11', 'DateField'), ('12', 'DateTimeField'), - ('13', 'TimeField'), + ('13', 'TimeField'), ('14', 'EmailField'), ('15', 'FileField'), ('16', 'FilePathField'), ('17', 'ImageField'), - ('18', 'URLField'), + ('18', 'URLField'), ('19', 'IPAddressField'), ) @@ -183,14 +183,14 @@ attr_counter = -1 class Author(User): """Proxy Model around User""" - + objects = models.Manager() published = AuthorPublishedManager() def nodetypes_published(self): """Return only the nodetypes published""" return nodetypes_published(self.nodetypes) - + @property def title(self): return self.username @@ -198,7 +198,7 @@ class Author(User): @models.permalink def get_absolute_url(self): """Return author's URL""" - #return "/authors/%s/" %(self.username) + #return "/authors/%s/" %(self.username) return ('gstudio_author_detail', (self.username,)) class Meta: @@ -214,7 +214,7 @@ class NID(models.Model): last_update = models.DateTimeField(_('last update'), default=datetime.now) creation_date = models.DateTimeField(_('creation date'), default=datetime.now) - + slug = models.SlugField(help_text=_('used for publication'), unique_for_date='creation_date', max_length=255) @@ -225,10 +225,10 @@ class NID(models.Model): """ Returns Number of Version """ - i=0 + i=0 ver=Version.objects.get_for_object(self) - for each in ver: - i=i+1 + for each in ver: + i=i+1 return i @property @@ -237,39 +237,39 @@ class NID(models.Model): Returns Version list """ ver=Version.objects.get_for_object(self) - return ver + return ver @property def get_ssid(self): - """ - return snapshot ids (revision id). + """ + return snapshot ids (revision id). returns a list. - """ - slist=[] - vlist=self.get_version_list - for each in vlist: - slist.append(each.id) - return slist + """ + slist=[] + vlist=self.get_version_list + for each in vlist: + slist.append(each.id) + return slist def version_info(self,ssid): - version_object=Version.objects.get(id=ssid) - return version_object.field_dict + version_object=Version.objects.get(id=ssid) + return version_object.field_dict def get_version_nbh(self,ssid): - """ - Returns Version nbh - """ - ver_dict=self.version_info(ssid) - ver_nbh_list=[] - ver_nbh_dict={} - for item in self.get_nbh.keys(): - if item in ver_dict.keys(): - ver_nbh_list.append(item) - for each in ver_nbh_list: - ver_nbh_dict[each]=ver_dict[each] - return ver_nbh_dict - + """ + Returns Version nbh + """ + ver_dict=self.version_info(ssid) + ver_nbh_list=[] + ver_nbh_dict={} + for item in self.get_nbh.keys(): + if item in ver_dict.keys(): + ver_nbh_list.append(item) + for each in ver_nbh_list: + ver_nbh_dict[each]=ver_dict[each] + return ver_nbh_dict + def get_serialized_dict(self): """ return the fields in a serialized form of the current object using the __dict__ function. @@ -296,43 +296,43 @@ class NID(models.Model): def ref(self): from objectapp.models import * return eval(self.nodemodel).objects.get(id=self.id) - - # """ + + # """ # Returns the object reference the id belongs to. # """ # try: - # """ + # """ # ALGO: get object id, go to version model, return for the given id. # """ # # Retrieving only the relevant tupleset for the versioned objects # # vrs = Version.objects.filter(type=0 , object_id=self.id) - # # Returned value is a list, so splice it. - # vrs = vrs[0] + # # Returned value is a list, so splice it. + # vrs = vrs[0] # except: - # return None + # return None # return vrs.object - - + + @property def reftype(self): - """ + """ Returns the type the id belongs to. """ try: - """ - ALGO: simple wrapper for the __class__.__name__ so that it can be used in templates - + """ + ALGO: simple wrapper for the __class__.__name__ so that it can be used in templates + """ # return self.__class__.__name__ obj = self.ref return obj.__class__.__name__ - + except: return None - + @property - def getat(self): + def getat(self): """This is will give the possible attributetypes """ try: @@ -345,12 +345,12 @@ class NID(models.Model): 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] - + for i in attributetype: if str(i.applicable_nodetypes) == 'OT': returndict.update({str(i.title):i.id}) @@ -368,41 +368,41 @@ class NID(models.Model): 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 =[] + pt =[] + reltype =[] titledict = {} inverselist = [] finaldict = {} - listval=[] + 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)) + 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)) + reltype.append(Relationtype.objects.filter(right_subjecttype = pt[i].id)) reltype = [num for elem in reltype for num in elem] #this rqud for filtering for i in reltype: titledict.update({i:i.id}) - - + + 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 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.keys() @@ -410,7 +410,7 @@ class NID(models.Model): @property def get_edit_url(self): return "/admin/" + self._meta.app_label + "/" + self._meta.module_name + "/" + str(self.id) - + def get_serialized_data(self): @@ -422,19 +422,19 @@ class NID(models.Model): version = Version.objects.get(id=self.id) return version.serialized_data - - + + # 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['nbhood']) - + # g_json = {} - # g_json["node_metadata"]= [] + # g_json["node_metadata"]= [] # predicate_id = {} # counter = 1 # for key in ver_dict.keys(): @@ -446,35 +446,35 @@ class NID(models.Model): # 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) + # 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): + # 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 + # # 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(): + # #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: + + # except: # pass # # print g_json - - - # return json.dumps(g_json) + + + # return json.dumps(g_json) def __unicode__(self): @@ -483,11 +483,11 @@ class NID(models.Model): class Meta: """NID's Meta""" - + class Node(NID): """ - Super class + Super class """ altnames = TagField(_('alternate names'), help_text=_('alternate names if any'), blank=True, null=True) @@ -505,16 +505,16 @@ class Node(NID): related_name='nodetypes') 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): return self.title class Meta: abstract=False - - - + + + class Edge(NID): @@ -532,33 +532,33 @@ class Edge(NID): super(Edge, self).save(*args, **kwargs) # Call the "real" save() method. - + class Metatype(Node): """ Metatype object for Nodetype """ - + description = models.TextField(_('description'), blank=True, null=True) parent = models.ForeignKey('self', null=True, blank=True, verbose_name=_('parent metatype'), related_name='children') def nodetypes_published(self): """ - Return only the published nodetypes + Return only the published nodetypes """ return nodetypes_published(self.member_types) @property def get_nbh(self): - """ + """ Returns the neighbourhood of the metatype """ nbh = {} nbh['title'] = self.title - nbh['altnames'] = self.altnames + nbh['altnames'] = self.altnames nbh['plural'] = self.plural - + if self.parent: nbh['typeof'] = self.parent # generate ids and names of children/members @@ -567,7 +567,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) - + return nbh @@ -575,25 +575,25 @@ class Metatype(Node): def get_possible_attributetypes(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the AT's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the AT's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # recursive thru parent field and append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. - attrtypes = [] - + attrtypes = [] + for each in ancestor_list: - # retrieve all the AT's from each ancestor + # retrieve all the AT's from each ancestor attrtypes.extend(Attributetype.objects.filter(subjecttype=each.id)) - + return attrtypes @@ -601,32 +601,32 @@ class Metatype(Node): def get_possible_rels(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the R's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the R's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. rels = {} rt_set = Relation.objects.all() right_subset = [] left_subset = [] - + for each in ancestor_list: - # retrieve all the RT's from each ancestor + # retrieve all the RT's from each ancestor right_subset.extend(rt_set.filter(subject1=each.id)) left_subset.extend(rt_set.filter(subject2=each.id)) - + rels['possible_leftroles'] = left_subset rels['possible_rightroles'] = right_subset - + return rels @@ -635,25 +635,25 @@ class Metatype(Node): def get_possible_attributes(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the RT's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the RT's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # recursive thru parent field and append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. - attrs = [] - + attrs = [] + for each in ancestor_list: - # retrieve all the AT's from each ancestor + # retrieve all the AT's from each ancestor attrs.extend(Attribute.objects.filter(subject=each.id)) - + return attrs @property @@ -664,23 +664,23 @@ class Metatype(Node): 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) + 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) + history.append(0) nbh = {} history_list=self.get_ssid nbh['title'] = self.title nbh['altnames'] = self.altnames nbh['plural'] = self.plural - + if self.parent: - obj=NID.objects.get(id=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 @@ -692,11 +692,11 @@ 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 + nbh['history']=history return nbh - + @property def tree_path(self): """Return metatype's tree path, by its ancestors""" @@ -713,7 +713,7 @@ class Metatype(Node): if self.parent: 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 def get_absolute_url(self): @@ -730,12 +730,12 @@ class Metatype(Node): # Save for metatype def save(self, *args, **kwargs): - super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. - self.nbhood=self.get_rendered_nbh + super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. + self.nbhood=self.get_rendered_nbh if GSTUDIO_VERSIONING: with reversion.create_revision(): - super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. + super(Metatype, self).save(*args, **kwargs) # Call the "real" save() method. @@ -779,7 +779,7 @@ class Nodetype(Node): related_name='member_types', blank=True, null=True) - + authors = models.ManyToManyField(User, verbose_name=_('authors'), related_name='nodetypes', @@ -809,140 +809,140 @@ class Nodetype(Node): def get_possible_reltypes(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the RT's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the RT's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. reltypes = {} rt_set = Relationtype.objects.all() right_subset = [] left_subset = [] - + for each in ancestor_list: - # retrieve all the RT's from each ancestor + # retrieve all the RT's from each ancestor right_subset.extend(rt_set.filter(subjecttypeLeft=each.id)) left_subset.extend(rt_set.filter(subjecttypeRight=each.id)) - + reltypes['possible_leftroles'] = left_subset reltypes['possible_rightroles'] = right_subset - + return reltypes - + @property def get_edit_url_for_ats(self): ''' - Get all the attributes from get_rendered_nbh and return their URLs + Get all the attributes from get_rendered_nbh and return their URLs ''' - retdict={} - for key,value in self.get_rendered_nbh.items(): - if key: - if key=='attributes': - for akey,avalue in value.items(): - ats=Attributetype.objects.filter(title=akey) - if ats: - ats=Attributetype.objects.get(title=akey) - for atrbs in Attribute.objects.all(): - if atrbs.attributetype_id==ats.id: - gid=NID.objects.get(id=atrbs.id).ref.get_edit_url - retdict[gid]=atrbs.svalue - - return retdict + retdict={} + for key,value in self.get_rendered_nbh.items(): + if key: + if key=='attributes': + for akey,avalue in value.items(): + ats=Attributetype.objects.filter(title=akey) + if ats: + ats=Attributetype.objects.get(title=akey) + for atrbs in Attribute.objects.all(): + if atrbs.attributetype_id==ats.id: + gid=NID.objects.get(id=atrbs.id).ref.get_edit_url + retdict[gid]=atrbs.svalue + + return retdict @property def get_at_url_add(self): """ Gets all the ATs(excluding those for which the Attributes are already added) with their urls for adding attributes Get all ATs of NT. Get the attribute-model-name from its 'dataType'. Check whether entry exists in Attribute table for this AT. - Else return it along with its admin-add-form-url. + Else return it along with its admin-add-form-url. """ retats={} ats=self.subjecttype_of.all() if ats: for each in ats: - - if each.applicable_nodetypes=='OT': - atdatatype=each.dataType - if atdatatype=='1': - model= 'CharField' - if atdatatype=='2': - model='TextField' - if atdatatype=='3': - model='IntegerField' - if atdatatype=='4': - model='CommaSeparatedIntegerField' - if atdatatype=='5': - model='BigIntegerField' - if atdatatype=='6': - model='PositiveIntegerField' - if atdatatype=='7': - model='DecimalField' - if atdatatype=='8': - model='FloatField' - if atdatatype=='9': - model='BooleanField' - if atdatatype=='10': - model='NullBooleanField' - if atdatatype=='11': - model='DateField' - if atdatatype=='12': - model='DateTimeField' - if atdatatype=='13': - model='TimeField' - if atdatatype=='14': - model= 'EmailField' - if atdatatype=='15': - model='FileField' - if atdatatype=='16': - model='FilePathField' - if atdatatype=='17': - model='ImageField' - if atdatatype=='18': - model='URLField' - if atdatatype=='19': - model='IPAddressField' - aturl="admin/gstudio/attribute"+model.lower()+"/add/?attributetype="+str(each.id)+"&subject="+str(self.id) - atsubject=self.subject_of.all() - fl=0 - for eachs in atsubject: - if eachs.attributetype_id==each.id and eachs.subject_id==each.subjecttype.id: - fl=1 - if fl==0: - retats[each.title]=aturl - + + if each.applicable_nodetypes=='OT': + atdatatype=each.dataType + if atdatatype=='1': + model= 'CharField' + if atdatatype=='2': + model='TextField' + if atdatatype=='3': + model='IntegerField' + if atdatatype=='4': + model='CommaSeparatedIntegerField' + if atdatatype=='5': + model='BigIntegerField' + if atdatatype=='6': + model='PositiveIntegerField' + if atdatatype=='7': + model='DecimalField' + if atdatatype=='8': + model='FloatField' + if atdatatype=='9': + model='BooleanField' + if atdatatype=='10': + model='NullBooleanField' + if atdatatype=='11': + model='DateField' + if atdatatype=='12': + model='DateTimeField' + if atdatatype=='13': + model='TimeField' + if atdatatype=='14': + model= 'EmailField' + if atdatatype=='15': + model='FileField' + if atdatatype=='16': + model='FilePathField' + if atdatatype=='17': + model='ImageField' + if atdatatype=='18': + model='URLField' + if atdatatype=='19': + model='IPAddressField' + aturl="admin/gstudio/attribute"+model.lower()+"/add/?attributetype="+str(each.id)+"&subject="+str(self.id) + atsubject=self.subject_of.all() + fl=0 + for eachs in atsubject: + if eachs.attributetype_id==each.id and eachs.subject_id==each.subjecttype.id: + fl=1 + if fl==0: + retats[each.title]=aturl + return retats - + @property def get_possible_attributetypes(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the AT's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the AT's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # recursive thru parent field and append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. - attrtypes = [] - + attrtypes = [] + for each in ancestor_list: - # retrieve all the AT's from each ancestor + # retrieve all the AT's from each ancestor attrtypes.extend(Attributetype.objects.filter(subjecttype=each.id)) - + return attrtypes @@ -950,98 +950,111 @@ class Nodetype(Node): def get_possible_rels(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the R's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the R's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. rels = {} rt_set = Relation.objects.all() right_subset = [] left_subset = [] - + for each in ancestor_list: - # retrieve all the RT's from each ancestor + # retrieve all the RT's from each ancestor right_subset.extend(rt_set.filter(subject1=each.id)) left_subset.extend(rt_set.filter(subject2=each.id)) - + rels['possible_leftroles'] = left_subset rels['possible_rightroles'] = right_subset - + return rels - - + + def get_graph_json(self): - g_json = {} + + g_json = {} g_json["node_metadata"]= [] g_json["relations"]=[] global counter - global attr_counter + global attr_counter nbh = self.get_nbh predicate_id = {} - + for key in nbh.keys(): - val = str(counter) + "a" + val = str(counter) + "b" predicate_id[key] = val - counter = counter + 1 + counter = counter + 1 + #print predicate_id - this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype} - g_json["node_metadata"].append(this_node) + + this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype} + g_json["node_metadata"].append(this_node) + for key in predicate_id.keys(): if nbh[key]: - try: - g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) - g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] }) - - if not isinstance(nbh[key],basestring) and len(nbh[key])<=2: + try: - for item in nbh[key]: - if item.reftype=="Relationtype": - if item.left_subjecttype.id==self.id: - flag=1 - elif item.right_subjecttype.id==self.id: - flag=0 - # create nodes - - - g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"refType":item.reftype,"inverse":item.inverse,"flag":flag}) - - - g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"refType":item.reftype}) - #create links - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) + g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) + + g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] }) - + if not isinstance(nbh[key],basestring) and len(nbh[key])<=2: + for item in nbh[key]: + if isinstance(item,unicode): + g_json["node_metadata"].append({"_id":(str(attr_counter)+"b"),"screen_name":str(item)}) + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"b") }) + attr_counter-=1 + + elif item.reftype!="Relation": + # create nodes + g_json["node_metadata"].append({"_id":str(item.id),"screen_name":item.title,"title":self.title, "url":item.get_absolute_url(),"refType":item.reftype}) + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id }) + else: - if not isinstance(nbh[key],basestring): - g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":str(len(nbh[key]))}) - #g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")}) - else: - g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":nbh[key]}) - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")}) + + if item.left_subject.id==self.id: + item1=item.right_subject + flag=1 + + elif item.right_subject.id==self.id: + item1=item.left_subject + flag=0 + + g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"refType":item.reftype,"inverse":item.relationtype.inverse,"flag":flag}) + + + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id }) + else: + if not isinstance(nbh[key],basestring): + g_json["node_metadata"].append({"_id":(str(attr_counter))+"a","screen_name":str(len(nbh[key]))+" nodes...","title":str(key),"url":"/nodetypes/graphs/graph_label/"+str(self.id)+"/"+str(key)}) + #g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter))}) + else: + g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":nbh[key]}) + + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")}) - attr_counter-=1 - - except: - pass - - + attr_counter-=1 - return json.dumps(g_json) + except: + pass + + #print g_json + return json.dumps(g_json) def get_label(self,key): @@ -1057,29 +1070,29 @@ class Nodetype(Node): def get_possible_attributes(self): """ Gets the relations possible for this metatype - 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. - 2. Get all the RT's linked to each ancestor + 1. Recursively create a set of all the ancestors i.e. parent/subtypes of the MT. + 2. Get all the RT's linked to each ancestor """ - #Step 1. + #Step 1. ancestor_list = [] this_parent = self.parent - + # recursive thru parent field and append while this_parent: ancestor_list.append(this_parent) this_parent = this_parent.parent - + #Step 2. - attrs = [] - + attrs = [] + for each in ancestor_list: - # retrieve all the AT's from each ancestor + # retrieve all the AT's from each ancestor attrs.extend(Attribute.objects.filter(subject=each.id)) - + return attrs - + @property def tree_path(self): @@ -1110,25 +1123,44 @@ class Nodetype(Node): return self.content @property def get_relations(self): - """ - Returns all the relations of the nodetype - """ - relations={} + relation_set = {} + # ALGO to find the relations and their left-subjecttypes and right_subjecttypes + # 1. Get the relations containing a reference to the object. Retrieve where it occurs (left or right) + # 2. Find out which RT they come from. + # 3. For each RT, create a dict key and a value as a dict. And add the relation as a new key-value pair (rid:subject). + # 4. If self is in right value, then add inverse relation as RT and add the relation as a new key-value pair (rid:subject). + + left_relset = Relation.objects.filter(left_subject=self.id) + right_relset = Relation.objects.filter(right_subject=self.id) - left_relations=Relation.objects.filter(left_subject=self.id) - if left_relations: - for each in left_relations: - relation=each.relationtype.title - predicate=each.right_subject - relations[relation]=predicate + #return left_relset + right_relset + + # RT dictionary to store a single relation + rel_dict ={} + rel_dict['left-subjecttypes'] = {} + rel_dict['right_subjecttypes'] ={} + + + for relation in left_relset: + # check if relation already exists + if relation.relationtype.title not in rel_dict['left-subjecttypes'].keys(): + # create a new list field and add to it + rel_dict['left-subjecttypes'][str(relation.relationtype.title)] = [] + # add + rel_dict['left-subjecttypes'][str(relation.relationtype.title)].append(relation) + + for relation in right_relset: + # check if relation exists + if relation.relationtype.inverse not in rel_dict['right_subjecttypes'].keys(): + # create a new list key field and add to it + rel_dict['right_subjecttypes'][str(relation.relationtype.inverse)] = [] + # add to the existing key + rel_dict['right_subjecttypes'][str(relation.relationtype.inverse)].append(relation) + + relation_set.update(rel_dict['left-subjecttypes']) + relation_set.update(rel_dict['right_subjecttypes']) - right_relations=Relation.objects.filter(right_subject=self.id) - if right_relations: - for each in right_relations: - relation=each.relationtype.inverse - predicate=each.left_subject - relations[relation]=predicate - return relations + return relation_set @property def get_rendered_relations(self): @@ -1139,59 +1171,59 @@ class Nodetype(Node): reltype={} left_relations=Relation.objects.filter(left_subject=self.id) if left_relations: - for each in left_relations: - relation=each.relationtype.title - predicate=each.right_subject - predicate_values=[] + for each in left_relations: + relation=each.relationtype.title + predicate=each.right_subject + predicate_values=[] if reltype: - fl=0 - for key,value in reltype.items(): - if type(value) <> list: - t=[] - t.append(value) - predicate_values=t - else: - predicate_values=value - if each.relationtype.title==key: - fl=1 - predicate_values.append(predicate) - reltype[key]=predicate_values - if fl==0: - predicate_values=predicate - reltype[relation]=predicate_values + fl=0 + for key,value in reltype.items(): + if type(value) <> list: + t=[] + t.append(value) + predicate_values=t + else: + predicate_values=value + if each.relationtype.title==key: + fl=1 + predicate_values.append(predicate) + reltype[key]=predicate_values + if fl==0: + predicate_values=predicate + reltype[relation]=predicate_values else: predicate_values.append(predicate) reltype[relation]=predicate_values relations['lrelations']=reltype - + right_relations=Relation.objects.filter(right_subject=self.id) reltype={} if right_relations: - for each in right_relations: - relation=each.relationtype.inverse - predicate=each.left_subject + for each in right_relations: + relation=each.relationtype.inverse + predicate=each.left_subject predicate_values=[] if reltype: - fl=0 - for key,value in reltype.items(): - if type(value) <> list: - t=[] - t.append(value) - prdicate_values=t - else: - predicate_values=value - if each.relationtype.inverse==key: - fl=1 - predicate_values.append(predicate) - reltype[key]=predicate_values - - if fl==0: - predicate_values=predicate - reltype[relation]=predicate_values - + fl=0 + for key,value in reltype.items(): + if type(value) <> list: + t=[] + t.append(value) + prdicate_values=t + else: + predicate_values=value + if each.relationtype.inverse==key: + fl=1 + predicate_values.append(predicate) + reltype[key]=predicate_values + + if fl==0: + predicate_values=predicate + reltype[relation]=predicate_values + else: - predicate_values.append(predicate) - reltype[relation]=predicate_values + predicate_values.append(predicate) + reltype[relation]=predicate_values relations['rrelations']=reltype return relations @@ -1201,104 +1233,104 @@ class Nodetype(Node): attributes_dict = {} all_attributes=self.subject_of.all() for attributes in all_attributes: - val=[] - atr_key=attributes.attributetype.title - val.append(attributes.svalue) - - if attributes_dict: - fl=0 - itms=attributes_dict - - for key,value in itms.items(): - if atr_key in key: - fl=1 - if type(value) <> list: - t=[] - t.append(value) - val.extend(t) - - else: - val.extend(value) - attributes_dict[atr_key]=val + val=[] + atr_key=attributes.attributetype.title + val.append(attributes.svalue) + + if attributes_dict: + fl=0 + itms=attributes_dict + + for key,value in itms.items(): + if atr_key in key: + fl=1 + if type(value) <> list: + t=[] + t.append(value) + val.extend(t) + + else: + val.extend(value) + attributes_dict[atr_key]=val return attributes_dict - + # def history(self,ssid): - #ver + #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) + 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) + history.append(0) nbh = {} nbh['title'] = self.title - nbh['count_title'] = len(nbh['title']) + nbh['count_title'] = len(nbh['title']) nbh['altnames'] = self.altnames - nbh['count_altnames'] = len(nbh['altnames']) + nbh['count_altnames'] = len(nbh['altnames']) nbh['plural'] = self.plural try: - nbh['count_plural'] = len(nbh['plural']) + nbh['count_plural'] = len(nbh['plural']) except: pass - #get all MTs + #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']) + nbh['count_member_of_metatypes'] = len(nbh['member_of_metatypes']) typeof={} parent=self.parent_id if parent: typeof[parent] = parent.get_absolute_url() nbh['type_of']=typeof - nbh['count_type_of'] = len(nbh['type_of']) - #get all subtypes + 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 + 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() + contains_members_dict[each.title]= each.get_absolute_url() nbh['contains_members'] = contains_members_dict - nbh['count_contains_members'] = len(nbh['contains_members']) + 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() + priornodes_dict[each.title]= each.get_absolute_url() nbh['priornodes'] = priornodes_dict - nbh['count_priornodes'] = len(nbh['priornodes']) + 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() + posteriornodes_dict[each.title]= each.get_absolute_url() nbh['posteriornodes'] = posteriornodes_dict - nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) #get authors author_dict = {} for each in self.authors.all(): - author_dict['User'] = each.get_absolute_url() + 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']) + nbh['count_siblings'] = len(nbh['siblings']) #get Relations relns={} rellft={} @@ -1315,50 +1347,50 @@ class Nodetype(Node): 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() + for items in lftvalue: + relnvalue[items.title]=items.get_absolute_url() else: - relnvalue[lftvalue]=lftvalue.get_absolute_url() - + relnvalue[lftvalue]=lftvalue.get_absolute_url() + rellft[lftkey]=relnvalue - + nbh['relations']=relrgt - + nbh['relations'].update(rellft) - nbh['count_relations'] = len(nbh['relations']) + nbh['count_relations'] = len(nbh['relations']) #get Attributes attributes =self.get_attributes nbh['attributes']=attributes - nbh['count_attributes'] = len(nbh['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 = {} + 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 = {} + 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 + nbh['count_rightroles'] = len(nbh['rightroles']) + nbh['history']=history return nbh - - + + @property def previous_nodetype(self): """Return the previous nodetype""" @@ -1437,13 +1469,13 @@ class Nodetype(Node): @property def memberof_sentence(self): """Return the metatype of which the nodetype is a member of""" - + if self.metatypes.count: for each in self.metatypes.all(): 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." @@ -1456,7 +1488,7 @@ class Nodetype(Node): "retuns the parent nodetype." if self.parent: return u'%s' % (self.parent.tree_path) - return None + return None @models.permalink def get_absolute_url(self): @@ -1467,8 +1499,8 @@ class Nodetype(Node): 'day': self.creation_date.strftime('%d'), 'slug': self.slug}) def get_version_url(self): - """Return nodetype's URL""" - return "/nodetypes/display/viewhistory/" + """Return nodetype's URL""" + return "/nodetypes/display/viewhistory/" def get_serialized_data(self): """ @@ -1486,7 +1518,7 @@ class Nodetype(Node): verbose_name_plural = _('node types') permissions = (('can_view_all', 'Can view all'), ('can_change_author', 'Can change author'), ) - + class Objecttype(Nodetype): ''' Object class @@ -1494,17 +1526,17 @@ class Objecttype(Nodetype): def __unicode__(self): return self.title - - + + @property - def get_attributetypes(self): + def get_attributetypes(self): return self.subjecttype_of.all() @property def get_relationtypes(self): - - left_relset = self.left_subjecttype_of.all() - right_relset = self.right_subjecttype_of.all() + + left_relset = self.left_subjecttype_of.all() + right_relset = self.right_subjecttype_of.all() reltypes = {} reltypes['left_subjecttype_of']=left_relset @@ -1517,9 +1549,9 @@ class Objecttype(Nodetype): for which relation types does this object become a domain of any relation type """ reltypes = [] - left_relset = self.left_subjecttype_of.all() + left_relset = self.left_subjecttype_of.all() for relationtype in left_relset: - reltypes.append(relationtype) + reltypes.append(relationtype) return reltypes @property @@ -1528,9 +1560,9 @@ class Objecttype(Nodetype): for which relation types does this object become a domain of any relation type """ reltypes = [] - right_relset = self.right_subjecttype_of.all() + right_relset = self.right_subjecttype_of.all() for relationtype in right_relset: - reltypes.append(relationtype) + reltypes.append(relationtype) return reltypes @property @@ -1539,11 +1571,11 @@ class Objecttype(Nodetype): for which relation types does this object become a domain of any relation type """ subjecttypes = [] - attrset = self.subjecttype_of.all() + attrset = self.subjecttype_of.all() for subjecttype in attrset: - subjecttypes.append(subjecttype) + subjecttypes.append(subjecttype) return subjecttypes - + @property def member_of_metatypes(self): @@ -1552,8 +1584,8 @@ class Objecttype(Nodetype): """ types = [] if self.metatypes.all(): - for metatype in self.metatypes.all(): - types.append(metatype.title) + for metatype in self.metatypes.all(): + types.append(metatype.title) return types @@ -1564,68 +1596,70 @@ class Objecttype(Nodetype): """ members = [] if self.member_objects.all(): - for gbobject in self.member_objects.all(): - members.append(gbobject) - return members + for gbobject in self.member_objects.all(): + members.append(gbobject) + return members @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['plural'] = self.plural nbh['member_of_metatype'] = self.metatypes.all() # get all the ATs for the objecttype - nbh['subjecttype_of']= self.subjecttype_of.all() - # get all the RTs for the objecttype - nbh.update(self.get_relationtypes) + nbh['subjecttype_of']= self.subjecttype_of.all() + # get all the RTs for the objecttype + nbh.update(self.get_relationtypes) + # Looks like somebody forgot relations ! + nbh.update(self.get_relations) if self.parent: nbh['type_of'] = [self.parent] nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id) - # get all the objects inheriting this OT + # get all the objects inheriting this OT nbh['contains_members'] = self.member_objects.all() - nbh['prior_nodes'] = self.prior_nodes.all() + nbh['prior_nodes'] = self.prior_nodes.all() - nbh['posterior_nodes'] = self.posterior_nodes.all() + nbh['posterior_nodes'] = self.posterior_nodes.all() - #nbh['authors'] = self.authors.all() + #nbh['authors'] = self.authors.all() - return nbh + return nbh @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) + 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) + history.append(0) nbh = {} nbh['title'] = self.title - nbh['count_title'] = len(nbh['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 + 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']) + nbh['count_member_of_metatypes'] = len(nbh['member_of_metatypes']) typeof={} parentid=self.parent_id if parentid: @@ -1633,42 +1667,42 @@ class Objecttype(Nodetype): if parent: typeof[parent] = parent.get_absolute_url() nbh['type_of']=typeof - nbh['count_type_of'] = len(nbh['type_of']) - #get all subtypes + 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 + 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() + contains_members_dict[each.title]= each.get_absolute_url() nbh['contains_members'] = contains_members_dict - nbh['count_contains_members'] = len(nbh['contains_members']) + 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() + priornodes_dict[each.title]= each.get_absolute_url() nbh['priornodes'] = priornodes_dict - nbh['count_priornodes'] = len(nbh['priornodes']) + 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() + posteriornodes_dict[each.title]= each.get_absolute_url() nbh['posteriornodes'] = posteriornodes_dict - nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) #get authors author_dict = {} for each in self.authors.all(): - author_dict['User'] = each.get_absolute_url() + 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']) + nbh['count_siblings'] = len(nbh['siblings']) #get Relations relns={} rellft={} @@ -1685,103 +1719,103 @@ class Objecttype(Nodetype): 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() + for items in lftvalue: + relnvalue[items.title]=items.get_absolute_url() else: - relnvalue[lftvalue]=lftvalue.get_absolute_url() - + relnvalue[lftvalue]=lftvalue.get_absolute_url() + rellft[lftkey]=relnvalue - + nbh['relations']=relrgt - + nbh['relations'].update(rellft) - nbh['count_relations'] = len(nbh['relations']) + nbh['count_relations'] = len(nbh['relations']) #get Attributes attributes =self.get_attributes nbh['attributes']=attributes - nbh['count_attributes'] = len(nbh['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 = {} + 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 = {} + 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 + 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=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"]= [] - g_json["relations"]=[] - predicate_id = {} - counter=1 - attr_counter=-1 - for key in ver_dict.keys(): - val = "a" + str(counter) - predicate_id[key] = val - counter = counter + 1 - #print predicate_id - - - this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype} - g_json["node_metadata"].append(this_node) - - - for key in predicate_id.keys(): - if (ver_dict[key] and (ver_dict[key])!=0 and not(isinstance(ver_dict[key],int ) ) + ver_dict=ast.literal_eval(ver_dict['nbhood']) + g_json = {} + g_json["node_metadata"]= [] + g_json["relations"]=[] + predicate_id = {} + counter=1 + attr_counter=-1 + for key in ver_dict.keys(): + val = "a" + str(counter) + predicate_id[key] = val + counter = counter + 1 + #print predicate_id + + + this_node = {"_id":str(self.id),"title":self.title,"screen_name":self.title, "url":self.get_absolute_url(),"refType":self.reftype} + g_json["node_metadata"].append(this_node) + + + for key in predicate_id.keys(): + if (ver_dict[key] and (ver_dict[key])!=0 and not(isinstance(ver_dict[key],int ) ) ) : - try: - g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) - g_json["relations"].append({"from":self.id , "to":predicate_id[key],"value":1, "type":str(key) }) - if not isinstance(ver_dict[key],basestring): - for item in ver_dict[key]: - # user - g_json["node_metadata"].append({"_id":(str(attr_counter)+"aa"),"screen_name":item }) - #create links - g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":(str(attr_counter)+"aa") }) - attr_counter-=1 - - else: - g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":ver_dict[key]}) - g_json["relations"].append({"from":predicate_id[key] , "to":(str(attr_counter)+"a") ,"value":1, "type":str(key) }) - attr_counter-=1 - - except: - pass + try: + g_json["node_metadata"].append({"_id":str(predicate_id[key]),"screen_name":key}) + g_json["relations"].append({"from":self.id , "to":predicate_id[key],"value":1, "type":str(key) }) + if not isinstance(ver_dict[key],basestring): + for item in ver_dict[key]: + # user + g_json["node_metadata"].append({"_id":(str(attr_counter)+"aa"),"screen_name":item }) + #create links + g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":(str(attr_counter)+"aa") }) + attr_counter-=1 + + else: + g_json["node_metadata"].append({"_id":(str(attr_counter)+"a"),"screen_name":ver_dict[key]}) + g_json["relations"].append({"from":predicate_id[key] , "to":(str(attr_counter)+"a") ,"value":1, "type":str(key) }) + attr_counter-=1 + + except: + pass # print g_json - - - return json.dumps(g_json) - - + + + return json.dumps(g_json) + + class Meta: """ object type's meta class @@ -1795,16 +1829,16 @@ class Objecttype(Nodetype): # @reversion.create_revision() def save(self,*args, **kwargs): self.nodemodel = self.__class__.__name__ - super(Objecttype, self).save(*args, **kwargs) # Call the "real" save() method. + super(Objecttype, 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__ - if self.parent: - ot=NID.objects.get(id=self.parent.id) - ot.ref.save() + 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(): @@ -1817,11 +1851,11 @@ class Relationtype(Nodetype): ''' Properties with left and right subjects (Binary relations) are defined in this class. ''' - inverse = models.CharField(_('inverse name'), help_text=_('when subjecttypes are interchanged, what should be the name of the relation type? This is mandatory field. If the relation is symmetric, same name will do.'), max_length=255,db_index=True ) - left_subjecttype = models.ForeignKey(NID,related_name="left_subjecttype_of", verbose_name='left role') + inverse = models.CharField(_('inverse name'), help_text=_('when subjecttypes are interchanged, what should be the name of the relation type? This is mandatory field. If the relation is symmetric, same name will do.'), max_length=255,db_index=True ) + left_subjecttype = models.ForeignKey(NID,related_name="left_subjecttype_of", verbose_name='left role') left_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for left role') left_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the left role') - right_subjecttype = models.ForeignKey(NID,related_name="right_subjecttype_of", verbose_name='right role') + right_subjecttype = models.ForeignKey(NID,related_name="right_subjecttype_of", verbose_name='right role') right_applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='Applicable node types for right role') right_cardinality = models.IntegerField(null=True, blank=True, verbose_name='cardinality for the right role') is_symmetrical = models.NullBooleanField(verbose_name='Is symmetrical?') @@ -1845,76 +1879,76 @@ class Relationtype(Nodetype): @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) + 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) + history.append(0) nbh = {} nbh['title'] = self.title - nbh['count_title'] = len(nbh['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 + 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']) + 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 + 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 + 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() + contains_members_dict[each.title]= each.get_absolute_url() nbh['contains_members'] = contains_members_dict - nbh['count_contains_members'] = len(nbh['contains_members']) + 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() + priornodes_dict[each.title]= each.get_absolute_url() nbh['priornodes'] = priornodes_dict - nbh['count_priornodes'] = len(nbh['priornodes']) + 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() + posteriornodes_dict[each.title]= each.get_absolute_url() nbh['posteriornodes'] = posteriornodes_dict - nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) #get authors author_dict = {} for each in self.authors.all(): - author_dict['User'] = each.get_absolute_url() + 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']) + nbh['count_siblings'] = len(nbh['siblings']) #get Relations relns={} rellft={} @@ -1931,64 +1965,64 @@ class Relationtype(Nodetype): 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() + for items in lftvalue: + relnvalue[items]=items.get_absolute_url() else: - relnvalue[lftvalue]=lftvalue.get_absolute_url() - + relnvalue[lftvalue]=lftvalue.get_absolute_url() + rellft[lftkey]=relnvalue - + nbh['relations']=relrgt - + nbh['relations'].update(rellft) - nbh['count_relations'] = len(nbh['relations']) + nbh['count_relations'] = len(nbh['relations']) #get Attributes attributes =self.get_attributes nbh['attributes']=attributes - nbh['count_attributes'] = len(nbh['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 = {} + 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 = {} + 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 + nbh['count_rightroles'] = len(nbh['rightroles']) + nbh['history']=history return nbh - - + + def get_nbh(self): - """ + """ Returns the neighbourhood of the nodetype """ nbh = {} nbh['title'] = self.title nbh['altnames'] = self.altnames - nbh['plural'] = self.plural + nbh['plural'] = self.plural nbh['contains_subtypes'] = Nodetype.objects.filter(parent=self.id) nbh['contains_members'] = self.member_objects.all() - nbh['prior_nodes'] = self.prior_nodes.all() - nbh['posterior_nodes'] = self.posterior_nodes.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 @@ -1999,10 +2033,10 @@ class Relationtype(Nodetype): nbh['is_symmetrical']=self.is_symmetrical nbh['is_reflexive']=self.is_reflexive nbh['is_transitive']=self.is_transitive - - return nbh + + return nbh @@ -2019,12 +2053,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 + 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. @@ -2032,19 +2066,19 @@ class Attributetype(Nodetype): ''' To define attributes of objects. First three fields are mandatory. The rest of the fields may be required depending on what type of - field is selected for datatype. + field is selected for datatype. ''' - subjecttype = models.ForeignKey(NID, related_name="subjecttype_of", verbose_name='subject type name') - applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='applicable nodetypes') - dataType = models.CharField(max_length=2, choices=FIELD_TYPE_CHOICES,default='01', verbose_name='data type of value') - + subjecttype = models.ForeignKey(NID, related_name="subjecttype_of", verbose_name='subject type name') + applicable_nodetypes = models.CharField(max_length=2,choices=NODETYPE_CHOICES,default='OT', verbose_name='applicable nodetypes') + dataType = models.CharField(max_length=2, choices=FIELD_TYPE_CHOICES,default='01', verbose_name='data type of value') + verbose_name = models.CharField(max_length=500, null=True, blank=True, verbose_name='verbosename', help_text='verbose name') null = models.NullBooleanField(verbose_name='Null', help_text='can the value be null?') blank = models.NullBooleanField(verbose_name='Blank', help_text='can the form be left blank?') help_text = models.CharField(max_length=500, null=True, blank=True, verbose_name='Help text', help_text='help text for the field') max_digits = models.IntegerField(max_length=5, null=True, blank=True, verbose_name='Max digit', help_text='If you have selected Decimal Field for datatype, you have to specify the number of digits.') decimal_places = models.IntegerField(max_length=2, null=True, blank=True, verbose_name='Decimal places', help_text='If you have selected Decimal Field for datatype, you have to specify the decimal places.') - auto_now = models.NullBooleanField(verbose_name='Auto now', null=True, blank=True, help_text='Use this if DateTime & Time Field was chosen above for datatype') + auto_now = models.NullBooleanField(verbose_name='Auto now', null=True, blank=True, help_text='Use this if DateTime & Time Field was chosen above for datatype') auto_now_add = models.NullBooleanField(verbose_name='Auto now add', null=True, blank=True, help_text='Use this if DateTime & Time Field was chosen above for datatype') upload_to = models.CharField(max_length=500,verbose_name='Upload to', null=True, blank=True, help_text='Required for FileField and ImageField') path=models.CharField(max_length=500,verbose_name='Path', null=True, blank=True, help_text='Required for FilePathField') @@ -2056,81 +2090,81 @@ class Attributetype(Nodetype): validators=models.ManyToManyField('self', verbose_name='validators',blank=True, null=True,help_text='A list of validators to run for this field') default=models.CharField(max_length=500, null=True, blank=True, verbose_name='default', help_text='The default value for the field') 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) + 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) + history.append(0) nbh = {} nbh['title'] = self.title - nbh['count_title'] = len(nbh['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 + 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']) + 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 + 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 + 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() + contains_members_dict[each.title]= each.get_absolute_url() nbh['contains_members'] = contains_members_dict - nbh['count_contains_members'] = len(nbh['contains_members']) + 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() + priornodes_dict[each.title]= each.get_absolute_url() nbh['priornodes'] = priornodes_dict - nbh['count_priornodes'] = len(nbh['priornodes']) + 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() + posteriornodes_dict[each.title]= each.get_absolute_url() nbh['posteriornodes'] = posteriornodes_dict - nbh['count_posteriornodes'] = len(nbh['posteriornodes']) + nbh['count_posteriornodes'] = len(nbh['posteriornodes']) #get authors author_dict = {} for each in self.authors.all(): - author_dict['User'] = each.get_absolute_url() + 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']) + nbh['count_siblings'] = len(nbh['siblings']) #get Relations relns={} rellft={} @@ -2147,51 +2181,51 @@ class Attributetype(Nodetype): 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() + for items in lftvalue: + relnvalue[items]=items.get_absolute_url() else: - relnvalue[lftvalue]=lftvalue.get_absolute_url() - + relnvalue[lftvalue]=lftvalue.get_absolute_url() + rellft[lftkey]=relnvalue - + nbh['relations']=relrgt - + nbh['relations'].update(rellft) - nbh['count_relations'] = len(nbh['relations']) + nbh['count_relations'] = len(nbh['relations']) #get Attributes attributes =self.get_attributes nbh['attributes']=attributes - nbh['count_attributes'] = len(nbh['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 = {} + 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 = {} + 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['count_rightroles'] = len(nbh['rightroles']) nbh['history']=history - + return nbh - - + + def __unicode__(self): return self.title @@ -2215,9 +2249,9 @@ class Attributetype(Nodetype): def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ - super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. - self.nbhood=self.get_rendered_nbh - if GSTUDIO_VERSIONING: + 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. def save_revert_or_merge(self, *args, **kwargs): @@ -2225,29 +2259,28 @@ class Attributetype(Nodetype): if GSTUDIO_VERSIONING: with reversion.create_revision(): super(Attributetype, self).save(*args, **kwargs) # Call the "real" save() method. - - + + class Relation(Edge): ''' Relations, instances of relationtypes ''' left_subject_scope = models.CharField(max_length=50, verbose_name='subject scope or qualification', null=True, blank=True) - left_subject = models.ForeignKey(NID, related_name="left_subject_of", verbose_name='subject name') + left_subject = models.ForeignKey(NID, related_name="left_subject_of", verbose_name='subject name') relationtype_scope = models.CharField(max_length=50, verbose_name='relation scope or qualification', null=True, blank=True) relationtype = models.ForeignKey(Relationtype, verbose_name='relation name') right_subject_scope = models.CharField(max_length=50, verbose_name='object scope or qualification', null=True, blank=True) - right_subject = models.ForeignKey(NID, related_name="right_subject_of", verbose_name='object name') + right_subject = models.ForeignKey(NID, related_name="right_subject_of", verbose_name='object name') - def ApplicableNodeType -s_filter(self,choice): + def ApplicableNodeTypes_filter(self,choice): nodeslist = [] - + if choice == 'ED': nodeslist = Edge.objects.all() - if choice == 'OB': + if choice == 'OB': nodeslist = Objects.objects.all() if choice == 'ND': nodeslist = Node.objects.all() @@ -2269,9 +2302,9 @@ s_filter(self,choice): nodeslist = Systemtype.objects.all() if choice == 'SY': nodeslist = System.objects.all() - + return nodeslist - + class Meta: unique_together = (('left_subject_scope','left_subject','relationtype_scope', 'relationtype', 'right_subject_scope','right_subject'),) @@ -2306,19 +2339,19 @@ s_filter(self,choice): @property def relation_sentence(self): """Return the relations of the objecttypes""" - + if self.relationtype: - # for relation in self.relationtype(): - return u'%s %s %s' % (self.left_subject,self.relationtype,self.right_subject ) + # for relation in self.relationtype(): + 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 u'%s as a %s' % (self.right_subject, self.relationtype) - - + return u'%s as a %s' % (self.right_subject, self.relationtype) + + # Save for Relation def save(self, *args, **kwargs): @@ -2327,7 +2360,7 @@ s_filter(self,choice): 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. @@ -2341,18 +2374,18 @@ s_filter(self,choice): class Attribute(Edge): ''' Attribute value store for default datatype varchar. Subject can be any of the - nodetypes. + nodetypes. ''' subject_scope = models.CharField(max_length=50, verbose_name='subject scope or qualification', null=True, blank=True) - subject = models.ForeignKey(NID, related_name="subject_of", verbose_name='subject name') + subject = models.ForeignKey(NID, related_name="subject_of", verbose_name='subject name') attributetype_scope = models.CharField(max_length=50, verbose_name='property scope or qualification', null=True, blank=True) attributetype = models.ForeignKey(Attributetype, verbose_name='property name') value_scope = models.CharField(max_length=50, verbose_name='value scope or qualification', null=True, blank=True) - svalue = models.CharField(max_length=100, verbose_name='serialized value') - + svalue = models.CharField(max_length=100, verbose_name='serialized value') + + - class Meta: unique_together = (('subject_scope', 'subject', 'attributetype_scope', 'attributetype', 'value_scope', 'svalue'),) verbose_name = _('attribute') @@ -2370,7 +2403,7 @@ class Attribute(Edge): for each in Objecttype.objects.all(): if attr.subjecttype.id == each.id: return each.get_members - + def __unicode__(self): @@ -2396,13 +2429,13 @@ class Attribute(Edge): composes a name to the attribute ''' 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 u'%s as %s' % (self.svalue, self.attributetype) + return u'%s as %s' % (self.svalue, self.attributetype) def subject_filter(self,attr): @@ -2424,33 +2457,33 @@ class Attribute(Edge): subject.ref.save() super(Attribute, self).save(*args, **kwargs) # Call the "real" save() method. - - - -class AttributeCharField(Attribute): - value = models.CharField(max_length=100, verbose_name='string') + + +class AttributeCharField(Attribute): + + value = models.CharField(max_length=100, verbose_name='string') 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(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): - - value = models.TextField(verbose_name='text') + + value = models.TextField(verbose_name='text') def __unicode__(self): return self.title @@ -2465,28 +2498,28 @@ class AttributeTextField(Attribute): subject.ref.save() super(AttributeTextField, self).save(*args, **kwargs) # Call the "real" save() method. - + class AttributeIntegerField(Attribute): - value = models.IntegerField(max_length=100, verbose_name='Integer') + value = models.IntegerField(max_length=100, verbose_name='Integer') - def __unicode__(self): - return self.title + 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(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. - # @reversion.create_revision() - def save(self, *args, **kwargs): - self.nodemodel = self.__class__.__name__ - 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. - class AttributeCommaSeparatedIntegerField(Attribute): - - value = models.CommaSeparatedIntegerField(max_length=100, verbose_name='integers separated by comma') + + value = models.CommaSeparatedIntegerField(max_length=100, verbose_name='integers separated by comma') def __unicode__(self): return self.title @@ -2502,12 +2535,12 @@ class AttributeCommaSeparatedIntegerField(Attribute): super(AttributeCommaSeparatedIntegerField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeBigIntegerField(Attribute): - - value = models.BigIntegerField(max_length=100, verbose_name='big integer') + + value = models.BigIntegerField(max_length=100, verbose_name='big integer') def __unicode__(self): return self.title - + # @reversion.create_revision() def save(self, *args, **kwargs): self.nodemodel = self.__class__.__name__ @@ -2520,8 +2553,8 @@ class AttributeBigIntegerField(Attribute): class AttributePositiveIntegerField(Attribute): - - value = models.PositiveIntegerField(max_length=100, verbose_name='positive integer') + + value = models.PositiveIntegerField(max_length=100, verbose_name='positive integer') def __unicode__(self): return self.title @@ -2538,8 +2571,8 @@ class AttributePositiveIntegerField(Attribute): class AttributeDecimalField(Attribute): - - value = models.DecimalField(max_digits=3, decimal_places=2, verbose_name='decimal') + + value = models.DecimalField(max_digits=3, decimal_places=2, verbose_name='decimal') def __unicode__(self): return self.title @@ -2553,8 +2586,8 @@ class AttributeDecimalField(Attribute): super(AttributeDecimalField, self).save(*args, **kwargs) # Call the "real" save() method. class AttributeFloatField(Attribute): - - value = models.FloatField(max_length=100, verbose_name='number as float') + + value = models.FloatField(max_length=100, verbose_name='number as float') def __unicode__(self): return self.title @@ -2571,8 +2604,8 @@ class AttributeFloatField(Attribute): class AttributeBooleanField(Attribute): - - value = models.BooleanField(verbose_name='boolean') + + value = models.BooleanField(verbose_name='boolean') def __unicode__(self): return self.title @@ -2587,8 +2620,8 @@ class AttributeBooleanField(Attribute): class AttributeNullBooleanField(Attribute): - - value = models.NullBooleanField(verbose_name='true false or unknown') + + value = models.NullBooleanField(verbose_name='true false or unknown') def __unicode__(self): return self.title @@ -2605,8 +2638,8 @@ class AttributeNullBooleanField(Attribute): class AttributeDateField(Attribute): - - value = models.DateField(max_length=100, verbose_name='date') + + value = models.DateField(max_length=100, verbose_name='date') def __unicode__(self): return self.title @@ -2622,9 +2655,9 @@ class AttributeDateField(Attribute): class AttributeDateTimeField(Attribute): - - value = models.DateTimeField(max_length=100, verbose_name='date time') - + + value = models.DateTimeField(max_length=100, verbose_name='date time') + def __unicode__(self): return self.title @@ -2638,10 +2671,10 @@ class AttributeDateTimeField(Attribute): subject.ref.save() super(AttributeDateTimeField, self).save(*args, **kwargs) # Call the "real" save() method. - + class AttributeTimeField(Attribute): - - value = models.TimeField(max_length=100, verbose_name='time') + + value = models.TimeField(max_length=100, verbose_name='time') def __unicode__(self): return self.title @@ -2658,8 +2691,8 @@ class AttributeTimeField(Attribute): class AttributeEmailField(Attribute): - - value = models.EmailField(max_length=100,verbose_name='value') + + value = models.EmailField(max_length=100,verbose_name='value') def __unicode__(self): return self.title @@ -2675,8 +2708,8 @@ class AttributeEmailField(Attribute): class AttributeFileField(Attribute): - - value = models.FileField(upload_to='media/'+UPLOAD_TO, verbose_name='file') + + value = models.FileField(upload_to='media/'+UPLOAD_TO, verbose_name='file') def __unicode__(self): return self.title @@ -2693,8 +2726,8 @@ class AttributeFileField(Attribute): class AttributeFilePathField(Attribute): - - value = models.FilePathField(verbose_name='path of file') + + value = models.FilePathField(verbose_name='path of file') def __unicode__(self): return self.title @@ -2711,8 +2744,8 @@ class AttributeFilePathField(Attribute): class AttributeImageField(Attribute): - - value = models.ImageField(upload_to = UPLOAD_TO, verbose_name='image') + + value = models.ImageField(upload_to = UPLOAD_TO, verbose_name='image') def __unicode__(self): return self.title @@ -2730,7 +2763,7 @@ class AttributeImageField(Attribute): class AttributeURLField(Attribute): - value = models.URLField(max_length=100, verbose_name='url') + value = models.URLField(max_length=100, verbose_name='url') def __unicode__(self): return self.title @@ -2748,7 +2781,7 @@ class AttributeURLField(Attribute): class AttributeIPAddressField(Attribute): - value = models.IPAddressField(max_length=100, verbose_name='ip address') + value = models.IPAddressField(max_length=100, verbose_name='ip address') def __unicode__(self): return self.title @@ -2765,11 +2798,11 @@ class AttributeIPAddressField(Attribute): -class Processtype(Nodetype): +class Processtype(Nodetype): """ A kind of nodetype for defining processes or events or temporal - objects involving change. + objects involving change. """ changing_attributetype_set = models.ManyToManyField(Attributetype, null=True, blank=True, verbose_name=_('attribute set involved in the process'), @@ -2790,35 +2823,35 @@ 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 + 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. - -class Systemtype(Nodetype): + +class Systemtype(Nodetype): """ class to organize Systems """ - nodetype_set = models.ManyToManyField(Nodetype, related_name="nodetype_set_of", verbose_name='Possible edges in the system', - blank=True, null=False) - relationtype_set = models.ManyToManyField(Relationtype, related_name="relationtype_set_of", verbose_name='Possible nodetypes in the system', - blank=True, null=False) + nodetype_set = models.ManyToManyField(Nodetype, related_name="nodetype_set_of", verbose_name='Possible edges in the system', + blank=True, null=False) + relationtype_set = models.ManyToManyField(Relationtype, related_name="relationtype_set_of", verbose_name='Possible nodetypes in the system', + blank=True, null=False) attributetype_set = models.ManyToManyField(Attributetype, related_name="attributetype_set_of", verbose_name='systems to be nested in the system', blank=True, null=False) - metatype_set = models.ManyToManyField(Metatype, related_name="metatype_set_of", verbose_name='Possible edges in the system', - blank=True, null=False) - processtype_set = models.ManyToManyField(Processtype, related_name="processtype_set_of", verbose_name='Possible edges in the system', - blank=True, null=False) + metatype_set = models.ManyToManyField(Metatype, related_name="metatype_set_of", verbose_name='Possible edges in the system', + blank=True, null=False) + processtype_set = models.ManyToManyField(Processtype, related_name="processtype_set_of", verbose_name='Possible edges in the system', + blank=True, null=False) def __unicode__(self): @@ -2833,8 +2866,8 @@ 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 + 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. @@ -2886,7 +2919,7 @@ class AttributeSpecification(Node): class RelationSpecification(Node): """ - specifying a relation with a subject + specifying a relation with a subject """ relationtype = models.ForeignKey(Relationtype, verbose_name='relation name') subjects = models.ManyToManyField(NID, related_name="subjects_in_relspec", verbose_name='subjects') @@ -2925,7 +2958,7 @@ class RelationSpecification(Node): class NodeSpecification(Node): """ - A node specified (described) by its relations or attributes or both. + A node specified (described) by its relations or attributes or both. """ subject = models.ForeignKey(Node, related_name="subject_nodespec", verbose_name='subject name') relations = models.ManyToManyField(Relation, related_name="relations_in_nodespec", verbose_name='relations used to specify the domain') @@ -2970,9 +3003,9 @@ class Expression(Node): Expression constructor """ - left_term = models.ForeignKey(NID, related_name="left_term_of", verbose_name='left term name') + left_term = models.ForeignKey(NID, related_name="left_term_of", verbose_name='left term name') relationtype = models.ForeignKey(Relationtype, verbose_name='relation name') - right_term = models.ForeignKey(NID, related_name="right_term_of", verbose_name='right term name') + right_term = models.ForeignKey(NID, related_name="right_term_of", verbose_name='right term name') def __unicode__(self): @@ -3008,7 +3041,7 @@ class Union(Node): union of two classes """ nodetypes = models.ManyToManyField(Nodetype, related_name = 'union_of', verbose_name='node types for union') - + def __unicode__(self): return self.title @@ -3029,7 +3062,7 @@ class Complement(Node): complement of a class """ nodetypes = models.ManyToManyField(Nodetype, related_name = 'complement_of', verbose_name='complementary nodes') - + def __unicode__(self): return self.title @@ -3048,7 +3081,7 @@ class Intersection(Node): Intersection of classes """ nodetypes = models.ManyToManyField(Nodetype, related_name = 'intersection_of', verbose_name='intersection of classes') - + def __unicode__(self): return self.title @@ -3061,7 +3094,7 @@ class Intersection(Node): super(Intersection, self).save(*args, **kwargs) # Call the "real" save() method. - + if GSTUDIO_VERSIONING == True: reversion.register(NID) @@ -3081,23 +3114,23 @@ if GSTUDIO_VERSIONING == True: if not reversion.is_registered(Processtype): reversion.register(Processtype, follow=["nodetype_ptr","changing_attributetype_set", "changing_relationtype_set"]) - if not reversion.is_registered(Nodetype): + if not reversion.is_registered(Nodetype): reversion.register(Nodetype, follow=["node_ptr","parent", "metatypes","prior_nodes", "posterior_nodes"]) if not reversion.is_registered(Metatype): reversion.register(Metatype, follow=["node_ptr","parent"]) - if not reversion.is_registered(Relationtype): + if not reversion.is_registered(Relationtype): reversion.register(Relationtype, follow=["nodetype_ptr","left_subjecttype", "right_subjecttype"]) - if not reversion.is_registered(Attributetype): + if not reversion.is_registered(Attributetype): reversion.register(Attributetype, follow=["nodetype_ptr","subjecttype"]) - if not reversion.is_registered(Attribute): + if not reversion.is_registered(Attribute): reversion.register(Attribute, follow=["subject", "attributetype"]) - if not reversion.is_registered(Relation): + if not reversion.is_registered(Relation): reversion.register(Relation, follow=["left_subject", "right_subject", "relationtype"]) moderator.register(Nodetype, NodetypeCommentModerator) @@ -53,7 +53,7 @@ setup(name='gnowsys-studio', include_package_data=True, zip_safe=False, install_requires=['BeautifulSoup>=3.2.0', - 'django>=1.4', + # 'django>=1.4', 'django-mptt>=0.4.2', 'django-tagging>=0.3.1', 'django-xmlrpc>=0.1.3', |