Hello community,

here is the log from the commit of package python-pymediainfo for 
openSUSE:Factory checked in at 2019-09-23 12:34:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pymediainfo (Old)
 and      /work/SRC/openSUSE:Factory/.python-pymediainfo.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pymediainfo"

Mon Sep 23 12:34:04 2019 rev:6 rq:731753 version:4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pymediainfo/python-pymediainfo.changes    
2019-09-16 10:52:47.799153625 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pymediainfo.new.7948/python-pymediainfo.changes
  2019-09-23 12:37:50.473605778 +0200
@@ -1,0 +2,7 @@
+Wed Sep 18 14:25:50 UTC 2019 - Luigi Baldoni <[email protected]>
+
+- Update to version 4.1
+  * Added an argument to pass custom options to the parse method
+    (#71)
+
+-------------------------------------------------------------------

Old:
----
  pymediainfo-4.0.tar.gz

New:
----
  pymediainfo-4.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pymediainfo.spec ++++++
--- /var/tmp/diff_new_pack.NtJifU/_old  2019-09-23 12:37:50.845605716 +0200
+++ /var/tmp/diff_new_pack.NtJifU/_new  2019-09-23 12:37:50.849605716 +0200
@@ -16,9 +16,8 @@
 #
 
 
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pymediainfo
-Version:        4.0
+Version:        4.1
 Release:        0
 Summary:        Python wrapper for the mediainfo library
 License:        MIT

++++++ pymediainfo-4.0.tar.gz -> pymediainfo-4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/PKG-INFO new/pymediainfo-4.1/PKG-INFO
--- old/pymediainfo-4.0/PKG-INFO        2019-04-04 17:46:38.000000000 +0200
+++ new/pymediainfo-4.1/PKG-INFO        2019-09-18 14:58:03.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pymediainfo
-Version: 4.0
+Version: 4.1
 Summary: A Python wrapper for the mediainfo library.
 Home-page: https://github.com/sbraz/pymediainfo
 Author: Louis Sautier
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/appveyor.yml 
new/pymediainfo-4.1/appveyor.yml
--- old/pymediainfo-4.0/appveyor.yml    2019-04-04 17:46:33.000000000 +0200
+++ new/pymediainfo-4.1/appveyor.yml    2019-09-18 14:57:58.000000000 +0200
@@ -1,5 +1,5 @@
 environment:
-  MEDIAINFO_VERSION: 18.12
+  MEDIAINFO_VERSION: 19.09
   TWINE_PASSWORD:
     secure: /EO8CxTxhQVNsGNZZvU51jjHwPW524rgddNlwOAyLoA=
   matrix:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/pymediainfo/__init__.py 
new/pymediainfo-4.1/pymediainfo/__init__.py
--- old/pymediainfo-4.0/pymediainfo/__init__.py 2019-04-04 17:46:33.000000000 
+0200
+++ new/pymediainfo-4.1/pymediainfo/__init__.py 2019-09-18 14:57:58.000000000 
+0200
@@ -5,6 +5,7 @@
 import json
 import ctypes
 import sys
+import warnings
 from pkg_resources import get_distribution, DistributionNotFound
 import xml.etree.ElementTree as ET
 
@@ -199,7 +200,11 @@
                 lib.MediaInfo_Delete.restype  = None
                 lib.MediaInfo_Close.argtypes = [ctypes.c_void_p]
                 lib.MediaInfo_Close.restype = None
-                return lib
+                # Obtain the library version
+                lib_version_str = lib.MediaInfo_Option(None, "Info_Version", 
"")
+                lib_version_str = re.search(r"^MediaInfoLib - v(\S+)", 
lib_version_str).group(1)
+                lib_version = tuple(int(_) for _ in lib_version_str.split("."))
+                return (lib, lib_version_str, lib_version)
             except OSError:
                 # If we've tried all possible filenames
                 if i == len(library_names):
@@ -219,7 +224,7 @@
     @classmethod
     def parse(cls, filename, library_file=None, cover_data=False,
             encoding_errors="strict", parse_speed=0.5, text=False,
-            full=True, legacy_stream_display=False):
+            full=True, legacy_stream_display=False, mediainfo_options=None):
         """
         Analyze a media file using libmediainfo.
         If libmediainfo is located in a non-standard location, the 
`library_file` parameter can be used:
@@ -243,6 +248,8 @@
         :param bool full: display additional tags, including computer-readable 
values
             for sizes and durations.
         :param bool legacy_stream_display: display additional information 
about streams.
+        :param dict mediainfo_options: additional options that will be passed 
to the `MediaInfo_Option` function,
+            for example: ``{"Language": "raw"}``
         :type filename: str or pathlib.Path
         :rtype: str if `text` is ``True``.
         :rtype: :class:`MediaInfo` otherwise.
@@ -253,7 +260,7 @@
         :raises RuntimeError: if parsing fails, this should not
             happen unless libmediainfo itself fails.
         """
