示例#1
0
文件: iptc.py 项目: enaut/py3exiv2
    def _convert_to_string(self, value):
        """Convert one value to its corresponding string representation,
        suitable to pass to libexiv2.

        Args:
        value -- the value to be converted

        Return: the value converted to its corresponding string representation

        Raise IptcValueError: if the conversion fails
        """
        if self.type == 'Short':
            if isinstance(value, int):
                return str(value)

            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'String':
            if isinstance(value, str):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise IptcValueError(value, self.type)

            elif isinstance(value, bytes):
                return value

            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Date':
            if isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.iptc_date(value)

            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Time':
            if isinstance(value, (datetime.time, datetime.datetime)):
                return DateTimeFormatter.iptc_time(value)

            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Undefined':
            if isinstance(value, str):
                return value

            else:
                raise IptcValueError(value, self.type)

        raise IptcValueError(value, self.type)
示例#2
0
文件: iptc.py 项目: AbdealiJK/pyexiv2
    def _convert_to_string(self, value):
        """
        Convert one value to its corresponding string representation, suitable
        to pass to libexiv2.

        :param value: the value to be converted

        :return: the value converted to its corresponding string representation
        :rtype: string

        :raise IptcValueError: if the conversion fails
        """
        if self.type == 'Short':
            if isinstance(value, int):
                return str(value)
            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'String':
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise IptcValueError(value, self.type)
            elif isinstance(value, str):
                return value
            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Date':
            if isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.iptc_date(value)
            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Time':
            if isinstance(value, (datetime.time, datetime.datetime)):
                return DateTimeFormatter.iptc_time(value)
            else:
                raise IptcValueError(value, self.type)

        elif self.type == 'Undefined':
            if isinstance(value, str):
                return value
            else:
                raise IptcValueError(value, self.type)

        raise IptcValueError(value, self.type)
示例#3
0
    def test_iptc_time(self):
        # datetime
        d = datetime.datetime(1899, 12, 31)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '00:00:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:00:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59, 999999)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59, tzinfo=FixedOffset())
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59, tzinfo=FixedOffset(hours=5))
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+05:00')
        d = datetime.datetime(2011, 8, 8, 19, 3, 37)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '19:03:37+00:00')

        # time
        d = datetime.time(23)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:00:00+00:00')
        d = datetime.time(23, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:00+00:00')
        d = datetime.time(23, 59, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, 999999)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, tzinfo=FixedOffset())
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, tzinfo=FixedOffset(hours=5))
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+05:00')
        d = datetime.time(19, 3, 37)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '19:03:37+00:00')

        # invalid type
        self.assertRaises(TypeError, DateTimeFormatter.iptc_time, None)
        self.assertRaises(TypeError, DateTimeFormatter.iptc_time, 3.14)
    def test_iptc_time(self):
        # datetime
        d = datetime.datetime(1899, 12, 31)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '00:00:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:00:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:00+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59, 999999)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899, 12, 31, 23, 59, 59, tzinfo=FixedOffset())
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.datetime(1899,
                              12,
                              31,
                              23,
                              59,
                              59,
                              tzinfo=FixedOffset(hours=5))
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+05:00')
        d = datetime.datetime(2011, 8, 8, 19, 3, 37)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '19:03:37+00:00')

        # time
        d = datetime.time(23)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:00:00+00:00')
        d = datetime.time(23, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:00+00:00')
        d = datetime.time(23, 59, 59)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, 999999)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, tzinfo=FixedOffset())
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+00:00')
        d = datetime.time(23, 59, 59, tzinfo=FixedOffset(hours=5))
        self.assertEqual(DateTimeFormatter.iptc_time(d), '23:59:59+05:00')
        d = datetime.time(19, 3, 37)
        self.assertEqual(DateTimeFormatter.iptc_time(d), '19:03:37+00:00')

        # invalid type
        self.assertRaises(TypeError, DateTimeFormatter.iptc_time, None)
        self.assertRaises(TypeError, DateTimeFormatter.iptc_time, 3.14)
示例#5
0
def test_iptc_time_invalid(bad_ts):
    with pytest.raises(TypeError):
        DateTimeFormatter.iptc_time(bad_ts)
示例#6
0
def test_iptc_time_valid(formatted, ts):
    assert DateTimeFormatter.iptc_time(ts) == formatted