Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def splitFields(string):
"""Return a list of strings or lists from a Name or Address."""
return [toListOrString(i) for i in string.split(';')]
def toList(stringOrList):
if isinstance(stringOrList, basestring):
return [stringOrList]
return stringOrList
def serializeFields(obj, order):
"""Turn an object's fields into a ';' and ',' seperated string."""
return ';'.join([','.join(toList(getattr(obj, val))) for val in order])
NAME_ORDER = ('family', 'given', 'additional', 'prefix', 'suffix')
class NameBehavior(VCardBehavior):
"""A structured name."""
hasNative = True
@staticmethod
def transformToNative(obj):
"""Turn obj.value into a Name."""
if obj.isNative: return obj
obj.isNative = True
obj.value = Name(**dict(zip(NAME_ORDER, splitFields(obj.value))))
return obj
@staticmethod
def transformFromNative(obj):
"""Replace the Name in obj.value with a string."""
obj.isNative = False
obj.value = serializeFields(obj.value, NAME_ORDER)
obj.isNative = True
obj.value = Name(**dict(zip(NAME_ORDER, splitFields(obj.value))))
return obj
@staticmethod
def transformFromNative(obj):
"""Replace the Name in obj.value with a string."""
obj.isNative = False
obj.value = serializeFields(obj.value, NAME_ORDER)
return obj
registerBehavior(NameBehavior, 'N')
ADDRESS_ORDER = ('box', 'extended', 'street', 'city', 'region', 'code',
'country')
class AddressBehavior(VCardBehavior):
"""A structured address."""
hasNative = True
@staticmethod
def transformToNative(obj):
"""Turn obj.value into an Address."""
if obj.isNative: return obj
obj.isNative = True
obj.value = Address(**dict(zip(ADDRESS_ORDER, splitFields(obj.value))))
return obj
@staticmethod
def transformFromNative(obj):
"""Replace the Address in obj.value with a string."""
obj.isNative = False
obj.value = serializeFields(obj.value, ADDRESS_ORDER)
def __str__(self):
lines = '\n'.join(self.toString(getattr(self, val)) for val in self.lines if getattr(self, val))
one_line = tuple(self.toString(getattr(self, val), ' ') for val in self.one_line)
lines += "\n%s, %s %s" % one_line
if self.country:
lines += '\n' + self.toString(self.country)
return lines
def __repr__(self):
return "" % self.__str__().replace('\n', '\\n')
#------------------------ Registered Behavior subclasses -----------------------
class VCardBehavior(behavior.Behavior):
allowGroup = True
class VCard3_0(VCardBehavior):
"""vCard 3.0 behavior."""
name = 'VCARD'
description = 'vCard 3.0, defined in rfc2426'
versionString = '3.0'
isComponent = True
sortFirst = ('version', 'prodid', 'uid')
knownChildren = {'N': (1, 1, None),#min, max, behaviorRegistry id
'FN': (1, 1, None),
'VERSION': (1, 1, None),#required, auto-generated
'PRODID': (0, 1, None),
'LABEL': (0, None, None),
'UID': (0, None, None),
'ADR': (0, None, None)
}
@classmethod