コード例 #1
0
ファイル: utils.py プロジェクト: mcmclx/py3exiv2
 def test_is_fraction(self):
     self.failUnless(is_fraction(Fraction()))
     self.failUnless(is_fraction(Fraction(3, 5)))
     self.failUnless(is_fraction(Fraction(Fraction(4, 5))))
     self.failUnless(is_fraction(Fraction('3/2')))
     self.failUnless(is_fraction(Fraction('-4/5')))
     self.failIf(is_fraction(3 / 5))
     self.failIf(is_fraction('3/5'))
     self.failIf(is_fraction('2.7'))
     self.failIf(is_fraction(2.7))
     self.failIf(is_fraction('notafraction'))
     self.failIf(is_fraction(None))
コード例 #2
0
    def test_is_fraction(self):
        if Fraction is not None:
            self.failUnless(is_fraction(Fraction()))
            self.failUnless(is_fraction(Fraction(3, 5)))
            self.failUnless(is_fraction(Fraction(Fraction(4, 5))))
            self.failUnless(is_fraction(Fraction('3/2')))
            self.failUnless(is_fraction(Fraction('-4/5')))
        self.failUnless(is_fraction(Rational(3, 5)))
        self.failUnless(is_fraction(Rational(-4, 5)))
        self.failUnless(is_fraction(Rational.from_string("3/5")))
        self.failUnless(is_fraction(Rational.from_string("-4/5")))

        self.failIf(is_fraction(3 / 5))
        self.failIf(is_fraction('3/5'))
        self.failIf(is_fraction('2.7'))
        self.failIf(is_fraction(2.7))
        self.failIf(is_fraction('notafraction'))
        self.failIf(is_fraction(None))
コード例 #3
0
ファイル: xmp.py プロジェクト: enaut/py3exiv2
    def _convert_to_string(self, value, type_):
        """Convert a value to its corresponding string representation.

        Args:
        value -- the value to be converted
        type_ -- the simple type of the value

        Return: the value converted to its corresponding string representation

        Raise XmpValueError: if the conversion fails
        """
        if type_ == 'Boolean':
            if isinstance(value, bool):
                return str(value)
            else:
                raise XmpValueError(value, type_)

        elif type_ == 'Date':
            if isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.xmp(value)

            else:
                raise XmpValueError(value, type_)

        elif type_ == 'GPSCoordinate':
            if isinstance(value, GPSCoordinate):
                return str(value)

            else:
                raise XmpValueError(value, type_)

        elif type_ == 'Integer':
            if isinstance(value, int):
                return str(value)

            else:
                raise XmpValueError(value, type_)

        elif type_ == 'MIMEType':
            if isinstance(value, tuple) and len(value) == 2:
                return '/'.join(value)

            else:
                raise XmpValueError(value, type_)

        elif type_ in ('AgentName', 'ProperName', 'Text', 'URI', 'URL'):
            if isinstance(value, str):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type_)

            elif isinstance(value, bytes):
                return value

            raise XmpValueError(value, type_)

        elif type_ == 'Rational':
            if is_fraction(value):
                return str(value)

            else:
                raise XmpValueError(value, type_)

        elif type_ == '':
            # Undefined type
            if isinstance(value, str):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type_)

            elif isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.xmp(value)

        raise NotImplementedError('XMP conversion for type [%s]' % type_)
