diff options
Diffstat (limited to 'coip/apps/name')
-rw-r--r-- | coip/apps/name/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/name/admin.py | 5 | ||||
-rw-r--r-- | coip/apps/name/forms.py | 15 | ||||
-rw-r--r-- | coip/apps/name/models.py | 73 | ||||
-rw-r--r-- | coip/apps/name/views.py | 0 |
5 files changed, 93 insertions, 0 deletions
diff --git a/coip/apps/name/__init__.py b/coip/apps/name/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/name/__init__.py diff --git a/coip/apps/name/admin.py b/coip/apps/name/admin.py new file mode 100644 index 0000000..477da76 --- /dev/null +++ b/coip/apps/name/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from coip.apps.name.models import Name, Attribute + +admin.site.register(Name) +admin.site.register(Attribute)
\ No newline at end of file diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py new file mode 100644 index 0000000..0c96480 --- /dev/null +++ b/coip/apps/name/forms.py @@ -0,0 +1,15 @@ +''' +Created on Jun 24, 2010 + +@author: leifj +''' +from django import forms +from coip.apps.name.models import Name, Attribute + +class NameForm(forms.ModelForm): + class Meta: + model = Name + +class AttributeForm(forms.ModelForm): + class Meta: + model = Attribute
\ No newline at end of file diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py new file mode 100644 index 0000000..ec86769 --- /dev/null +++ b/coip/apps/name/models.py @@ -0,0 +1,73 @@ +''' +Created on Jun 24, 2010 + +@author: leifj +''' +from django.db import models +from django.contrib.auth.models import User +import re + +class Attribute(models.Model): + name = models.CharField(unique=True,max_length=255) + description = models.TextField(blank=True) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + + def __unicode__(self): + return self.name; + +class Name(models.Model): + ''' + A name-space/authorization/right/group/collaboration/thing + ''' + type = models.ForeignKey(Attribute, blank=True, null=True,related_name='names') + value = models.CharField(max_length=255) + parent = models.ForeignKey('self', blank=True, null=True,related_name='children') + partof = models.ForeignKey('self', blank=True, null=True,related_name='parts') + acl = models.TextField(blank=True) # fully-qualified-name '#' rights + description = models.TextField(blank=True) + creator = models.ForeignKey(User) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + + def relative_name(self): + if self.type: + return "%s=%s" % (self.type.name,self.value) + else: + return self.value + + def __unicode__(self): + n = self + str = "" + while n: + sep = "" + av = n.relative_name() + + if n.parent: + if av.find("=") == -1: + sep = ':' + else: + sep = ';' + + str = sep+av+str + n = n.parent + + return str + +def walkto(root,nameparts): + name = None + for n in nameparts: + (a,eq,v) = n.partition('=') + if v: + attribute = Attribute.objects.get(name=a) + name = Name.objects.get(parent=root,type=attribute.id,value=v) + else: + name = Name.objects.get(parent=root,type=None,value=a) + return name + +def lookup(name): + return walkto(None,nameparts=re.compile('[;:]').split(name)) + +def attribute(a): + Attribute.objects.get_or_create(name=a) +
\ No newline at end of file diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/name/views.py |