[CalendarServer-changes] [7453] CalendarServer/branches/users/glyph/new-export/twistedcaldav/ storebridge.py

source_changes at macosforge.org source_changes at macosforge.org
Mon May 16 07:41:42 PDT 2011


Revision: 7453
          http://trac.macosforge.org/projects/calendarserver/changeset/7453
Author:   glyph at apple.com
Date:     2011-05-16 07:41:42 -0700 (Mon, 16 May 2011)
Log Message:
-----------
Minor cleanup; duplicate code in metadata properties.

Modified Paths:
--------------
    CalendarServer/branches/users/glyph/new-export/twistedcaldav/storebridge.py

Modified: CalendarServer/branches/users/glyph/new-export/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/branches/users/glyph/new-export/twistedcaldav/storebridge.py	2011-05-16 14:41:31 UTC (rev 7452)
+++ CalendarServer/branches/users/glyph/new-export/twistedcaldav/storebridge.py	2011-05-16 14:41:42 UTC (rev 7453)
@@ -1709,66 +1709,45 @@
         returnValue(NO_CONTENT)
 
 
-class _CalendarObjectMetaDataMixin(object):
+
+class _MetadataProperty(object):
     """
-    Dynamically create the required meta-data for an object resource 
+    A python property which can be set either on a _newStoreObject or on some
+    metadata if no new store object exists yet.
     """
 
-    def _get_accessMode(self):
-        return self._newStoreObject.accessMode if self._newStoreObject else self._metadata.get("accessMode", None)
+    def __init__(self, name):
+        self.name = name
 
-    def _set_accessMode(self, value):
-        if self._newStoreObject:
-            self._newStoreObject.accessMode = value
-        else:
-            self._metadata["accessMode"] = value
 
-    accessMode = property(_get_accessMode, _set_accessMode)
-
-    def _get_isScheduleObject(self):
-        return self._newStoreObject.isScheduleObject if self._newStoreObject else self._metadata.get("isScheduleObject", None)
-
-    def _set_isScheduleObject(self, value):
-        if self._newStoreObject:
-            self._newStoreObject.isScheduleObject = value
+    def __get__(self, oself, type=None):
+        if oself._newStoreObject:
+            return getattr(oself._newStoreObject, self.name)
         else:
-            self._metadata["isScheduleObject"] = value
+            return oself._metadata.get(self.name, None)
 
-    isScheduleObject = property(_get_isScheduleObject, _set_isScheduleObject)
 
-    def _get_scheduleTag(self):
-        return self._newStoreObject.scheduleTag if self._newStoreObject else self._metadata.get("scheduleTag", None)
-
-    def _set_scheduleTag(self, value):
-        if self._newStoreObject:
-            self._newStoreObject.scheduleTag = value
+    def __set__(self, oself, value):
+        if oself._newStoreObject:
+            setattr(oself._newStoreObject, self.name, value)
         else:
-            self._metadata["scheduleTag"] = value
+            oself._metadata[self.name] = value
 
-    scheduleTag = property(_get_scheduleTag, _set_scheduleTag)
 
-    def _get_scheduleEtags(self):
-        return self._newStoreObject.scheduleEtags if self._newStoreObject else self._metadata.get("scheduleEtags", None)
 
-    def _set_scheduleEtags(self, value):
-        if self._newStoreObject:
-            self._newStoreObject.scheduleEtags = value
-        else:
-            self._metadata["scheduleEtags"] = value
+class _CalendarObjectMetaDataMixin(object):
+    """
+    Dynamically create the required meta-data for an object resource 
+    """
 
-    scheduleEtags = property(_get_scheduleEtags, _set_scheduleEtags)
+    accessMode        = _MetadataProperty("accessMode")
+    isScheduleObject  = _MetadataProperty("isScheduleObject")
+    scheduleTag       = _MetadataProperty("scheduleTag")
+    scheduleEtags     = _MetadataProperty("scheduleEtags")
+    hasPrivateComment = _MetadataProperty("hasPrivateComment")
 
-    def _get_hasPrivateComment(self):
-        return self._newStoreObject.hasPrivateComment if self._newStoreObject else self._metadata.get("hasPrivateComment", None)
 
-    def _set_hasPrivateComment(self, value):
-        if self._newStoreObject:
-            self._newStoreObject.hasPrivateComment = value
-        else:
-            self._metadata["hasPrivateComment"] = value
 
-    hasPrivateComment = property(_get_hasPrivateComment, _set_hasPrivateComment)
-
 class CalendarObjectResource(_CalendarObjectMetaDataMixin, _CommonObjectResource):
     """
     A resource wrapping a calendar object.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110516/71a55931/attachment-0001.html>


More information about the calendarserver-changes mailing list