Changeset 810
- Timestamp:
- 05/21/07 19:11:57 (2 years ago)
- Files:
-
- Geographer/trunk/configure.zcml (modified) (2 diffs)
- Geographer/trunk/geo.py (modified) (3 diffs)
- Geographer/trunk/interfaces.py (modified) (3 diffs)
- Geographer/trunk/tests/adapters.txt (modified) (3 diffs)
- Geographer/trunk/tests/test_doctests.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Geographer/trunk/configure.zcml
r809 r810 11 11 <adapter factory=".geo.GeoContentSimple"/> 12 12 <adapter factory=".geo.GeoBrainSimple"/> 13 <adapter factory=".geo.GeoMemberSimple"/> 13 14 <adapter factory=".geo.GeoCollectionSimple"/> 14 15 … … 21 22 class="Products.ZCatalog.CatalogBrains.AbstractCatalogBrain" 22 23 interface=".interfaces.IReadOnlyGeoreferenceableBrain" 24 /> 25 26 <five:implements 27 class="Products.PlonePAS.tools.memberdata.MemberData" 28 interface=".interfaces.IGeoreferenceableMember" 23 29 /> 24 30 Geographer/trunk/geo.py
r809 r810 50 50 from Products.Geographer.interfaces import IGeoreferenceable 51 51 from Products.Geographer.interfaces import IReadOnlyGeoreferenceableBrain 52 from Products.Geographer.interfaces import IGeoreferenceableMember 52 53 53 54 … … 68 69 title=u'Create a new geometry property', 69 70 ) 71 72 73 class MemberdataBoundGeometry(object): 74 75 """A simple geometry bound to the PAS mutable property provider. 76 """ 77 implements(IGeometry) 78 79 def __init__(self, memberdata): 80 self.memberdata = memberdata 81 82 def getType(self): 83 return self.memberdata.getProperty('geom_type', None) 84 85 def setType(self, value): 86 self.memberdata.setMemberProperties({'geom_type': value}) 87 88 def getCoordinates(self): 89 coordinates = self.memberdata.getProperty('geom_coordinates', '()') 90 return eval("tuple(%s)" % coordinates) 91 92 def setCoordinates(self, value): 93 self.memberdata.setMemberProperties({'geom_coordinates': str(value)}) 94 95 type = property(getType, setType) 96 coordinates = property(getCoordinates, setCoordinates) 97 70 98 71 99 # Geo-referenced item … … 166 194 'description': unicode(self.description), 167 195 'uri': self.uri, 196 }, 197 'geometry': { 198 'type': self.geometry.type, 199 'coordinates': self.geometry.coordinates, 200 } 201 } 202 203 info = property(getInfo,) 204 205 206 # Adapt member 207 208 class GeoMemberSimple(object): 209 210 """Provides geo-referencing properties and the Python feature protocol. 211 """ 212 implements(IGeoItemSimple) 213 adapts(IGeoreferenceableMember) 214 215 def __init__(self, context): 216 """Initialize adapter.""" 217 self.context = context 218 self.geometry = MemberdataBoundGeometry(context) 219 220 def getInfo(self): 221 context = self.context 222 user_id = context.getId() 223 return { 224 'id': user_id, 225 'properties': { 226 'title' : context.getProperty('fullname', user_id), 227 'description' : context.getProperty('fullname', user_id), 228 'uri': None, 168 229 }, 169 230 'geometry': { Geographer/trunk/interfaces.py
r809 r810 43 43 class IGeoreferenceable(IAttributeAnnotatable): 44 44 45 """Marks an objectthat may be annotated with georeferencing properties.45 """Marks classes that may be annotated with georeferencing properties. 46 46 """ 47 47 … … 49 49 class IReadOnlyGeoreferenceableBrain(Interface): 50 50 51 """Marks a catalog brain.51 """Marks catalog brains. 52 52 """ 53 53 54 55 class IGeoreferenceableMember(Interface): 56 57 """Marks site members. 58 """ 59 54 60 55 61 class IGeoserializable(Interface): … … 156 162 ) 157 163 164 info = Dict( 165 title=u"Info Dictionary", 166 description=u"Dictionary which provides the Python feature protocol", 167 readonly=True, 168 ) 158 169 Geographer/trunk/tests/adapters.txt
r809 r810 8 8 >>> catalog.addColumn('geom_type') 9 9 >>> catalog.addColumn('geom_coordinates') 10 10 11 11 12 Adapt a document to IGeoItemSimple … … 32 33 {'geometry': {'type': 'Point', 'coordinates': ((0.0, 0.0, 0.0),)}, 'id': 'document', 'properties': {'uri': 'http://nohost/plone/Members/test_user_1_/document', 'description': u'This is a document', 'title': u'A Document'}} 33 34 35 34 36 Adapt a catalog brain to IGeoItemSimple 35 37 --------------------------------------- … … 51 53 >>> item.info 52 54 {'geometry': {'type': 'Point', 'coordinates': ((0.0, 0.0, 0.0),)}, 'id': 'document', 'properties': {'uri': 'http://nohost/plone/Members/test_user_1_/document', 'description': u'This is a document', 'title': u'A Document'}} 53 55 >>> item = None 56 57 58 Adapt a site member to IGeoItemSimple 59 ------------------------------------- 60 61 Add georeferencing properties to the memberdata schema 62 63 >>> from zope.component import getUtility 64 >>> from Products.CMFCore.interfaces import IMemberDataTool 65 >>> md_tool = getUtility(IMemberDataTool) 66 >>> md_tool.manage_addProperty('geom_type', '', 'string') 67 >>> md_tool.manage_addProperty('geom_coordinates', '()', 'string') 68 69 Georeference the test member 70 71 >>> from Products.CMFCore.interfaces import IMembershipTool 72 >>> mt = getUtility(IMembershipTool) 73 >>> member = mt.getMemberById('test_user_1_') 74 >>> bool(member.hasProperty('geom_type')) 75 True 76 >>> bool(member.hasProperty('geom_coordinates')) 77 True 78 >>> bool(member.hasProperty('utterly_bogus')) 79 False 80 81 >>> item = IGeoItemSimple(member) 82 >>> item.geometry.type = 'Point' 83 >>> item.geometry.coordinates = ((0.0, 0.0, 0.0),) 84 85 Refresh the member and check properties 86 87 >>> member = mt.getMemberById('test_user_1_') 88 >>> member.getProperty('geom_type') 89 'Point' 90 >>> member.getProperty('geom_coordinates') 91 '((0.0, 0.0, 0.0),)' 92 93 >>> item = IGeoItemSimple(member) 94 >>> item.geometry.type 95 'Point' 96 >>> item.geometry.coordinates 97 ((0.0, 0.0, 0.0),) 98 99 54 100 Adapt a folder to IGeoCollectionSimple 55 101 -------------------------------------- Geographer/trunk/tests/test_doctests.py
r803 r810 16 16 17 17 def list_doctests(): 18 return ['adapters.txt' ]18 return ['adapters.txt', 'views.txt'] 19 19 20 20 def test_suite():
