summaryrefslogtreecommitdiff
path: root/gstudio/models.py
diff options
context:
space:
mode:
authorAnkita <ankita@ankita-Inspiron-N5010.(none)>2012-07-03 12:42:57 -0400
committerAnkita <ankita@ankita-Inspiron-N5010.(none)>2012-07-03 12:42:57 -0400
commitef3793b349be5744d6ef98a034f0c009159ed85b (patch)
tree04a873d770c330ce97eef3e78d43edb2d619d1a3 /gstudio/models.py
parente5c470536ee2d3571817b1a60f6b910f17a33f31 (diff)
parent471a772b4d2e1430a3a119593e8694c4af2c951a (diff)
downloadgnowsys-ef3793b349be5744d6ef98a034f0c009159ed85b.tar.gz
Merge branch 'master' of https://github.com/gnowgi/gnowsys-studio
Conflicts: django_gstudio.egg-info/PKG-INFO django_gstudio.egg-info/requires.txt
Diffstat (limited to 'gstudio/models.py')
-rw-r--r--gstudio/models.py1902
1 files changed, 1273 insertions, 629 deletions
diff --git a/gstudio/models.py b/gstudio/models.py
index 18ecf465..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.
@@ -279,108 +279,138 @@ class NID(models.Model):
@models.permalink
def get_absolute_url(self):
"""Return nodetype's URL"""
-
- return ('gstudio_nodetype_detail', (), {
- 'year': self.creation_date.strftime('%Y'),
- 'month': self.creation_date.strftime('%m'),
- 'day': self.creation_date.strftime('%d'),
- 'slug': self.slug})
+ if self.ref.__class__.__name__=='Gbobject' or self.ref.__class__.__name__=='Process' or self.ref.__class__.__name__=='System':
+ return('objectapp_gbobject_detail',(),{
+ 'year':self.creation_date.strftime('%Y'),
+ 'month':self.creation_date.strftime('%m'),
+ 'day':self.creation_date.strftime('%d'),
+ 'slug':self.slug})
+ else:
+ return ('gstudio_nodetype_detail', (), {
+ 'year': self.creation_date.strftime('%Y'),
+ 'month': self.creation_date.strftime('%m'),
+ 'day': self.creation_date.strftime('%d'),
+ 'slug': self.slug})
@property
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 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:
+ 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))
+ 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.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 :
- 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
def get_edit_url(self):
return "/admin/" + self._meta.app_label + "/" + self._meta.module_name + "/" + str(self.id)
-
+
def get_serialized_data(self):
@@ -392,59 +422,59 @@ 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)
-
- 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 })
-
- 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)
+ # 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"]= []
+ # 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)
def __unicode__(self):
@@ -457,7 +487,7 @@ class NID(models.Model):
class Node(NID):
"""
- Super class
+ Super class
"""
altnames = TagField(_('alternate names'), help_text=_('alternate names if any'), blank=True, null=True)
@@ -473,8 +503,9 @@ 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):
return self.title
@@ -482,15 +513,6 @@ 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.
@@ -510,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
@@ -545,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
@@ -553,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
@@ -579,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
@@ -613,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
@@ -639,13 +661,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 = []
@@ -655,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
return nbh
-
+
@property
def tree_path(self):
"""Return metatype's tree path, by its ancestors"""
@@ -676,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):
@@ -693,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_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.
@@ -723,12 +760,13 @@ class Nodetype(Node):
verbose_name=_('is a kind of'),
related_name='children')
- prior_nodes = models.ManyToManyField('self', null=True, blank=True,
+ prior_nodes = models.ManyToManyField('self', symmetrical=False,null=True, blank=True,
verbose_name=_('its meaning depends on '),
- related_name='posterior_nodes')
- posterior_nodes = models.ManyToManyField('self', null=True, blank=True,
+ related_name='nodetype_posterior_nodes')
+
+ posterior_nodes = models.ManyToManyField('self', symmetrical=False,null=True, blank=True,
verbose_name=_('required for the meaning of '),
- related_name='prior_nodes')
+ related_name='nodetype_prior_nodes')
image = models.ImageField(_('image'), upload_to=UPLOAD_TO,
blank=True, help_text=_('used for illustration'))
@@ -741,7 +779,7 @@ class Nodetype(Node):
related_name='member_types',
blank=True, null=True)
-
+
authors = models.ManyToManyField(User, verbose_name=_('authors'),
related_name='nodetypes',
@@ -771,58 +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
+ '''
+ 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.
+ """
+ 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
+
+ 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
@@ -830,140 +950,149 @@ 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):
- # predicate_id={"plural":"a1","altnames":"a2","contains_members":"a3","contains_subtypes":"a4","prior_nodes":"a5", "posterior_nodes":"a6"}
+
g_json = {}
g_json["node_metadata"]= []
g_json["relations"]=[]
- g_json["relset"]=[]
+
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
#print predicate_id
-
+
- 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)
+ 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[str(key)]=[]
- #g_json["relations"].append(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 })
-
- g_json["relations"].append({"from":self.id ,"type":str(key),"value":1,"to":predicate_id[key] })
-
- if not isinstance(nbh[key],basestring):
- for item in nbh[key]:
- if 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(),"expanded":"false"})
- g_json["relset"].append(item.id)
-
+ 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] })
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
- #create links
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item.id })
+ 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 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")})
- else:
-
- if item.left_subject.id==self.id:
- item1=item.right_subject
- elif item.right_subject.id==self.id:
- item1=item.left_subject
-
- g_json["node_metadata"].append({"_id":str(item1.id),"screen_name":item1.title,"title":self.title, "url":item1.get_absolute_url(),"expanded":"false"})
+ attr_counter-=1
- # g_json[str(key)].append({"from":predicate_id[key] , "to":item.id ,"value":1 })
- #create links
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key), "value":1,"to":item1.id })
-
- 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":(str(attr_counter)+"a"),"screen_name":nbh[key]})
- #g_json[str(key)].append({"from":predicate_id[key] , "to":attr_counter ,"value":1, "level":2 })
- g_json["relations"].append({"from":predicate_id[key] ,"type":str(key) ,"value":1,"to":(str(attr_counter)+"a")})
- attr_counter-=1
-
- except:
+ except:
pass
+
#print g_json
-
return json.dumps(g_json)
+
+
+ def get_label(self,key):
+ nbh=self.get_nbh
+ list_of_nodes=[]
+ for item in nbh[key]:
+ node=NID.objects.get(id=item.id)
+ node=node.ref
+ list_of_nodes.append(node)
+ return list_of_nodes
+
@property
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):
@@ -994,28 +1123,47 @@ 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_relations1(self):
+ def get_rendered_relations(self):
"""
Returns all the relations of the nodetype
"""
@@ -1023,153 +1171,172 @@ 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
+
@property
def get_attributes(self):
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
@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'])
+ 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
+ try:
+ nbh['count_plural'] = len(nbh['plural'])
+ except:
+ pass
+
+ #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={}
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={}
@@ -1177,53 +1344,53 @@ 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()
-
+
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.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['count_rightroles'] = len(nbh['rightroles'])
+ nbh['history']=history
return nbh
-
-
+
+
@property
def previous_nodetype(self):
"""Return the previous nodetype"""
@@ -1302,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."
@@ -1321,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):
@@ -1332,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):
"""
@@ -1351,15 +1518,6 @@ 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):
'''
@@ -1369,20 +1527,16 @@ 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
@@ -1395,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
@@ -1406,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
@@ -1417,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):
@@ -1430,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
@@ -1442,91 +1596,224 @@ 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 with the hyperlinks of nodes rendered
+ 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'])
nbh['altnames'] = self.altnames
+ nbh['count_altnames'] = len(nbh['altnames'])
nbh['plural'] = self.plural
- member_of_metatypes_list = []
+ #nbh['count_plural'] = len(nbh['plural'])
+ #get all MTs
+ member_of_dict = {}
for each in self.metatypes.all():
- member_of_metatypes_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['member_of_metatypes'] = member_of_metatypes_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={}
+ parentid=self.parent_id
+ if parentid:
+ parent=Nodetype.objects.get(id=parentid)
+ if parent:
+ typeof[parent] = parent.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.title]=items.get_absolute_url()
+ else:
+ relnvalue[rgtvalue]=rgtvalue.get_absolute_url()
- attributetypes_list = []
- for each in self.get_attributetypes:
- attributetypes_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['attributetypes'] = attributetypes_list
+ 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()
- # get all the RTs for the objecttype
- reltypes_list = []
- for each in self.get_relationtypes:
- reltypes_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['relationtypes'] = reltypes_list
+ rellft[lftkey]=relnvalue
- nbh['type_of'] = self.parent
+ nbh['relations']=relrgt
- 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('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['contains_members'] = contains_members_list
-
- prior_nodes_list = []
- for each in self.prior_nodes.all():
- prior_nodes_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['prior_nodes'] = prior_nodes_list
-
- posterior_nodes_list = []
- for each in self.posterior_nodes.all():
- posterior_nodes_list.append('<a href="%s">%s</a>' % (each.get_absolute_url(), each.title))
- nbh['posterior_nodes'] = posterior_nodes_list
-
- author_list = []
- for each in self.authors.all():
- author_list.append('<a href="%s"></a>' % (each.get_absolute_url()))
- nbh['authors'] = author_list
+ 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"]= []
+ 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
+ # print g_json
+
+
+
+ return json.dumps(g_json)
class Meta:
@@ -1540,15 +1827,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
+ 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()
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.
@@ -1557,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?')
@@ -1582,6 +1876,170 @@ 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
+
+
+
+ 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)
+ 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
@@ -1595,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
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.
@@ -1608,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')
@@ -1632,7 +2090,141 @@ 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)
+ 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
@@ -1657,34 +2249,38 @@ class Attributetype(Nodetype):
def save(self, *args, **kwargs):
self.nodemodel = self.__class__.__name__
-
-# self.nbhood=self.get_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):
+ self.nodemodel = self.__class__.__name__
+ 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.
-
+
+
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 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()
@@ -1706,9 +2302,9 @@ class Relation(Edge):
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'),)
@@ -1743,45 +2339,53 @@ class Relation(Edge):
@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):
+
+ """
+ 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
- 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')
@@ -1799,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):
@@ -1825,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):
@@ -1849,33 +2453,37 @@ 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.
-
-
-
-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
@@ -1886,29 +2494,32 @@ 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.
-
+
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.
+ # @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.
- 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
@@ -1919,18 +2530,31 @@ 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):
-
- 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__
+ 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):
-
- 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
@@ -1941,12 +2565,14 @@ 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.
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
@@ -1955,13 +2581,13 @@ 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):
-
- 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
@@ -1972,13 +2598,14 @@ 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.
class AttributeBooleanField(Attribute):
-
- value = models.BooleanField(verbose_name='boolean')
+
+ value = models.BooleanField(verbose_name='boolean')
def __unicode__(self):
return self.title
@@ -1987,13 +2614,14 @@ 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.
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
@@ -2004,12 +2632,14 @@ 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.
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
@@ -2019,14 +2649,15 @@ 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.
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
@@ -2036,13 +2667,14 @@ 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.
-
+
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
@@ -2053,13 +2685,14 @@ 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.
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
@@ -2069,13 +2702,14 @@ 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.
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
@@ -2086,13 +2720,14 @@ 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.
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
@@ -2103,13 +2738,14 @@ 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.
class AttributeImageField(Attribute):
-
- value = models.ImageField(upload_to='/media', verbose_name='image')
+
+ value = models.ImageField(upload_to = UPLOAD_TO, verbose_name='image')
def __unicode__(self):
return self.title
@@ -2117,12 +2753,17 @@ 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.
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
@@ -2133,13 +2774,14 @@ 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.
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
@@ -2150,16 +2792,17 @@ 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.
-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'),
@@ -2180,33 +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
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.
-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):
@@ -2221,13 +2866,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):
"""
@@ -2275,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')
@@ -2314,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')
@@ -2359,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):
@@ -2397,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
@@ -2418,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
@@ -2437,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
@@ -2450,12 +3094,12 @@ class Intersection(Node):
super(Intersection, self).save(*args, **kwargs) # Call the "real" save() method.
-
+
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"])
@@ -2468,25 +3112,25 @@ 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):
+ 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):
- reversion.register(Relationtype, follow=["left_subjecttype", "right_subjecttype"])
+ if not reversion.is_registered(Relationtype):
+ reversion.register(Relationtype, follow=["nodetype_ptr","left_subjecttype", "right_subjecttype"])
- if not reversion.is_registered(Attributetype):
- reversion.register(Attributetype, follow=["subjecttype"])
+ 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)