mirror of
https://github.com/iluvcapra/pycmx.git
synced 2025-12-31 08:50:54 +00:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3109cdb7a | ||
|
|
3a9d81417e | ||
|
|
9838e6b357 | ||
|
|
41fdeeaf56 | ||
|
|
b3b6e57f6c | ||
|
|
62e7f10cf4 | ||
|
|
f855d3581d | ||
|
|
0b5555d333 | ||
|
|
7123a6f1bb | ||
|
|
173493a610 | ||
|
|
d20d9d1bdd | ||
|
|
d328e12283 | ||
|
|
4d83f81fc8 | ||
|
|
69b6c7236d | ||
|
|
71ffe8cd0d | ||
|
|
3fff6c8d2a | ||
|
|
e350565430 | ||
|
|
9ec30ede02 | ||
|
|
e5130b8011 | ||
|
|
00eaccabac | ||
|
|
521d86e444 | ||
|
|
0fdba2408b | ||
|
|
199bba2466 | ||
|
|
d8f0b5694e | ||
|
|
742b0f96c3 | ||
|
|
d44948bdc1 | ||
|
|
93cff15446 | ||
|
|
fc914409ce | ||
|
|
770e7f45a4 | ||
|
|
d3cf5fa5f2 | ||
|
|
67d2bd7093 | ||
|
|
26a7eae437 | ||
|
|
407aa1c1fd | ||
|
|
13d0a80a10 | ||
|
|
dcd2a22a43 | ||
|
|
c586740269 | ||
|
|
e28dbbbe5e | ||
|
|
41df450452 | ||
|
|
c37464036d | ||
|
|
9d89834eb3 | ||
|
|
8b53d2249c | ||
|
|
0cdbc4e9be | ||
|
|
e229e807b1 | ||
|
|
a7ee1f6737 | ||
|
|
9097de8efa | ||
|
|
bc6d7f34c0 | ||
|
|
b642f859f3 | ||
|
|
29a9a5fba7 | ||
|
|
20ff7d7ee8 | ||
|
|
183f121cfc | ||
|
|
e2dffcb745 | ||
|
|
8c2ba3cc09 | ||
|
|
c7569045c1 | ||
|
|
50bcac23bb | ||
|
|
67b1631ba9 | ||
|
|
85cbafba8f |
7
.github/workflows/python-package.yml
vendored
7
.github/workflows/python-package.yml
vendored
@@ -1,7 +1,7 @@
|
||||
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
||||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
||||
|
||||
name: Python package
|
||||
name: Lint and Test
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
|
||||
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
@@ -28,7 +28,8 @@ jobs:
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install flake8 pytest
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
python3 -m pip install -e .
|
||||
# if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
- name: Lint with flake8
|
||||
run: |
|
||||
# stop the build if there are Python syntax errors or undefined names
|
||||
|
||||
10
.github/workflows/pythonpublish.yml
vendored
10
.github/workflows/pythonpublish.yml
vendored
@@ -24,3 +24,13 @@ jobs:
|
||||
run: |
|
||||
python setup.py sdist bdist_wheel
|
||||
twine upload dist/*
|
||||
- name: Report to Mastodon
|
||||
uses: cbrgm/mastodon-github-action@v1.0.1
|
||||
with:
|
||||
message: |
|
||||
I just released a new version of pycmx, my library for reading CMX EDLs!
|
||||
#sounddesign #filmmaking #python
|
||||
${{ github.server_url }}/${{ github.repository }}
|
||||
env:
|
||||
MASTODON_URL: ${{ secrets.MASTODON_URL }}
|
||||
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
|
||||
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -11,3 +11,12 @@
|
||||
# Vim Swapfiles
|
||||
*.swp
|
||||
.DS_Store
|
||||
|
||||
venv/
|
||||
|
||||
.coverage
|
||||
lcov.info
|
||||
|
||||
|
||||
# venv
|
||||
venv/
|
||||
|
||||
3
.idea/.gitignore
generated
vendored
3
.idea/.gitignore
generated
vendored
@@ -1,3 +0,0 @@
|
||||
|
||||
# Default ignored files
|
||||
/workspace.xml
|
||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
6
.idea/inspectionProfiles/profiles_settings.xml
generated
@@ -1,6 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
||||
4
.idea/misc.xml
generated
4
.idea/misc.xml
generated
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/pycmx.iml" filepath="$PROJECT_DIR$/.idea/pycmx.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
11
.idea/pycmx.iml
generated
11
.idea/pycmx.iml
generated
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.7" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TestRunnerService">
|
||||
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
18
.travis.yml
18
.travis.yml
@@ -1,18 +0,0 @@
|
||||
language: python
|
||||
python:
|
||||
- "3.8"
|
||||
- "3.7"
|
||||
- "3.6"
|
||||
- "3.5"
|
||||
- "2.7"
|
||||
script:
|
||||
- "python setup.py test"
|
||||
- "py.test tests/ -v --cov pycmx --cov-report term-missing"
|
||||
install:
|
||||
- "pip install setuptools"
|
||||
before_install:
|
||||
- "pip install coverage"
|
||||
- "pip install codecov"
|
||||
- "pip install pytest-cov==2.5.0"
|
||||
after_success:
|
||||
- "codecov"
|
||||
13
CONTRIBUTING.md
Normal file
13
CONTRIBUTING.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Contributing
|
||||
|
||||
Contributions to this project are welcome!
|
||||
|
||||
The best way to contribute code to this project is to find this project on [Github][github] and submit a pull request.
|
||||
|
||||
## Call for EDLs
|
||||
|
||||
If you have EDLs you are having trouble working with becuase of unusual formatting, please send me a copy! Contact us
|
||||
through [Github].
|
||||
|
||||
|
||||
[github]: https://github.com/iluvcapra/pycmx
|
||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2018 Jamie Hardt.
|
||||
Copyright (c) 2022 Jamie Hardt.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[](https://travis-ci.com/iluvcapra/pycmx)
|
||||
[](https://codecov.io/gh/iluvcapra/pycmx)
|
||||
[](https://pycmx.readthedocs.io/en/latest/?badge=latest)   [](https://pypi.org/project/pycmx/) 
|
||||

|
||||
[](https://github.com/iluvcapra/pycmx/actions/workflows/python-package.yml)
|
||||
|
||||
|
||||
# pycmx
|
||||
|
||||
BIN
docs/CMX3600.pdf
BIN
docs/CMX3600.pdf
Binary file not shown.
@@ -1,35 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=source
|
||||
set BUILDDIR=build
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
goto end
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
|
||||
:end
|
||||
popd
|
||||
24
docs/source/classes.rst
Normal file
24
docs/source/classes.rst
Normal file
@@ -0,0 +1,24 @@
|
||||
pycmx Classes
|
||||
=============
|
||||
|
||||
.. autoclass:: pycmx.edit_list.EditList
|
||||
:members:
|
||||
|
||||
|
||||
.. autoclass:: pycmx.event.Event
|
||||
:members:
|
||||
|
||||
|
||||
.. autoclass:: pycmx.edit.Edit
|
||||
:members:
|
||||
|
||||
|
||||
.. autoclass:: pycmx.transition.Transition
|
||||
:members:
|
||||
|
||||
|
||||
.. autoclass:: pycmx.channel_map.ChannelMap
|
||||
:members:
|
||||
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../../pycmx'))
|
||||
|
||||
sys.path.insert(0, os.path.abspath('../..'))
|
||||
print(sys.path)
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = u'pycmx'
|
||||
copyright = u'2018, Jamie Hardt'
|
||||
copyright = u'2022, Jamie Hardt'
|
||||
author = u'Jamie Hardt'
|
||||
|
||||
# The short X.Y version
|
||||
@@ -63,7 +63,7 @@ master_doc = 'index'
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
language = 'em'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
|
||||
7
docs/source/function.rst
Normal file
7
docs/source/function.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
Parse Function
|
||||
==============
|
||||
|
||||
|
||||
.. autofunction:: pycmx.parse_cmx_events.parse_cmx3600
|
||||
|
||||
|
||||
@@ -8,13 +8,13 @@ Welcome to pycmx's documentation!
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:caption: API Reference:
|
||||
:caption: API Reference
|
||||
|
||||
pycmx
|
||||
function
|
||||
classes
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
pycmx
|
||||
=====
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
pycmx
|
||||
@@ -1,46 +0,0 @@
|
||||
pycmx package
|
||||
=============
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
pycmx.channel\_map module
|
||||
-------------------------
|
||||
|
||||
.. automodule:: pycmx.channel_map
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
pycmx.parse\_cmx\_events module
|
||||
-------------------------------
|
||||
|
||||
.. automodule:: pycmx.parse_cmx_events
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
pycmx.parse\_cmx\_statements module
|
||||
-----------------------------------
|
||||
|
||||
.. automodule:: pycmx.parse_cmx_statements
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
pycmx.util module
|
||||
-----------------
|
||||
|
||||
.. automodule:: pycmx.util
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
Module contents
|
||||
---------------
|
||||
|
||||
.. automodule:: pycmx
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
@@ -3,13 +3,12 @@
|
||||
pycmx is a module for parsing CMX 3600-style EDLs. For more information and
|
||||
examples see README.md
|
||||
|
||||
This module (c) 2018 Jamie Hardt. For more information on your rights to
|
||||
This module (c) 2022 Jamie Hardt. For more information on your rights to
|
||||
copy and reuse this software, refer to the LICENSE file included with the
|
||||
distribution.
|
||||
"""
|
||||
|
||||
__version__ = '1.1.1'
|
||||
__author__ = 'Jamie Hardt'
|
||||
__version__ = '1.2.0'
|
||||
|
||||
from .parse_cmx_events import parse_cmx3600
|
||||
from .transition import Transition
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
# (c) 2018 Jamie Hardt
|
||||
|
||||
from re import (compile, match)
|
||||
from typing import Dict, Tuple
|
||||
|
||||
class ChannelMap:
|
||||
"""
|
||||
Represents a set of all the channels to which an event applies.
|
||||
"""
|
||||
|
||||
_chan_map = {
|
||||
_chan_map : Dict[str, Tuple] = {
|
||||
"V" : (True, False, False),
|
||||
"A" : (False, True, False),
|
||||
"A2" : (False, False, True),
|
||||
@@ -40,7 +41,7 @@ class ChannelMap:
|
||||
|
||||
@property
|
||||
def a1(self):
|
||||
"""True if A1 is included."""
|
||||
"""True if A1 is included"""
|
||||
return self.get_audio_channel(1)
|
||||
|
||||
@a1.setter
|
||||
@@ -49,7 +50,7 @@ class ChannelMap:
|
||||
|
||||
@property
|
||||
def a2(self):
|
||||
"""True if A2 is included."""
|
||||
"""True if A2 is included"""
|
||||
return self.get_audio_channel(2)
|
||||
|
||||
@a2.setter
|
||||
@@ -58,7 +59,7 @@ class ChannelMap:
|
||||
|
||||
@property
|
||||
def a3(self):
|
||||
"""True if A3 is included."""
|
||||
"""True if A3 is included"""
|
||||
return self.get_audio_channel(3)
|
||||
|
||||
@a3.setter
|
||||
@@ -67,7 +68,7 @@ class ChannelMap:
|
||||
|
||||
@property
|
||||
def a4(self):
|
||||
"""True if A4 is included."""
|
||||
"""True if A4 is included"""
|
||||
return self.get_audio_channel(4)
|
||||
|
||||
@a4.setter
|
||||
@@ -75,11 +76,11 @@ class ChannelMap:
|
||||
self.set_audio_channel(4,val)
|
||||
|
||||
def get_audio_channel(self,chan_num):
|
||||
"""True if chan_num is included."""
|
||||
"""True if chan_num is included"""
|
||||
return (chan_num in self._audio_channel_set)
|
||||
|
||||
def set_audio_channel(self,chan_num,enabled):
|
||||
"""If enabled is true, chan_num will be included."""
|
||||
"""If enabled is true, chan_num will be included"""
|
||||
if enabled:
|
||||
self._audio_channel_set.add(chan_num)
|
||||
elif self.get_audio_channel(chan_num):
|
||||
@@ -103,9 +104,10 @@ class ChannelMap:
|
||||
|
||||
def __or__(self, other):
|
||||
"""
|
||||
Return the logical union of this channel map with another
|
||||
the logical union of this channel map with another
|
||||
"""
|
||||
out_v = self.video | other.video
|
||||
out_a = self._audio_channel_set | other._audio_channel_set
|
||||
|
||||
return ChannelMap(v=out_v,audio_channels = out_a)
|
||||
|
||||
|
||||
@@ -53,10 +53,8 @@ class EditList:
|
||||
@property
|
||||
def title(self):
|
||||
"""
|
||||
The title of this edit list, as attensted by the 'TITLE:' statement on
|
||||
the first line.
|
||||
The title of this edit list.
|
||||
"""
|
||||
'The title of the edit list'
|
||||
return self.title_statement.title
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ def parse_cmx3600(f):
|
||||
f : a file-like object, anything that's readlines-able.
|
||||
|
||||
Returns:
|
||||
An :class:`EditList`.
|
||||
An :class:`pycmx.edit_list.EditList`.
|
||||
"""
|
||||
statements = parse_cmx3600_statements(f)
|
||||
return EditList(statements)
|
||||
|
||||
60
pyproject.toml
Normal file
60
pyproject.toml
Normal file
@@ -0,0 +1,60 @@
|
||||
[build-system]
|
||||
requires = ["flit_core >=3.2,<4"]
|
||||
build-backend = "flit_core.buildapi"
|
||||
|
||||
[project]
|
||||
name = "pycmx"
|
||||
authors = [{name = "Jamie Hardt", email = "jamiehardt@me.com"}]
|
||||
readme = "README.md"
|
||||
dynamic = ["version", "description"]
|
||||
requires-python = "~=3.7"
|
||||
classifiers = [
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'License :: OSI Approved :: MIT License',
|
||||
'Topic :: Multimedia',
|
||||
'Topic :: Multimedia :: Video',
|
||||
'Topic :: Text Processing',
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Programming Language :: Python :: 3.10',
|
||||
'Programming Language :: Python :: 3.11'
|
||||
]
|
||||
dependencies = [
|
||||
|
||||
]
|
||||
keywords = [
|
||||
'parser',
|
||||
'film',
|
||||
'broadcast'
|
||||
]
|
||||
|
||||
[tool.flit.module]
|
||||
name = "pycmx"
|
||||
|
||||
[project.optional-dependencies]
|
||||
doc = [
|
||||
'sphinx >= 5.3.0',
|
||||
'sphinx_rtd_theme >= 1.1.1',
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Home = "https://github.com/iluvcapra/pycmx"
|
||||
Documentation = "https://pycmx.readthedocs.io/"
|
||||
Source = "https://github.com/iluvcapra/pycmx.git"
|
||||
Issues = "https://github.com/iluvcapra/pycmx/issues"
|
||||
|
||||
[tool.pyright]
|
||||
typeCheckingMode = "basic"
|
||||
|
||||
[tool.pylint]
|
||||
max-line-length = 88
|
||||
disable = [
|
||||
"C0103", # (invalid-name)
|
||||
"C0114", # (missing-module-docstring)
|
||||
"C0115", # (missing-class-docstring)
|
||||
"C0116", # (missing-function-docstring)
|
||||
"R0903", # (too-few-public-methods)
|
||||
"R0913", # (too-many-arguments)
|
||||
"W0105", # (pointless-string-statement)
|
||||
]
|
||||
25
setup.py
25
setup.py
@@ -1,25 +0,0 @@
|
||||
from setuptools import setup
|
||||
|
||||
with open("README.md", "r") as fh:
|
||||
long_description = fh.read()
|
||||
|
||||
setup(name='pycmx',
|
||||
version='1.1.4',
|
||||
author='Jamie Hardt',
|
||||
author_email='jamiehardt@me.com',
|
||||
description='CMX 3600 Edit Decision List Parser',
|
||||
long_description_content_type="text/markdown",
|
||||
long_description=long_description,
|
||||
url='https://github.com/iluvcapra/pycmx',
|
||||
classifiers=['Development Status :: 5 - Production/Stable',
|
||||
'License :: OSI Approved :: MIT License',
|
||||
'Topic :: Multimedia',
|
||||
'Topic :: Multimedia :: Video',
|
||||
'Topic :: Text Processing',
|
||||
'Programming Language :: Python :: 3.6',
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Programming Language :: Python :: 3.10'
|
||||
],
|
||||
packages=['pycmx'])
|
||||
Reference in New Issue
Block a user