mvadkert / rpms / file

Forked from rpms/file 5 years ago
Clone
Blob Blame History Raw
From 379acb2065d904acf3a9814adfd93cda71a6ca21 Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Tue, 4 Apr 2017 20:48:40 +0000
Subject: [PATCH] retain python 2 compatibility, factoring out the conversion
 functions.

Upstream-commit: 8a942980f3f705226300f43f4b49a557c0918660
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
 python/magic.py | 68 ++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 38 insertions(+), 30 deletions(-)

diff --git a/python/magic.py b/python/magic.py
index b0f7a17..662569e 100644
--- a/python/magic.py
+++ b/python/magic.py
@@ -117,30 +117,43 @@ class Magic(object):
         """
         _close(self._magic_t)
 
+    @staticmethod
+    def __tostr(s):
+        if s is None:
+            return None
+        if isinstance(s, str):
+            return s
+        try:  # keep Python 2 compatibility
+            return str(s, 'utf-8')
+        except TypeError:
+            return str(s)
+
+    @staticmethod
+    def __tobytes(b):
+        if b is None:
+            return None
+        if isinstance(b, bytes):
+            return b
+        try:  # keep Python 2 compatibility
+            return bytes(b, 'utf-8')
+        except TypeError:
+            return bytes(b)
+
     def file(self, filename):
         """
         Returns a textual description of the contents of the argument passed
         as a filename or None if an error occurred and the MAGIC_ERROR flag
-        is set.  A call to errno() will return the numeric error code.
+        is set. A call to errno() will return the numeric error code.
         """
-        if isinstance(filename, bytes):
-            bi = filename
-        else:
-            try:  # keep Python 2 compatibility
-                bi = bytes(filename, 'utf-8')
-            except TypeError:
-                bi = bytes(filename)
-        r = _file(self._magic_t, bi)
-        if isinstance(r, str):
-            return r
-        else:
-            return str(r, 'utf-8')
+        return Magic.__tostr(_file(self._magic_t, Magic.__tobytes(filename)))
 
     def descriptor(self, fd):
         """
-        Like the file method, but the argument is a file descriptor.
+        Returns a textual description of the contents of the argument passed
+        as a file descriptor or None if an error occurred and the MAGIC_ERROR
+        flag is set. A call to errno() will return the numeric error code.
         """
-        return _descriptor(self._magic_t, fd)
+        return Magic.__tostr(_descriptor(self._magic_t, fd))
 
     def buffer(self, buf):
         """
@@ -148,22 +161,14 @@ class Magic(object):
         as a buffer or None if an error occurred and the MAGIC_ERROR flag
         is set. A call to errno() will return the numeric error code.
         """
-        r = _buffer(self._magic_t, buf, len(buf))
-        if isinstance(r, str):
-            return r
-        else:
-            return str(r, 'utf-8')
+        return Magic.__tostr(_buffer(self._magic_t, buf, len(buf)))
 
     def error(self):
         """
         Returns a textual explanation of the last error or None
         if there was no error.
         """
-        e = _error(self._magic_t)
-        if isinstance(e, str):
-            return e
-        else:
-            return str(e, 'utf-8')
+        return Magic.__tostr(_error(self._magic_t))
 
     def setflags(self, flags):
         """
@@ -184,35 +189,38 @@ class Magic(object):
 
         Returns 0 on success and -1 on failure.
         """
-        return _load(self._magic_t, filename)
+        return _load(self._magic_t, Magic.__tobytes(filename))
 
     def compile(self, dbs):
         """
         Compile entries in the colon separated list of database files
         passed as argument or the default database file if no argument.
-        Returns 0 on success and -1 on failure.
         The compiled files created are named from the basename(1) of each file
         argument with ".mgc" appended to it.
+
+        Returns 0 on success and -1 on failure.
         """
-        return _compile(self._magic_t, dbs)
+        return _compile(self._magic_t, Magic.__tobytes(dbs))
 
     def check(self, dbs):
         """
         Check the validity of entries in the colon separated list of
         database files passed as argument or the default database file
         if no argument.
+
         Returns 0 on success and -1 on failure.
         """
-        return _check(self._magic_t, dbs)
+        return _check(self._magic_t, Magic.__tobytes(dbs))
 
     def list(self, dbs):
         """
         Check the validity of entries in the colon separated list of
         database files passed as argument or the default database file
         if no argument.
+
         Returns 0 on success and -1 on failure.
         """
-        return _list(self._magic_t, dbs)
+        return _list(self._magic_t, Magic.__tobytes(dbs))
 
     def errno(self):
         """
-- 
2.10.2