From 6abf0354bced3fc5f3a592870723c7446ae8747d Mon Sep 17 00:00:00 2001 From: Lumir Balhar Date: Wed, 20 Sep 2023 14:18:16 +0200 Subject: [PATCH] Remove dependency on `future` --- ffmpeg/_ffmpeg.py | 5 +---- ffmpeg/_run.py | 6 +++--- ffmpeg/_utils.py | 36 +----------------------------------- ffmpeg/nodes.py | 3 +-- requirements.txt | 1 - setup.py | 3 +-- tox.ini | 1 - 7 files changed, 7 insertions(+), 48 deletions(-) diff --git a/ffmpeg/_ffmpeg.py b/ffmpeg/_ffmpeg.py index 007624bb..57dc0c96 100644 --- a/ffmpeg/_ffmpeg.py +++ b/ffmpeg/_ffmpeg.py @@ -1,8 +1,5 @@ from __future__ import unicode_literals -from past.builtins import basestring -from ._utils import basestring - from .nodes import ( filter_operator, GlobalNode, @@ -79,7 +76,7 @@ def output(*streams_and_filename, **kwargs): """ streams_and_filename = list(streams_and_filename) if 'filename' not in kwargs: - if not isinstance(streams_and_filename[-1], basestring): + if not isinstance(streams_and_filename[-1], str): raise ValueError('A filename must be provided') kwargs['filename'] = streams_and_filename.pop(-1) streams = streams_and_filename diff --git a/ffmpeg/_run.py b/ffmpeg/_run.py index f42d1d73..7a8b3937 100644 --- a/ffmpeg/_run.py +++ b/ffmpeg/_run.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals from .dag import get_outgoing_edges, topo_sort -from ._utils import basestring, convert_kwargs_to_cmd_line_args +from ._utils import convert_kwargs_to_cmd_line_args from builtins import str from functools import reduce import copy @@ -140,7 +140,7 @@ def _get_output_args(node, stream_name_map): args += ['-b:a', str(kwargs.pop('audio_bitrate'))] if 'video_size' in kwargs: video_size = kwargs.pop('video_size') - if not isinstance(video_size, basestring) and isinstance(video_size, Iterable): + if not isinstance(video_size, str) and isinstance(video_size, Iterable): video_size = '{}x{}'.format(video_size[0], video_size[1]) args += ['-video_size', video_size] args += convert_kwargs_to_cmd_line_args(kwargs) @@ -185,7 +185,7 @@ def compile(stream_spec, cmd='ffmpeg', overwrite_output=False): This is the same as calling :meth:`get_args` except that it also includes the ``ffmpeg`` command as the first argument. """ - if isinstance(cmd, basestring): + if isinstance(cmd, str): cmd = [cmd] elif type(cmd) != list: cmd = list(cmd) diff --git a/ffmpeg/_utils.py b/ffmpeg/_utils.py index 9baa2c78..21f612ea 100644 --- a/ffmpeg/_utils.py +++ b/ffmpeg/_utils.py @@ -1,31 +1,9 @@ from __future__ import unicode_literals from builtins import str -from past.builtins import basestring import hashlib import sys -if sys.version_info.major == 2: - # noinspection PyUnresolvedReferences,PyShadowingBuiltins - str = str - -try: - from collections.abc import Iterable -except ImportError: - from collections import Iterable - - -# `past.builtins.basestring` module can't be imported on Python3 in some environments (Ubuntu). -# This code is copy-pasted from it to avoid crashes. -class BaseBaseString(type): - def __instancecheck__(cls, instance): - return isinstance(instance, (bytes, str)) - - def __subclasshook__(cls, thing): - # TODO: What should go here? - raise NotImplemented - - def with_metaclass(meta, *bases): class metaclass(meta): __call__ = type.__call__ @@ -39,25 +17,13 @@ def __new__(cls, name, this_bases, d): return metaclass('temporary_class', None, {}) -if sys.version_info.major >= 3: - - class basestring(with_metaclass(BaseBaseString)): - pass - -else: - # noinspection PyUnresolvedReferences,PyCompatibility - from builtins import basestring - - def _recursive_repr(item): """Hack around python `repr` to deterministically represent dictionaries. This is able to represent more things than json.dumps, since it does not require things to be JSON serializable (e.g. datetimes). """ - if isinstance(item, basestring): - result = str(item) - elif isinstance(item, list): + if isinstance(item, list): result = '[{}]'.format(', '.join([_recursive_repr(x) for x in item])) elif isinstance(item, dict): kv_pairs = [ diff --git a/ffmpeg/nodes.py b/ffmpeg/nodes.py index e8b28385..cc219c72 100644 --- a/ffmpeg/nodes.py +++ b/ffmpeg/nodes.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -from past.builtins import basestring from .dag import KwargReprNode from ._utils import escape_chars, get_hash_int from builtins import object @@ -68,7 +67,7 @@ def __getitem__(self, index): """ if self.selector is not None: raise ValueError('Stream already has a selector: {}'.format(self)) - elif not isinstance(index, basestring): + elif not isinstance(index, str): raise TypeError("Expected string index (e.g. 'a'); got {!r}".format(index)) return self.node.stream(label=self.label, selector=index) diff --git a/requirements.txt b/requirements.txt index f8b347e9..b4bc370e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,6 @@ certifi==2019.3.9 chardet==3.0.4 docutils==0.14 filelock==3.0.12 -future==0.17.1 idna==2.8 imagesize==1.1.0 importlib-metadata==0.17 diff --git a/setup.py b/setup.py index 72f381cb..2fbf9a3d 100644 --- a/setup.py +++ b/setup.py @@ -68,10 +68,9 @@ download_url=download_url, keywords=keywords, long_description=long_description, - install_requires=['future'], + install_requires=[], extras_require={ 'dev': [ - 'future==0.17.1', 'numpy==1.16.4', 'pytest-mock==1.10.4', 'pytest==4.6.1', diff --git a/tox.ini b/tox.ini index 98814078..eb8c6622 100644 --- a/tox.ini +++ b/tox.ini @@ -19,6 +19,5 @@ python = [testenv] commands = py.test -vv deps = - future pytest pytest-mock