-        lib = cls._get_library(library_file)
+        lib, lib_version_str, lib_version = cls._get_library(library_file)
         if pathlib is not None and isinstance(filename, pathlib.PurePath):
             filename = str(filename)
             url = False
@@ -265,9 +272,8 @@
             # Test whether the file is readable
             with open(filename, "rb"):
                 pass
-        # Obtain the library version
-        lib_version = lib.MediaInfo_Option(None, "Info_Version", "")
-        lib_version = tuple(int(_) for _ in re.search("^MediaInfoLib - 
v(\\S+)", lib_version).group(1).split("."))
+        # Create a MediaInfo handle
+        handle = lib.MediaInfo_New()
         # The XML option was renamed starting with version 17.10
         if lib_version >= (17, 10):
             xml_option = "OLDXML"
@@ -275,10 +281,8 @@
             xml_option = "XML"
         # Cover_Data is not extracted by default since version 18.03
         # See 
https://github.com/MediaArea/MediaInfoLib/commit/d8fd88a1c282d1c09388c55ee0b46029e7330690
-        if cover_data and lib_version >= (18, 3):
-            lib.MediaInfo_Option(None, "Cover_Data", "base64")
-        # Create a MediaInfo handle
-        handle = lib.MediaInfo_New()
+        if lib_version >= (18, 3):
+            lib.MediaInfo_Option(handle, "Cover_Data", "base64" if cover_data 
else "")
         lib.MediaInfo_Option(handle, "CharSet", "UTF-8")
         # Fix for https://github.com/sbraz/pymediainfo/issues/22
         # Python 2 does not change LC_CTYPE
@@ -286,14 +290,28 @@
         if (sys.version_info < (3,) and os.name == "posix"
                 and locale.getlocale() == (None, None)):
             locale.setlocale(locale.LC_CTYPE, locale.getdefaultlocale())
-        lib.MediaInfo_Option(None, "Inform", "" if text else xml_option)
-        lib.MediaInfo_Option(None, "Complete", "1" if full else "")
-        lib.MediaInfo_Option(None, "ParseSpeed", str(parse_speed))
-        lib.MediaInfo_Option(None, "LegacyStreamDisplay", "1" if 
legacy_stream_display else "")
+        lib.MediaInfo_Option(handle, "Inform", "" if text else xml_option)
+        lib.MediaInfo_Option(handle, "Complete", "1" if full else "")
+        lib.MediaInfo_Option(handle, "ParseSpeed", str(parse_speed))
+        lib.MediaInfo_Option(handle, "LegacyStreamDisplay", "1" if 
legacy_stream_display else "")
+        if mediainfo_options is not None:
+            if lib_version < (19, 9):
+                warnings.warn("This version of MediaInfo ({}) does not support 
resetting all options to their default values, "
+                    "passing it custom options is not recommended and may 
result in unpredictable behavior, "
+                    "see 
https://github.com/MediaArea/MediaInfoLib/issues/1128".format(lib_version_str),
+                    RuntimeWarning
+                )
+            for option_name, option_value in mediainfo_options.items():
+                lib.MediaInfo_Option(handle, option_name, option_value)
         if lib.MediaInfo_Open(handle, filename) == 0:
             raise RuntimeError("An eror occured while opening {}"
                     " with libmediainfo".format(filename))
         output = lib.MediaInfo_Inform(handle, 0)
+        # Reset all options to their defaults so that they aren't
+        # retained when the parse method is called several times
+        # https://github.com/MediaArea/MediaInfoLib/issues/1128
+        if lib_version > (19, 7):
+            lib.MediaInfo_Option(handle, "Reset", "")
         # Delete the handle
         lib.MediaInfo_Close(handle)
         lib.MediaInfo_Delete(handle)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/pymediainfo.egg-info/PKG-INFO 
new/pymediainfo-4.1/pymediainfo.egg-info/PKG-INFO
--- old/pymediainfo-4.0/pymediainfo.egg-info/PKG-INFO   2019-04-04 
17:46:38.000000000 +0200
+++ new/pymediainfo-4.1/pymediainfo.egg-info/PKG-INFO   2019-09-18 
14:58:02.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pymediainfo
-Version: 4.0
+Version: 4.1
 Summary: A Python wrapper for the mediainfo library.
 Home-page: https://github.com/sbraz/pymediainfo
 Author: Louis Sautier
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/setup.cfg 
new/pymediainfo-4.1/setup.cfg
--- old/pymediainfo-4.0/setup.cfg       2019-04-04 17:46:38.000000000 +0200
+++ new/pymediainfo-4.1/setup.cfg       2019-09-18 14:58:03.000000000 +0200
@@ -13,7 +13,7 @@
 test = pytest
 
 [tool:pytest]
-addopts = -vv
+addopts = -vv -r a
 
 [bdist_wheel]
 universal = 1
Binary files old/pymediainfo-4.0/tests/data/sample.mkv and 
new/pymediainfo-4.1/tests/data/sample.mkv differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymediainfo-4.0/tests/test_pymediainfo.py 
new/pymediainfo-4.1/tests/test_pymediainfo.py
--- old/pymediainfo-4.0/tests/test_pymediainfo.py       2019-04-04 
17:46:33.000000000 +0200
+++ new/pymediainfo-4.1/tests/test_pymediainfo.py       2019-09-18 
14:57:58.000000000 +0200
@@ -120,16 +120,26 @@
 
 class MediaInfoCoverDataTest(unittest.TestCase):
     def setUp(self):
-        self.mi = MediaInfo.parse(
+        self.cover_mi = MediaInfo.parse(
                 os.path.join(data_dir, "sample_with_cover.mp3"),
                 cover_data=True
         )
+        self.no_cover_mi = MediaInfo.parse(
+                os.path.join(data_dir, "sample_with_cover.mp3")
+        )
     def test_parse_cover_data(self):
         self.assertEqual(
-                self.mi.tracks[0].cover_data,
+                self.cover_mi.tracks[0].cover_data,
                 
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAAAAA"
                 
"AAAQCEeRdzAAAADUlEQVR4nGP4x8DwHwAE/AH+QSRCQgAAAABJRU5ErkJggg=="
         )
+    def test_parse_no_cover_data(self):
+        _, lib_version_str, lib_version = MediaInfo._get_library()
+        if lib_version < (18, 3):
+            pytest.skip("Cover_Data option not supported by this library 
version "
+                "(v{} detected, v18.03 required)".format(lib_version_str)
+            )
+        self.assertEqual(self.no_cover_mi.tracks[0].cover_data, None)
 
 class MediaInfoTrackParsingTest(unittest.TestCase):
     def test_track_parsing(self):
@@ -181,3 +191,24 @@
     def test_legacy_stream_display(self):
         self.assertEqual(self.mi.tracks[1].channel_s, 2)
         self.assertEqual(self.legacy_mi.tracks[1].channel_s, "2 / 1 / 1")
+
+class MediaInfoOptionsTest(unittest.TestCase):
+    def setUp(self):
+        _, lib_version_str, lib_version = MediaInfo._get_library()
+        if lib_version < (19, 9):
+            pytest.skip("Reset option not supported by this library version "
+                "(v{} detected, v19.09 required)".format(lib_version_str)
+            )
+        self.raw_language_mi = MediaInfo.parse(
+            os.path.join(data_dir, "sample.mkv"),
+            mediainfo_options={"Language": "raw"},
+        )
+        # Parsing the file without the custom options afterwards
+        # allows us to check that the "Reset" option worked
+        # https://github.com/MediaArea/MediaInfoLib/issues/1128
+        self.normal_mi = MediaInfo.parse(
+            os.path.join(data_dir, "sample.mkv"),
+        )
+    def test_mediainfo_options(self):
+        self.assertEqual(self.normal_mi.tracks[1].other_language[0], "English")
+        self.assertEqual(self.raw_language_mi.tracks[1].language, "en")


Reply via email to