コード例 #4
0
ファイル: exif.py プロジェクト: Namejs/workr
    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 ExifValueError: if the conversion fails
        """
        if self.type == 'Ascii':
            if isinstance(value, datetime.datetime):
                return value.strftime(self._datetime_formats[0])
            elif isinstance(value, datetime.date):
                if self.key == 'Exif.GPSInfo.GPSDateStamp':
                    # Special case
                    return value.strftime(self._date_formats[0])
                else:
                    return value.strftime('%s 00:00:00' % self._date_formats[0])
            elif isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)
            elif isinstance(value, str):
                return value
            else:
                raise ExifValueError(value, self.type)

        elif self.type in ('Byte', 'SByte'):
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)
            elif isinstance(value, str):
                return value
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Comment':
            if value is not None and self.raw_value is not None and \
                self.raw_value.startswith('charset='):
                charset, val = self.raw_value.split(' ', 1)
                charset = charset.split('=')[1].strip('"')
                encoding = self._match_encoding(charset)
                try:
                    val = value.encode(encoding)
                except UnicodeError:
                    # Best effort, do not fail just because the original
                    # encoding of the tag cannot encode the new value.
                    pass
                else:
                    return 'charset="%s" %s' % (charset, val)

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

        elif self.type == 'Short':
            if isinstance(value, int) and value >= 0:
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SShort':
            if isinstance(value, int):
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Long':
            if isinstance(value, (int, long)) and value >= 0:
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SLong':
            if isinstance(value, (int, long)):
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Rational':
            if is_fraction(value) and value.numerator >= 0:
                return fraction_to_string(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SRational':
            if is_fraction(value):
                return fraction_to_string(value)
            else:
                raise ExifValueError(value, self.type)

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

        raise ExifValueError(value, self.type)
コード例 #5
0
ファイル: utils.py プロジェクト: Namejs/workr
    def test_is_fraction(self):
        if Fraction is not None:
            self.failUnless(is_fraction(Fraction()))
            self.failUnless(is_fraction(Fraction(3, 5)))
            self.failUnless(is_fraction(Fraction(Fraction(4, 5))))
            self.failUnless(is_fraction(Fraction('3/2')))
            self.failUnless(is_fraction(Fraction('-4/5')))
        self.failUnless(is_fraction(Rational(3, 5)))
        self.failUnless(is_fraction(Rational(-4, 5)))
        self.failUnless(is_fraction(Rational.from_string("3/5")))
        self.failUnless(is_fraction(Rational.from_string("-4/5")))

        self.failIf(is_fraction(3 / 5))
        self.failIf(is_fraction('3/5'))
        self.failIf(is_fraction('2.7'))
        self.failIf(is_fraction(2.7))
        self.failIf(is_fraction('notafraction'))
        self.failIf(is_fraction(None))
コード例 #6
0
 def check_type_and_value(self, tag, etype, evalue):
     if etype == FRACTION:
         self.assert_(is_fraction(tag.value))
     else:
         self.assert_(isinstance(tag.value, etype))
     self.assertEqual(tag.value, evalue)
コード例 #7
0
ファイル: xmp.py プロジェクト: Sanju8943/TIDoS-Framework-1
    def _convert_to_string(self, value, type):
        """
        Convert a value to its corresponding string representation, suitable to
        pass to libexiv2.

        :param value: the value to be converted
        :param type: the simple type of the value
        :type type: string

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

        :raise XmpValueError: if the conversion fails
        """
        if type == 'Boolean':
            if isinstance(value, bool):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Date':
            if isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.xmp(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'GPSCoordinate':
            if isinstance(value, GPSCoordinate):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Integer':
            if isinstance(value, (int, long)):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'MIMEType':
            if isinstance(value, tuple) and len(value) == 2:
                return '/'.join(value)
            else:
                raise XmpValueError(value, type)

        elif type in ('AgentName', 'ProperName', 'Text', 'URI', 'URL'):
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        elif type == 'Rational':
            if is_fraction(value):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == '':
            # Unknown type, assume string
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        raise NotImplementedError('XMP conversion for type [%s]' % type)
コード例 #8
0
 def check_type_and_value(self, tag, etype, evalue):
     if etype == FRACTION:
         self.assert_(is_fraction(tag.value))
     else:
         self.assert_(isinstance(tag.value, etype))
     self.assertEqual(tag.value, evalue)
コード例 #9
0
ファイル: xmp.py プロジェクト: AbdealiJK/pyexiv2
    def _convert_to_string(self, value, type):
        """
        Convert a value to its corresponding string representation, suitable to
        pass to libexiv2.

        :param value: the value to be converted
        :param type: the simple type of the value
        :type type: string

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

        :raise XmpValueError: if the conversion fails
        """
        if type == 'Boolean':
            if isinstance(value, bool):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Date':
            if isinstance(value, (datetime.date, datetime.datetime)):
                return DateTimeFormatter.xmp(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'GPSCoordinate':
            if isinstance(value, GPSCoordinate):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Integer':
            if isinstance(value, (int, long)):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'MIMEType':
            if isinstance(value, tuple) and len(value) == 2:
                return '/'.join(value)
            else:
                raise XmpValueError(value, type)

        elif type in ('AgentName', 'ProperName', 'Text', 'URI', 'URL'):
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        elif type == 'Rational':
            if is_fraction(value):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == '':
            # Unknown type, assume string
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        raise NotImplementedError('XMP conversion for type [%s]' % type)
コード例 #10
0
ファイル: exif.py プロジェクト: enaut/py3exiv2
    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 ExifValueError: if the conversion fails
        """
        if self.type == 'Ascii':
            if isinstance(value, datetime.datetime):
                return DateTimeFormatter.exif(value)

            elif isinstance(value, datetime.date):
                if self.key == 'Exif.GPSInfo.GPSDateStamp':
                    # Special case
                    return DateTimeFormatter.exif(value)

                else:
                    return '%s 00:00:00' % DateTimeFormatter.exif(value)

            else:
                return value

        elif self.type in ('Byte', 'SByte'):
            if isinstance(value, str):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)

            elif isinstance(value, bytes):
                return value

            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Comment':
            return self._convert_to_bytes(value)

        elif self.type == 'Short':
            if isinstance(value, int) and value >= 0:
                return str(value)

            else:
                raise ExifValueError(value, self.type)

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

            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Long':
            if isinstance(value, int) and value >= 0:
                return str(value)

            else:
                raise ExifValueError(value, self.type)

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

            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Rational':
            if is_fraction(value) and value.numerator >= 0:
                return fraction_to_string(value)

            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SRational':
            if is_fraction(value):
                return fraction_to_string(value)

            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Undefined':
            if isinstance(value, str):
                try:
                    return string_to_undefined(value)
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)

            elif isinstance(value, bytes):
                return string_to_undefined(value)

            else:
                raise ExifValueError(value, self.type)

        raise ExifValueError(value, self.type)
