Skip to content

Commit

Permalink
Remove dependency on future
Browse files Browse the repository at this point in the history
  • Loading branch information
frenzymadness committed Sep 20, 2023
1 parent df129c7 commit 6abf035
Show file tree
Hide file tree
Showing 7 changed files with 7 additions and 48 deletions.
5 changes: 1 addition & 4 deletions ffmpeg/_ffmpeg.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
from __future__ import unicode_literals

from past.builtins import basestring
from ._utils import basestring

from .nodes import (
filter_operator,
GlobalNode,
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions ffmpeg/_run.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
36 changes: 1 addition & 35 deletions ffmpeg/_utils.py
Original file line number Diff line number Diff line change
@@ -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__
Expand All @@ -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 = [
Expand Down
3 changes: 1 addition & 2 deletions ffmpeg/nodes.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)

Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
1 change: 0 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,5 @@ python =
[testenv]
commands = py.test -vv
deps =
future
pytest
pytest-mock

0 comments on commit 6abf035

Please sign in to comment.