summaryrefslogtreecommitdiff
path: root/coip/apps/name
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/name')
-rw-r--r--coip/apps/name/__init__.py0
-rw-r--r--coip/apps/name/admin.py5
-rw-r--r--coip/apps/name/forms.py15
-rw-r--r--coip/apps/name/models.py73
-rw-r--r--coip/apps/name/views.py0
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