787
787
def _set_values(self, new_values):
788
788
if self.metadata is not None:
789
raw_values = map(lambda x: IptcTag._convert_to_string(x, self.type), new_values)
789
raw_values = map(self._convert_to_string, new_values)
790
790
self.metadata._set_iptc_tag_values(self.key, raw_values)
791
791
# Make values a notifying list if needed
792
792
if isinstance(new_values, NotifyingList):
816
816
def _convert_to_python(self, value):
818
Convert a raw value to its corresponding python type.
818
Convert one raw value to its corresponding python type.
820
820
@param value: the raw value to be converted
821
821
@type value: C{str}
876
876
raise IptcValueError(value, self.type)
879
def _convert_to_string(value, xtype):
878
def _convert_to_string(self, value):
881
Convert a value to its corresponding string representation, suitable to
880
Convert one value to its corresponding string representation, suitable
884
883
@param value: the value to be converted
885
@type value: depends on xtype (DOCME)
886
@param xtype: the IPTC type of the value
884
@type value: depends on C{self.type} (DOCME)
889
886
@return: the value converted to its corresponding string representation
892
889
@raise IptcValueError: if the conversion fails
891
if self.type == 'Short':
895
892
if type(value) is int:
896
893
return str(value)
898
raise IptcValueError(value, xtype)
895
raise IptcValueError(value, self.type)
900
elif xtype == 'String':
897
elif self.type == 'String':
901
898
if type(value) is unicode:
903
900
return value.encode('utf-8')
904
901
except UnicodeEncodeError:
905
raise IptcValueError(value, xtype)
902
raise IptcValueError(value, self.type)
906
903
elif type(value) is str:
909
raise IptcValueError(value, xtype)
906
raise IptcValueError(value, self.type)
911
elif xtype == 'Date':
908
elif self.type == 'Date':
912
909
if type(value) in (datetime.date, datetime.datetime):
913
910
# ISO 8601 date format
914
911
return value.strftime('%Y%m%d')
916
raise IptcValueError(value, xtype)
913
raise IptcValueError(value, self.type)
918
elif xtype == 'Time':
915
elif self.type == 'Time':
919
916
if type(value) in (datetime.time, datetime.datetime):
920
917
r = value.strftime('%H%M%S')
921
918
if value.tzinfo is not None:
927
raise IptcValueError(value, xtype)
924
raise IptcValueError(value, self.type)
929
elif xtype == 'Undefined':
926
elif self.type == 'Undefined':
930
927
if type(value) is str:
933
raise IptcValueError(value, xtype)
930
raise IptcValueError(value, self.type)
935
raise IptcValueError(value, xtype)
932
raise IptcValueError(value, self.type)
937
934
def to_string(self):
942
939
@rtype: C{list} of C{str}
944
return map(lambda x: IptcTag._convert_to_string(x, self.type),
941
return map(self._convert_to_string, self.values)
947
943
def __str__(self):