コード例 #11
0
ファイル: xmp.py プロジェクト: Namejs/workr
    def _convert_to_string(self, value, type):
        """
        Convert a value to its corresponding string representation, suitable to
        pass to libexiv2.

        :param value: the value to be converted
        :param type: the simple type of the value
        :type type: string

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

        :raise XmpValueError: if the conversion fails
        """
        if type == 'Boolean':
            if isinstance(value, bool):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Date':
            if isinstance(value, datetime.datetime):
                if value.hour == 0 and value.minute == 0 and \
                    value.second == 0 and value.microsecond == 0 and \
                    (value.tzinfo is None or value.tzinfo == FixedOffset()):
                    return value.strftime('%Y-%m-%d')
                elif value.second == 0 and value.microsecond == 0:
                    return value.strftime('%Y-%m-%dT%H:%M%Z')
                elif value.microsecond == 0:
                    return value.strftime('%Y-%m-%dT%H:%M:%S%Z')
                else:
                    r = value.strftime('%Y-%m-%dT%H:%M:%S.')
                    r += str(int(value.microsecond) / 1E6)[2:]
                    r += value.strftime('%Z')
                    return r
            elif isinstance(value, datetime.date):
                return value.isoformat()
            else:
                raise XmpValueError(value, type)

        elif type == 'GPSCoordinate':
            if isinstance(value, GPSCoordinate):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'Integer':
            if isinstance(value, (int, long)):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == 'MIMEType':
            if isinstance(value, tuple) and len(value) == 2:
                return '/'.join(value)
            else:
                raise XmpValueError(value, type)

        elif type in ('AgentName', 'ProperName', 'Text', 'URI', 'URL'):
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        elif type == 'Rational':
            if is_fraction(value):
                return str(value)
            else:
                raise XmpValueError(value, type)

        elif type == '':
            # Unknown type, assume string
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise XmpValueError(value, type)
            elif isinstance(value, str):
                return value
            else:
                raise XmpValueError(value, type)

        raise NotImplementedError('XMP conversion for type [%s]' % type)
コード例 #12
0
ファイル: test_utils.py プロジェクト: Czaki/cyexiv2
def test_is_fraction(is_f, obj):
    assert is_fraction(obj) == is_f
コード例 #13
0
ファイル: exif.py プロジェクト: Sanju8943/TIDoS-Framework-1
    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 ExifValueError: if the conversion fails
        """
        if self.type == 'Ascii':
            if isinstance(value, datetime.datetime):
                return DateTimeFormatter.exif(value)
            elif isinstance(value, datetime.date):
                if self.key == 'Exif.GPSInfo.GPSDateStamp':
                    # Special case
                    return DateTimeFormatter.exif(value)
                else:
                    return '%s 00:00:00' % DateTimeFormatter.exif(value)
            elif isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)
            elif isinstance(value, str):
                return value
            else:
                raise ExifValueError(value, self.type)

        elif self.type in ('Byte', 'SByte'):
            if isinstance(value, unicode):
                try:
                    return value.encode('utf-8')
                except UnicodeEncodeError:
                    raise ExifValueError(value, self.type)
            elif isinstance(value, str):
                return value
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Comment':
            if value is not None and self.raw_value is not None and \
                self.raw_value.startswith('charset='):
                charset, val = self.raw_value.split(' ', 1)
                charset = charset.split('=')[1].strip('"')
                encoding = self._match_encoding(charset)
                try:
                    val = value.encode(encoding)
                except UnicodeError:
                    # Best effort, do not fail just because the original
                    # encoding of the tag cannot encode the new value.
                    pass
                else:
                    return 'charset="%s" %s' % (charset, val)

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

        elif self.type == 'Short':
            if isinstance(value, int) and value >= 0:
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SShort':
            if isinstance(value, int):
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Long':
            if isinstance(value, (int, long)) and value >= 0:
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SLong':
            if isinstance(value, (int, long)):
                return str(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'Rational':
            if is_fraction(value) and value.numerator >= 0:
                return fraction_to_string(value)
            else:
                raise ExifValueError(value, self.type)

        elif self.type == 'SRational':
            if is_fraction(value):
                return fraction_to_string(value)
            else:
                raise ExifValueError(value, self.type)

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

        raise ExifValueError(value, self.type)