Skip to content

Commit

Permalink
Merge 573d8dc into 2a47de2
Browse files Browse the repository at this point in the history
  • Loading branch information
jamadden committed Jul 5, 2018
2 parents 2a47de2 + 573d8dc commit ccac082
Show file tree
Hide file tree
Showing 26 changed files with 1,327 additions and 778 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -4,6 +4,7 @@
*.c
src/nti/externalization/*.html
src/nti/externalization/internalization/*.html
src/nti/externalization/externalization/*.html


__pycache__/*
Expand Down
9 changes: 8 additions & 1 deletion setup.py
Expand Up @@ -79,7 +79,14 @@ def _c(m):
('internalization.events', ('_interface_cache',)),
('internalization.externals', ()),
('internalization.updater', ()),
('externalization', ('_base_interfaces',)),
('externalization.fields', ('_base_interfaces',)),
('externalization.standard_fields', (
'_base_interfaces',
'_fields',
)),
('externalization.dictionary', ('_base_interfaces',)),
('externalization.externalizer', ('_base_interfaces',)),
#('externalization', ('_base_interfaces',)),
('_interface_cache', ()),
('datastructures', (
'_base_interfaces',
Expand Down
6 changes: 5 additions & 1 deletion src/nti/externalization/__base_interfaces.pxd
Expand Up @@ -14,6 +14,8 @@ cdef class LocatedExternalDict(dict):
cdef public __acl__
cdef readonly mimeType

cdef update_from_other(self, other)

cpdef LocatedExternalDict make_external_dict()

cdef class StandardExternalFields(object):
Expand All @@ -33,7 +35,9 @@ cdef class StandardExternalFields(object):
cdef readonly unicode ITEMS
cdef readonly unicode TOTAL
cdef readonly unicode ITEM_COUNT
cdef readonly frozenset ALL

cdef readonly frozenset _ALL_ATTR_NAMES
cdef readonly frozenset _ALL_EXTERNAL_KEYS

cdef StandardExternalFields _standard_external_fields

Expand Down
47 changes: 45 additions & 2 deletions src/nti/externalization/_base_interfaces.py
Expand Up @@ -13,6 +13,9 @@
from __future__ import division
from __future__ import print_function

import numbers
import six

__all__ = [
'NotGiven',
'LocatedExternalDict',
Expand Down Expand Up @@ -61,6 +64,9 @@ def __init__(self, **kwargs):
self.__acl__ = ()
self.mimeType = None

def update_from_other(self, other):
return dict.update(self, other)

def make_external_dict():
# This layer of indirection is for cython; it can't cimport
# types when the extension name doesn't match the
Expand Down Expand Up @@ -92,7 +98,9 @@ class StandardExternalFields(object):
'ITEMS',
'TOTAL',
'ITEM_COUNT',
'ALL'

'_ALL_ATTR_NAMES',
'_ALL_EXTERNAL_KEYS',
)

def __init__(self):
Expand All @@ -111,15 +119,46 @@ def __init__(self):
self.ITEMS = u'Items'
self.TOTAL = u'Total'
self.ITEM_COUNT = u'ItemCount'
self.ALL = frozenset(StandardExternalFields.__slots__) - {'ALL'}

self._ALL_ATTR_NAMES = frozenset((s for s in StandardExternalFields.__slots__
if not s.startswith('_')))
self._ALL_EXTERNAL_KEYS = frozenset((getattr(self, s) for s in self._ALL_ATTR_NAMES))

@property
def ALL(self):
return self._ALL_ATTR_NAMES

@property
def EXTERNAL_KEYS(self):
return self._ALL_EXTERNAL_KEYS

_standard_external_fields = StandardExternalFields()

def get_standard_external_fields():
return _standard_external_fields


#: A set of the external keys (fields) used in
#: minimal external dictionaries. In general,
#: you should prefer StandardExternalFields.EXTERNAL_KEYS
MINIMAL_SYNTHETIC_EXTERNAL_KEYS = frozenset((
'OID',
'ID',
'Last Modified',
'Creator',
'ContainerId',
'Class',
))


def isSyntheticKey(k):
"""
Deprecated. Prefer to test against StandardExternalFields.EXTERNAL_KEYS
"""
# pylint:disable=protected-access
return k in _standard_external_fields._ALL_EXTERNAL_KEYS



class StandardInternalFields(object):
"""
Expand Down Expand Up @@ -155,5 +194,9 @@ def get_standard_internal_fields():
return _standard_internal_fields


PRIMITIVES = six.string_types + (numbers.Number, bool, type(None))



from nti.externalization._compat import import_c_accel # pylint:disable=wrong-import-position
import_c_accel(globals(), 'nti.externalization.__base_interfaces')
9 changes: 4 additions & 5 deletions src/nti/externalization/_datastructures.pxd
Expand Up @@ -2,11 +2,10 @@
import cython


from nti.externalization._externalization cimport toExternalObject as _toExternalObject
from nti.externalization._externalization cimport stripSyntheticKeysFromExternalDictionary
from nti.externalization._externalization cimport _isMagicKey
from nti.externalization._externalization cimport to_minimal_standard_external_dictionary
from nti.externalization._externalization cimport internal_to_standard_external_dictionary
from nti.externalization.externalization._externalizer cimport to_external_object as _toExternalObject

from nti.externalization.externalization._dictionary cimport to_minimal_standard_external_dictionary
from nti.externalization.externalization._dictionary cimport internal_to_standard_external_dictionary

from nti.externalization.__base_interfaces cimport get_standard_external_fields
from nti.externalization.__base_interfaces cimport StandardExternalFields as SEF
Expand Down
4 changes: 3 additions & 1 deletion src/nti/externalization/_externalization.pxd
Expand Up @@ -94,7 +94,9 @@ cpdef toExternalObject(obj,
decorate_callback=*,
default_non_externalizable_replacer=*)


@cython.locals(
obj_has_usable_external_object=bint,
)
cdef _to_external_object_state(obj, _ExternalizationState state,
bint top_level=*,
bint decorate=*,
Expand Down
4 changes: 2 additions & 2 deletions src/nti/externalization/configure.zcml
Expand Up @@ -56,11 +56,11 @@
provides=".interfaces.IExternalizedObjectFactoryFinder" />

<adapter for=""
factory=".externalization._DevmodeNonExternalizableObjectReplacer"
factory=".externalization.replacers.DevmodeNonExternalizableObjectReplacementFactory"
zcml:condition="have devmode" />

<adapter for="*"
factory=".externalization._DevmodeNonExternalizableObjectReplacer"
factory=".externalization.replacers.DevmodeNonExternalizableObjectReplacementFactory"
zcml:condition="have devmode" />

</configure>
13 changes: 5 additions & 8 deletions src/nti/externalization/datastructures.py
Expand Up @@ -29,11 +29,12 @@
from .interfaces import StandardInternalFields

# Things imported from cython with matching cimport
from .externalization import to_minimal_standard_external_dictionary
from .externalization import internal_to_standard_external_dictionary
from .externalization.dictionary import to_minimal_standard_external_dictionary
from .externalization.dictionary import internal_to_standard_external_dictionary
# Must rename this so it doesn't conflict with method defs;
# that breaks cython
from .externalization import toExternalObject as _toExternalObject
from .externalization.externalizer import to_external_object as _toExternalObject

from .internalization import validate_named_field_value
from .representation import make_repr

Expand Down Expand Up @@ -78,10 +79,6 @@ def toExternalDictionary(self, mergeFrom=None, *unused_args, **kwargs):
mergeFrom=mergeFrom,
**kwargs)

# # XXX: Why is this here as an instance method?
# @staticmethod
# def stripSyntheticKeysFromExternalDictionary(*args):
# return stripSyntheticKeysFromExternalDictionary(*args)

class AbstractDynamicObjectIO(ExternalizableDictionaryMixin):
"""
Expand Down Expand Up @@ -476,7 +473,7 @@ def toExternalObject(self, mergeFrom=None, **kwargs):
break

if ext_class_name:
mergeFrom = mergeFrom or {}
mergeFrom = mergeFrom if mergeFrom is not None else {}
mergeFrom[StandardExternalFields.CLASS] = ext_class_name

result = super(InterfaceObjectIO, self).toExternalObject(mergeFrom=mergeFrom, **kwargs)
Expand Down
7 changes: 3 additions & 4 deletions src/nti/externalization/datetime.py
Expand Up @@ -93,10 +93,9 @@ def _local_tzinfo(local_tzname=None):
if not tzinfo:
# well nuts. Do the best we can with the current info
# First, get the timezone name, using daylight name if appropriate
if time.daylight and time.altzone is not None and time.tzname[1]:
offset = time.altzone
else:
offset = time.timezone
offset = (time.altzone
if time.daylight and time.altzone is not None and time.tzname[1]
else time.timezone)

add = '+' if offset > 0 else ''
local_tzname = 'Etc/GMT' + add + str((offset // 60 // 60))
Expand Down

0 comments on commit ccac082

Please sign in to comment.