Changeset 3561
- Timestamp:
- 09/15/07 15:33:22 (1 year ago)
- Files:
-
- trunk/Policy/schevopolicy/rentity.py (modified) (2 diffs)
- trunk/Policy/schevopolicy/rtransaction.py (modified) (2 diffs)
- trunk/Schevo/schevo/field.py (modified) (3 diffs)
- trunk/Schevo/schevo/test/test_field.py (modified) (3 diffs)
- trunk/Schevo/schevo/test/test_field_factory_aliases.py (modified) (3 diffs)
- trunk/Zodb/setup.py (modified) (1 diff)
- trunk/apps/Twitabit/setup.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Policy/schevopolicy/rentity.py
r3383 r3561 9 9 from schevo import base 10 10 from schevo.entity import Entity 11 from schevo import field 11 12 from schevo.label import label, with_label 12 13 … … 48 49 49 50 def __getattr__(self, name): 50 entity = self._entity51 51 if name not in self._field_spec: 52 52 raise AttributeError('Field %r not in %r' % (name, self)) 53 53 self._unauthorized_if_getattr_disallowed() 54 value = getattr(entity, name) 55 # XXX: Also needs to handle EntityList, etc. 56 if isinstance(value, Entity): 54 f = self._entity.f[name] 55 # Copy the field if it is an entity field, and transform it. 56 if f.may_store_entities: 57 f = f.copy() 57 58 db = self._db 58 value = RestrictedEntity( 59 self._policy, self._context, db, db.extent(value._extent), 60 value) 61 return value 59 policy = self._policy 60 context = self._context 61 extent = db.extent 62 def to_rentity(e): 63 return RestrictedEntity( 64 policy, context, db, extent(e._extent), e) 65 f._transform(to_rentity) 66 return f.get() 62 67 63 68 def __hash__(self): 64 69 return hash(self._entity) 70 71 @property 72 def _default_key(self): 73 return self._entity._default_key 65 74 66 75 @property trunk/Policy/schevopolicy/rtransaction.py
r3383 r3561 44 44 if name not in self._field_spec: 45 45 raise AttributeError('Field %r not in %r' % (name, self)) 46 # Convert to RestrictedEntity as necessary. 47 # XXX: Short-term code; need to generalize this to support 48 # EntityList etc. 46 ## f = self._tx.f[name] 47 ## # Copy the field if it is an entity field, and transform it. 48 ## if f.may_store_entities: 49 ## f = f.copy() 50 ## db = self._db 51 ## policy = self._policy 52 ## context = self._context 53 ## extent = db.extent 54 ## def to_rentity(e): 55 ## return RestrictedEntity( 56 ## policy, context, db, extent(e._extent), e) 57 ## f._transform(to_rentity) 58 ## return f.get() 49 59 value = getattr(self._tx, name) 50 60 if isinstance(value, Entity): … … 112 122 field = field.copy() 113 123 db = self._db 124 policy = self._policy 125 context = self._context 126 extent = db.extent 114 127 def to_rentity(e): 115 128 return RestrictedEntity( 116 self._policy, self._context, db, db.extent(e._extent), e)129 policy, context, db, extent(e._extent), e) 117 130 field._transform(to_rentity) 118 131 return field trunk/Schevo/schevo/field.py
r3513 r3561 1363 1363 def _transform(self, transform_entity): 1364 1364 value = self._value 1365 if isinstance(value, list): 1366 self._value = [transform_entity(entity) for entity in value] 1365 if isinstance(value, (list, tuple)): 1366 L = [] 1367 for entity in value: 1368 if entity is not UNASSIGNED: 1369 L.append(transform_entity(entity)) 1370 else: 1371 L.append(UNASSIGNED) 1372 if isinstance(value, tuple): 1373 self._value = tuple(L) 1374 else: 1375 self._value = L 1367 1376 1368 1377 def _unassign(self, member): … … 1474 1483 value = self._value 1475 1484 if isinstance(value, (set, frozenset)): 1476 self._value = set(transform_entity(entity) for entity in value) 1485 self._value = type(value)( 1486 transform_entity(entity) for entity in value) 1477 1487 1478 1488 def validate(self, value): … … 1577 1587 value = self._value 1578 1588 if isinstance(value, (set, frozenset)): 1579 self._value = set(1589 self._value = type(value)( 1580 1590 frozenset(transform_entity(entity) for entity in item_set) 1581 1591 for item_set in value trunk/Schevo/schevo/test/test_field.py
r3382 r3561 546 546 547 547 class TestPasswordIsDeprecated(object): 548 549 548 """ 550 Change `showwarning` to log to a list instead of to stderr, so we551 can test the deprecation warning below::549 Change `showwarning` to record deprecation warnings somewhere 550 other than stderr, so we can test the deprecation warning below:: 552 551 553 552 >>> import warnings 554 553 >>> old_showwarning = warnings.showwarning 555 >>> captured_warnings = []556 554 >>> def showwarning(message, category, filename, lineno, file=None): 557 ... captured_warnings.append((message, category, filename, lineno)) 555 ... warnings.last_lineno = lineno 556 ... warnings.last_message = message 558 557 >>> warnings.showwarning = showwarning 559 558 … … 567 566 568 567 When using the schema, a deprecation warning is given for the `p` 569 field definition:: 568 field definition. The line number that the warning is on appears 569 to be line four above, but since a two-line header is prepended to 570 the body during unit testing, it's actually line six that the 571 warning occurs at:: 570 572 571 573 >>> from schevo.test import DocTest 572 >>> len_before = len(captured_warnings)573 574 >>> t = DocTest(body) 574 >>> len_after = len(captured_warnings) 575 >>> len_after - len_before 576 1 577 >>> message, category, filename, lineno = captured_warnings[-1] 578 >>> print str(message) #doctest: +ELLIPSIS 579 'password' is a deprecated field type. ... 580 581 The line number that the warning is on appears to be line four 582 above, but since a two-line header is prepended to the body during 583 unit testing, it's actually line six that the warning occurs at:: 584 585 >>> lineno 575 >>> print warnings.last_message #doctest: +ELLIPSIS 576 'password' is a deprecated field type. See ... 577 >>> warnings.last_lineno 586 578 6 587 579 … … 590 582 591 583 >>> warnings.showwarning = old_showwarning 592 593 584 """ 594 585 trunk/Schevo/schevo/test/test_field_factory_aliases.py
r3382 r3561 8 8 9 9 class TestFieldFactoryDeprecatedNames(BaseTest): 10 11 10 """ 12 Change `showwarning` to log to a list instead of to stderr, so we can13 test the deprecation warning below::11 Change `showwarning` to record deprecation warnings somewhere 12 other than stderr, so we can test the deprecation warning below:: 14 13 15 14 >>> import warnings 16 15 >>> old_showwarning = warnings.showwarning 17 >>> captured_warnings = []18 16 >>> def showwarning(message, category, filename, lineno, file=None): 19 ... captured_warnings.append((message, category, filename, lineno)) 17 ... warnings.last_lineno = lineno 18 ... warnings.last_message = message 20 19 >>> warnings.showwarning = showwarning 21 20 … … 33 32 ... ''' 34 33 35 When using the schema, a deprecation warning is given for the field 36 definition that used the camelCase version of the name, which is now 37 deprecated:: 34 When using the schema, a deprecation warning is given for the 35 field definition that used the camelCase version of the name, 36 which is now deprecated. The line number that the warning is on 37 appears to be line eight above, but since a two-line header is 38 prepended to the body during unit testing, it's actually line 10 39 that the warning occurs at:: 38 40 39 41 >>> from schevo.test import DocTest 40 >>> len_before = len(captured_warnings)41 42 >>> t = DocTest(body) 42 >>> len_after = len(captured_warnings) 43 >>> len_after - len_before 44 1 45 >>> message, category, filename, lineno = captured_warnings[-1] 46 >>> print str(message) #doctest: +ELLIPSIS 43 >>> print warnings.last_message #doctest: +ELLIPSIS 47 44 'someUnicodeThing' is a deprecated field definition name. ... 48 49 The line number that the warning is on appears to be line eight above, 50 but since a two-line header is prepended to the body during unit testing, 51 it's actually line 10 that the warning occurs at:: 52 53 >>> lineno 45 >>> warnings.last_lineno 54 46 10 55 47 … … 57 49 58 50 >>> warnings.showwarning = old_showwarning 59 60 51 """ 61 52 trunk/Zodb/setup.py
r3509 r3561 54 54 55 55 install_requires=[ 56 'Schevo == dev, >= 3.1a1dev-r3 444',57 'ZODB3 == 3.7.0',56 'Schevo == dev, >= 3.1a1dev-r3555', 57 'ZODB3 >= 3.8.0b3', 58 58 ], 59 59 trunk/apps/Twitabit/setup.py
r3433 r3561 56 56 'Schevo == dev, >= 3.1a1dev-r3383', 57 57 'SchevoPolicy == dev, >= 1.0a1dev-r3384', 58 'AuthKit == dev, >= 0.4.0dev-r 98',58 'AuthKit == dev, >= 0.4.0dev-r114', 59 59 ], 60 60
