From cd3d3715b8ed3d11290bd700822e8b37d8b9e873 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 19:37:14 -0600 Subject: [PATCH 01/10] Support python3 --- .gitignore | 2 +- ffmpeg/__init__.py | 1 + ffmpeg/_ffmpeg.py | 1 + ffmpeg/_filters.py | 1 + ffmpeg/_run.py | 4 ++++ ffmpeg/nodes.py | 10 ++++++++-- ffmpeg/tests/test_ffmpeg.py | 6 +++--- 7 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index af3cbac..567ce92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .cache dist/ ffmpeg/tests/sample_data/dummy2.mp4 -venv +venv* diff --git a/ffmpeg/__init__.py b/ffmpeg/__init__.py index ff5c064..1953609 100644 --- a/ffmpeg/__init__.py +++ b/ffmpeg/__init__.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals from . import _filters, _ffmpeg, _run from ._filters import * from ._ffmpeg import * diff --git a/ffmpeg/_ffmpeg.py b/ffmpeg/_ffmpeg.py index c9c7f19..0d0a549 100644 --- a/ffmpeg/_ffmpeg.py +++ b/ffmpeg/_ffmpeg.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals from .nodes import ( FilterNode, GlobalNode, diff --git a/ffmpeg/_filters.py b/ffmpeg/_filters.py index 9794e2c..6329648 100644 --- a/ffmpeg/_filters.py +++ b/ffmpeg/_filters.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals from .nodes import ( FilterNode, operator, diff --git a/ffmpeg/_run.py b/ffmpeg/_run.py index 28a3e46..d57b286 100644 --- a/ffmpeg/_run.py +++ b/ffmpeg/_run.py @@ -1,3 +1,6 @@ +from __future__ import unicode_literals + +from past.builtins import basestring import operator as _operator import subprocess as _subprocess @@ -13,6 +16,7 @@ from .nodes import ( operator, OutputNode, ) +from functools import reduce def _get_stream_name(name): return '[{}]'.format(name) diff --git a/ffmpeg/nodes.py b/ffmpeg/nodes.py index 61c9ff0..c6359e2 100644 --- a/ffmpeg/nodes.py +++ b/ffmpeg/nodes.py @@ -1,3 +1,6 @@ +from __future__ import unicode_literals + +from builtins import object import hashlib import json @@ -18,15 +21,18 @@ class Node(object): formatted_props += ['{}={!r}'.format(key, self._kwargs[key]) for key in sorted(self._kwargs)] return '{}({})'.format(self._name, ','.join(formatted_props)) + def __hash__(self): + return int(self._hash, base=16) + def __eq__(self, other): return self._hash == other._hash def _update_hash(self): props = {'args': self._args, 'kwargs': self._kwargs} - my_hash = hashlib.md5(json.dumps(props, sort_keys=True)).hexdigest() + my_hash = hashlib.md5(json.dumps(props, sort_keys=True).encode('utf-8')).hexdigest() parent_hashes = [parent._hash for parent in self._parents] hashes = parent_hashes + [my_hash] - self._hash = hashlib.md5(','.join(hashes)).hexdigest() + self._hash = hashlib.md5(','.join(hashes).encode('utf-8')).hexdigest() class InputNode(Node): diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py index 7e38521..b8e983d 100644 --- a/ffmpeg/tests/test_ffmpeg.py +++ b/ffmpeg/tests/test_ffmpeg.py @@ -1,4 +1,4 @@ -from ffmpeg.nodes import operator, FilterNode +from __future__ import unicode_literals import ffmpeg import os import pytest @@ -72,12 +72,12 @@ def test_repr(): trim3 = ffmpeg.trim(in_file, start_frame=50, end_frame=60) concatted = ffmpeg.concat(trim1, trim2, trim3) output = ffmpeg.output(concatted, 'dummy2.mp4') - assert repr(in_file) == "input(filename='dummy.mp4')" + assert repr(in_file) == "input(filename={!r})".format('dummy.mp4') assert repr(trim1) == "trim(end_frame=20,start_frame=10)" assert repr(trim2) == "trim(end_frame=40,start_frame=30)" assert repr(trim3) == "trim(end_frame=60,start_frame=50)" assert repr(concatted) == "concat(n=3)" - assert repr(output) == "output(filename='dummy2.mp4')" + assert repr(output) == "output(filename={!r})".format('dummy2.mp4') def test_get_args_simple(): From d0e226e2635e357b2925ee691563a8bb6937f0a1 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:18:19 -0600 Subject: [PATCH 02/10] Add tox support --- .gitignore | 1 + .python-version | 5 +++++ .travis.yml | 14 ++++++++++++-- requirements.txt | 2 ++ setup.py | 36 +++++++++++++++++++++++++----------- tox.ini | 13 +++++++++++++ 6 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 .python-version create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 567ce92..fe66d8d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ dist/ ffmpeg/tests/sample_data/dummy2.mp4 venv* +.tox/ diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e2d8f77 --- /dev/null +++ b/.python-version @@ -0,0 +1,5 @@ +3.3.6 +3.4.6 +3.5.3 +3.6.1 +jython-2.7.0 diff --git a/.travis.yml b/.travis.yml index 4442bf1..12ea7bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,18 @@ language: python before_install: - curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz - tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz +env: + - TOX_ENV=py27 + - TOX_ENV=py33 + - TOX_ENV=py34 + - TOX_ENV=py35 + - TOX_ENV=py36 + - TOX_ENV=pypy install: - - pip install -r requirements.txt + - pip install tox script: - export PATH=$(readlink -f ffmpeg-3.3.1-64bit-static):$PATH - - py.test + - tox -e $TOX_ENV +cache: + directories: + - .tox diff --git a/requirements.txt b/requirements.txt index 55ff9de..d7e2779 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ +future pytest sphinx +tox diff --git a/setup.py b/setup.py index d8b6334..395acec 100644 --- a/setup.py +++ b/setup.py @@ -64,15 +64,29 @@ misc_keywords = [ keywords = misc_keywords + file_formats + filter_names setup( - name = 'ffmpeg-python', - packages = ['ffmpeg'], - version = '0.1.5', - description = 'Python bindings for FFmpeg - with support for complex filtering', - author = 'Karl Kroening', - author_email = 'karlk@kralnet.us', - url = 'https://github.com/kkroening/ffmpeg-python', - download_url = download_url, - classifiers = [], - keywords = keywords, - long_description = long_description, + name='ffmpeg-python', + packages=['ffmpeg'], + version='0.1.5', + description='Python bindings for FFmpeg - with support for complex filtering', + author='Karl Kroening', + author_email='karlk@kralnet.us', + url='https://github.com/kkroening/ffmpeg-python', + download_url=download_url, + keywords=keywords, + long_description=long_description, + install_requires=['future'], + classifiers=[ + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + ], ) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..ed5c2e6 --- /dev/null +++ b/tox.ini @@ -0,0 +1,13 @@ +# Tox (https://tox.readthedocs.io/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. + +[tox] +envlist = py27, py33, py34, py35, py36, pypy + +[testenv] +commands = py.test +deps = + future + pytest From 6960751de0b14e5a3640fe16d91f44008397026d Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:29:52 -0600 Subject: [PATCH 03/10] Make `setup.py test` work --- .gitignore | 4 +++- requirements.txt | 1 + setup.cfg | 2 ++ setup.py | 7 ++++--- 4 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 setup.cfg diff --git a/.gitignore b/.gitignore index fe66d8d..f0d6df7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .cache +.eggs +.tox/ dist/ ffmpeg/tests/sample_data/dummy2.mp4 +ffmpeg_python.egg-info/ venv* -.tox/ diff --git a/requirements.txt b/requirements.txt index d7e2779..b5e8ae3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ future pytest +pytest-runner sphinx tox diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..b7e4789 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[aliases] +test=pytest diff --git a/setup.py b/setup.py index 395acec..0e11dab 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ -from distutils.core import setup -from ffmpeg._filters import __all__ as filter_names +from setuptools import setup from textwrap import dedent import subprocess @@ -61,11 +60,13 @@ misc_keywords = [ 'wrapper', ] -keywords = misc_keywords + file_formats + filter_names +keywords = misc_keywords + file_formats setup( name='ffmpeg-python', packages=['ffmpeg'], + setup_requires=['pytest-runner'], + tests_require=['pytest'], version='0.1.5', description='Python bindings for FFmpeg - with support for complex filtering', author='Karl Kroening', From f2ae3c7e6f88cacb5934e66f2ccd4c657221ea4d Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:34:06 -0600 Subject: [PATCH 04/10] Try different travis config --- .travis.yml | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 12ea7bc..dfdc8fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,13 +2,26 @@ language: python before_install: - curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz - tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz -env: - - TOX_ENV=py27 - - TOX_ENV=py33 - - TOX_ENV=py34 - - TOX_ENV=py35 - - TOX_ENV=py36 - - TOX_ENV=pypy +matrix: + include: + - python: 2.7 + env: + - TOXENV=py27 + - python: 3.3 + env: + - TOXENV=py33 + - python: 3.4 + env: + - TOXENV=py34 + - python: 3.5 + env: + - TOXENV=py35 + - python: 3.6 + env: + - TOXENV=py36 + - python: pypy + env: + - TOXENV=pypy install: - pip install tox script: From 06cf7c73c7a7986da5733ff47570fbf3754793f5 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:36:11 -0600 Subject: [PATCH 05/10] More travis config --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index dfdc8fb..7267f91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,22 +6,22 @@ matrix: include: - python: 2.7 env: - - TOXENV=py27 + - TOX_ENV=py27 - python: 3.3 env: - - TOXENV=py33 + - TOX_ENV=py33 - python: 3.4 env: - - TOXENV=py34 + - TOX_ENV=py34 - python: 3.5 env: - - TOXENV=py35 + - TOX_ENV=py35 - python: 3.6 env: - - TOXENV=py36 + - TOX_ENV=py36 - python: pypy env: - - TOXENV=pypy + - TOX_ENV=pypy install: - pip install tox script: From 1c5418dd63eeae4a1bcac345d1f838dd9fbc0842 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:40:15 -0600 Subject: [PATCH 06/10] Cache ffmpeg download on travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7267f91..6ff5be8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: python before_install: - - curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz - - tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz + - [ -d ffmpeg-3.3.1-64bit-static ] || (curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz && tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz) matrix: include: - python: 2.7 @@ -30,3 +29,4 @@ script: cache: directories: - .tox + - ffmpeg-3.3.1-64bit-static From f5410a87c0a315bff3dd2100f46786d3df2ccdf8 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:43:32 -0600 Subject: [PATCH 07/10] Fix travis yaml syntax --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6ff5be8..03079f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,10 @@ language: python before_install: - - [ -d ffmpeg-3.3.1-64bit-static ] || (curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz && tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz) + - > + [ -d ffmpeg-3.3.1-64bit-static ] || ( + curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz && + tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz + ) matrix: include: - python: 2.7 From 9c22a16360aa23fd10865526f1a179cfd2d4612d Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Tue, 13 Jun 2017 23:46:44 -0600 Subject: [PATCH 08/10] Yet more travis yaml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 03079f6..4e29927 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: python before_install: - > - [ -d ffmpeg-3.3.1-64bit-static ] || ( + [ -d ffmpeg-3.3.1-64bit-static/ffmpeg ] || ( curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz && tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz ) From ac1f89ba5550a28c5ab1ea00a99af12debf7c3a3 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Wed, 14 Jun 2017 00:11:29 -0600 Subject: [PATCH 09/10] Test travis ffmpeg download caching From 26e7cff382111ee44d90392520f643881f336144 Mon Sep 17 00:00:00 2001 From: Karl Kroening Date: Wed, 14 Jun 2017 00:21:59 -0600 Subject: [PATCH 10/10] Fix check in travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4e29927..f1863cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: python before_install: - > - [ -d ffmpeg-3.3.1-64bit-static/ffmpeg ] || ( + [ -f ffmpeg-3.3.1-64bit-static/ffmpeg ] || ( curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.3.1-64bit-static.tar.xz && tar Jxf ffmpeg-3.3.1-64bit-static.tar.xz )