SF.net SVN: fclient: [389] trunk/sandbox/fcp2/key.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-04-09 08:04:38
|
Revision: 389
http://fclient.svn.sourceforge.net/fclient/?rev=389&view=rev
Author: jUrner
Date: 2008-04-09 01:04:37 -0700 (Wed, 09 Apr 2008)
Log Message:
-----------
metaclass fun for keys
Modified Paths:
--------------
trunk/sandbox/fcp2/key.py
Modified: trunk/sandbox/fcp2/key.py
===================================================================
--- trunk/sandbox/fcp2/key.py 2008-04-09 08:03:56 UTC (rev 388)
+++ trunk/sandbox/fcp2/key.py 2008-04-09 08:04:37 UTC (rev 389)
@@ -23,6 +23,7 @@
# consts
#**************************************************************************************
ReMatchExact = '\A%s\Z'
+KeyTypesAll = {}
#**************************************************************************************
# freenet base64 for keys
@@ -67,8 +68,21 @@
# see: [freenet/src/support/base64.java]
#
#***************************************************************************************
+class KeyMeta(type):
+ """Metaclass for freenet keys"""
+
+ def __new__(klass, name, bases, kws):
+ newClass = type.__new__(klass, name, bases, kws)
+ if newClass.KeyType is not None:
+ KeyTypesAll[newClass.KeyType] = newClass
+ return newClass
+
+#**************************************************************************************
+#
+#**************************************************************************************
class KeyBase(object):
- """
+ """Base class for freenet keys
+
>>> key = KeyBase.fcpToPython('CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo')
>>> key.pythonToFcp()
'CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/'
@@ -99,12 +113,13 @@
"""
- KeyTypesAll = {}
+ __metaclass__ = KeyMeta
+ KeyType = None
@classmethod
def fcpToPython(clss, string):
key = stripKey(string)
- for clssKeyType in clss.KeyTypesAll.values():
+ for clssKeyType in KeyTypesAll.values():
result = clssKeyType.fromString(key)
if result is not None:
return result
@@ -157,9 +172,6 @@
return clss
-KeyBase.KeyTypesAll[CHK.KeyType] = CHK
-
-
class SSK(KeyBase):
_key_pattern_ = '''
(?P<keyType>SSK@)
@@ -194,9 +206,7 @@
d = result.groupdict()
return clss(d['keyData'], d['filename'])
-KeyBase.KeyTypesAll[SSK.KeyType] = SSK
-
class KSK(KeyBase):
_key_pattern_ = '''
(?P<keyType>KSK@)
@@ -226,9 +236,6 @@
return clss
-KeyBase.KeyTypesAll[KSK.KeyType] = KSK
-
-
class USK(KeyBase):
_key_pattern_ = '''
(?P<keyType>USK@)
@@ -274,7 +281,6 @@
d = result.groupdict()
return clss(d['keyData'], d['filename'], edition=d['edition'])
-KeyBase.KeyTypesAll[USK.KeyType] = USK
#*****************************************************************************
#
#*****************************************************************************
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|