eyeD3 0.9.5__tar.gz → 0.9.8a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {eyeD3-0.9.5 → eyed3-0.9.8a1}/AUTHORS.rst +8 -10
  2. {eyeD3-0.9.5 → eyed3-0.9.8a1}/HISTORY.rst +63 -0
  3. {eyeD3-0.9.5 → eyed3-0.9.8a1}/MANIFEST.in +6 -4
  4. eyed3-0.9.8a1/Makefile +351 -0
  5. eyed3-0.9.8a1/PKG-INFO +163 -0
  6. {eyeD3-0.9.5 → eyed3-0.9.8a1}/README.rst +1 -1
  7. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/cli.rst +2 -2
  8. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/conf.py +9 -9
  9. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyed3.id3.rst +5 -6
  10. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyed3.mp3.rst +2 -3
  11. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyed3.plugins.rst +15 -24
  12. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyed3.rst +5 -5
  13. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyed3.utils.rst +6 -7
  14. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/installation.rst +3 -4
  15. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/classic_plugin.rst +52 -54
  16. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/extract_plugin.rst +1 -1
  17. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/fixup_plugin.rst +12 -21
  18. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/lameinfo_plugin.rst +2 -2
  19. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/pymod_plugin.rst +6 -7
  20. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins.rst +0 -1
  21. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/cli_examples.sh +1 -1
  22. eyed3-0.9.8a1/eyeD3.egg-info/PKG-INFO +163 -0
  23. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyeD3.egg-info/SOURCES.txt +29 -75
  24. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyeD3.egg-info/entry_points.txt +0 -1
  25. eyed3-0.9.8a1/eyeD3.egg-info/requires.txt +29 -0
  26. eyed3-0.9.8a1/eyed3/__about__.py +27 -0
  27. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/__init__.py +2 -3
  28. eyed3-0.9.8a1/eyed3/__regarding__.py +48 -0
  29. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/core.py +65 -51
  30. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/id3/__init__.py +4 -6
  31. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/id3/apple.py +8 -8
  32. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/id3/frames.py +101 -41
  33. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/id3/headers.py +18 -18
  34. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/id3/tag.py +101 -48
  35. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/main.py +4 -3
  36. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/mimetype.py +1 -1
  37. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/mp3/__init__.py +11 -11
  38. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/mp3/headers.py +38 -34
  39. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/__init__.py +1 -1
  40. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/art.py +26 -32
  41. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/classic.py +17 -7
  42. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/fixup.py +11 -8
  43. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/jsontag.py +9 -8
  44. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/pymod.py +10 -10
  45. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/stats.py +3 -2
  46. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/yamltag.py +7 -13
  47. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/__init__.py +30 -11
  48. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/binfuncs.py +1 -1
  49. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/console.py +21 -19
  50. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/log.py +0 -2
  51. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/prompt.py +1 -1
  52. eyed3-0.9.8a1/pdm.lock +1900 -0
  53. eyed3-0.9.8a1/pyproject.toml +90 -0
  54. eyed3-0.9.8a1/setup.cfg +4 -0
  55. eyed3-0.9.8a1/setup.py +4 -0
  56. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/conftest.py +9 -5
  57. eyed3-0.9.8a1/tests/pytest.ini +3 -0
  58. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_classic_plugin.py +18 -2
  59. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_core.py +4 -1
  60. eyed3-0.9.8a1/tests/test_jsonyaml_plugin.py +85 -0
  61. eyed3-0.9.8a1/tox.ini +39 -0
  62. eyeD3-0.9.5/Makefile +0 -282
  63. eyeD3-0.9.5/PKG-INFO +0 -140
  64. eyeD3-0.9.5/docs/plugins/display_plugin.rst +0 -206
  65. eyeD3-0.9.5/eyeD3.egg-info/PKG-INFO +0 -140
  66. eyeD3-0.9.5/eyeD3.egg-info/not-zip-safe +0 -1
  67. eyeD3-0.9.5/eyeD3.egg-info/requires.txt +0 -16
  68. eyeD3-0.9.5/eyed3/__about__.py +0 -43
  69. eyeD3-0.9.5/eyed3/plugins/DisplayPattern.ebnf +0 -34
  70. eyeD3-0.9.5/eyed3/plugins/_display_parser.py +0 -210
  71. eyeD3-0.9.5/eyed3/plugins/display.py +0 -1128
  72. eyeD3-0.9.5/requirements/dev.txt +0 -11
  73. eyeD3-0.9.5/requirements/extra_art-plugin.txt +0 -3
  74. eyeD3-0.9.5/requirements/extra_display-plugin.txt +0 -1
  75. eyeD3-0.9.5/requirements/extra_yaml-plugin.txt +0 -1
  76. eyeD3-0.9.5/requirements/main.txt +0 -3
  77. eyeD3-0.9.5/requirements/requirements.yml +0 -37
  78. eyeD3-0.9.5/requirements/test.txt +0 -7
  79. eyeD3-0.9.5/requirements.txt +0 -8
  80. eyeD3-0.9.5/setup.cfg +0 -27
  81. eyeD3-0.9.5/setup.py +0 -165
  82. eyeD3-0.9.5/test/test_display_plugin.py +0 -105
  83. eyeD3-0.9.5/tox.ini +0 -45
  84. {eyeD3-0.9.5 → eyed3-0.9.8a1}/CONTRIBUTING.rst +0 -0
  85. {eyeD3-0.9.5 → eyed3-0.9.8a1}/LICENSE +0 -0
  86. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/Makefile +0 -0
  87. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/_config.yml +0 -0
  88. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/_static/.keep +0 -0
  89. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/_static/rtd.css +0 -0
  90. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/_templates/.keepme +0 -0
  91. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/authors.rst +0 -0
  92. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/compliance.rst +0 -0
  93. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/contributing.rst +0 -0
  94. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/eyeD3.1 +0 -0
  95. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/history.rst +0 -0
  96. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/index.rst +0 -0
  97. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/make.bat +0 -0
  98. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/modules.rst +0 -0
  99. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/art_plugin.rst +0 -0
  100. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/genres_plugin.rst +0 -0
  101. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/itunes_plugin.rst +0 -0
  102. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/json_plugin.rst +0 -0
  103. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/mimetypes_plugin.rst +0 -0
  104. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/nfo_plugin.rst +0 -0
  105. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/stats_plugin.rst +0 -0
  106. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/xep118_plugin.rst +0 -0
  107. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/plugins/yaml_plugin.rst +0 -0
  108. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/readme.rst +0 -0
  109. {eyeD3-0.9.5 → eyed3-0.9.8a1}/docs/usage.rst +0 -0
  110. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/chapters.py +0 -0
  111. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/config.ini +0 -0
  112. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/plugins/echo.py +0 -0
  113. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/plugins/echo2.py +0 -0
  114. {eyeD3-0.9.5 → eyed3-0.9.8a1}/examples/tag_example.py +0 -0
  115. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyeD3.egg-info/dependency_links.txt +0 -0
  116. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyeD3.egg-info/top_level.txt +0 -0
  117. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/extract.py +0 -0
  118. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/genres.py +0 -0
  119. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/itunes.py +0 -0
  120. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/lameinfo.py +0 -0
  121. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/lastfm.py +0 -0
  122. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/mimetype.py +0 -0
  123. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/nfo.py +0 -0
  124. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/plugins/xep_118.py +0 -0
  125. {eyeD3-0.9.5 → eyed3-0.9.8a1}/eyed3/utils/art.py +0 -0
  126. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/__init__.py +0 -0
  127. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/__init__.py +0 -0
  128. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/test_frames.py +0 -0
  129. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/test_headers.py +0 -0
  130. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/test_id3.py +0 -0
  131. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/test_rva.py +0 -0
  132. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/id3/test_tag.py +0 -0
  133. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/mp3/__init__.py +0 -0
  134. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/mp3/test_infos.py +0 -0
  135. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/mp3/test_mp3.py +0 -0
  136. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test__init__.py +0 -0
  137. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_binfuncs.py +0 -0
  138. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_console.py +0 -0
  139. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_factory.py +0 -0
  140. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_issues.py +0 -0
  141. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_lameinfo_plugin.py +0 -0
  142. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_main.py +0 -0
  143. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_mimetype.py +0 -0
  144. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_plugins.py +0 -0
  145. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_stats_plugins.py +0 -0
  146. {eyeD3-0.9.5/test → eyed3-0.9.8a1/tests}/test_utils.py +0 -0
@@ -27,15 +27,13 @@ and has been contributed to by (ordered by date of first contribution):
27
27
  * Hans Petter Jansson <hpj@copyleft.no>
28
28
  * Sebastian Patschorke <sludgefeast@users.noreply.github.com>
29
29
  * Bouke Versteegh <info@boukeversteegh.nl>
30
+ * gaetano-guerriero <x.guerriero@tin.it>
30
31
  * mafro <github@mafro.net>
31
- * Gaetano Guerriero <x.guerriero@tin.it>
32
- * Grun Seid <grunseid@gmail.com>
33
- * pyup-bot <github-bot@pyup.io>
32
+ * Gabriel Diego Teixeira <gabrieldiegoteixeira@gmail.com>
34
33
  * Chris Newton <redshodan@gmail.com>
35
- * deoren@users.noreply.github.com
36
- * chamatht@gmail.com
37
- * Mic92@users.noreply.github.com
38
- * gabrieldiegoteixeira@gmail.com
39
- * guillaume.web@gmail.com
40
- * tim.gates@iress.com
41
- * zhumumu@gmail.com
34
+ * Thomas Klausner <tk@giga.or.at>
35
+ * Tim Gates <tim.gates@iress.com>
36
+ * chamatht <chamatht@gmail.com>
37
+ * grun <grunseid@gmail.com>
38
+ * guiweber <guillaume.web@gmail.com>
39
+ * zhu <zhumumu@gmail.com>
@@ -3,6 +3,69 @@ Release History
3
3
 
4
4
  .. :changelog:
5
5
 
6
+ v0.9.7 (2022-10-07) : Sunshine
7
+ ----------------------------------
8
+
9
+ New
10
+ ~~~
11
+ - [fixup-plugin] Added --no-dir-rename.
12
+ - Add remove-all-unknown to classic plugin. <gobater@users.noreply.github.com>
13
+ - Track/disc number support for JSON/YAML plugins (and tests)
14
+ - CountAndTotalTuple named tuple for count/total values.
15
+ - EyeD3 __all__ includes core.AudioFile.
16
+ - AudioFile.__str__ returns path.
17
+ - Strict render Frame flag to continue on render errors. Applied to RelVolAdjFrameV24, etc
18
+ - Track unsupported frames and add `--remove-all-unknown` classic plugin
19
+ option (#586) <gobater@users.noreply.github.com>
20
+
21
+ Changes
22
+ ~~~~~~~
23
+ - Removed display-plugin due to Grako EOL (#585)
24
+ - [stats] Print bytes as text and filter private members.
25
+ - Remove Python 3.6 support, EOL. (#560)
26
+
27
+ Fix
28
+ ~~~
29
+ - Doc grammar fixed (#537) <74979584+piatrashkakanstantinass@users.noreply.github.com>
30
+ - Fix problem when frame file format invalid, and input.read() returns
31
+ no more data at all - this had the potential to loop endlessly. (#539)
32
+ <gerson.kurz@ng-branch-technology.com, gerson.kurz@gmail.com>
33
+
34
+ Other
35
+ ~~~~~
36
+ - Create codeql-analysis.yml.
37
+ - Documentation updates.
38
+ - Also updated deps, and removed Python 3.7 from official testing.
39
+ - Docs: Fix a few typos (#573) <tim.gates@iress.com>
40
+ - Spelling fixes (#559) <Jonte@jherlin.se>
41
+ - Typo fixes (#558) <code@ramiro.org>
42
+
43
+ v0.9.6 (2020-12-28) : True Blue
44
+ ----------------------------------
45
+
46
+ New
47
+ ~~~
48
+ - Id3.Tag(version=) keyword argument.
49
+ - Expose TextFrame ctor kwargs to Apple frames. fixes #407
50
+ - Added --about CLI argument for extra version/program info.
51
+
52
+ Fix
53
+ ~~~
54
+ - Preserve linked file info in Tag.clear(). fixes #442
55
+ - Handle v1 .id3/.tag files.
56
+ - Improved `art` plugin behavior when missing dependencies.
57
+ - [art plugin] Improved error for missing dependencies.
58
+ - TYER conversion (and restored non v2.2 breakage, for now)
59
+ - ID3 v2.2, date getters return values again.
60
+ - Passed filtered files list or handleDirectory, and skip non-existant symlinks
61
+ - Fixed installation supported Python text. fixes #405
62
+ - Implement v1.0/v1.1 tag conversion rules.
63
+
64
+ Other
65
+ ~~~~~
66
+ - Poetry build system (#500)
67
+
68
+
6
69
  v0.9.5 (2020-03-28) : I Knew Her, She Knew Me
7
70
  ----------------------------------------------
8
71
 
@@ -5,11 +5,14 @@ include LICENSE
5
5
  include README.rst
6
6
  include Makefile
7
7
  include tox.ini
8
+ include setup.py
9
+ include pdm.lock
8
10
 
9
11
  graft docs
10
12
  prune docs/_build
11
13
 
12
- recursive-include test *.py
14
+ recursive-include tests *.py
15
+ include tests/pytest.ini
13
16
 
14
17
  exclude .cookiecutter.yml
15
18
  exclude .gitchangelog.rc
@@ -17,14 +20,13 @@ global-exclude __pycache__
17
20
  global-exclude .editorconfig
18
21
  global-exclude *.py[co]
19
22
 
20
- include requirements.txt
21
- recursive-include requirements *.txt *.yml
23
+ recursive-include requirements *.txt
22
24
 
23
25
  recursive-include eyed3 *.py
24
- include eyed3/plugins/DisplayPattern.ebnf
25
26
  recursive-include examples *
26
27
 
27
28
  exclude fabfile.py
28
29
  exclude mkenv.sh
29
30
  exclude pavement.py
30
31
  prune etc
32
+
eyed3-0.9.8a1/Makefile ADDED
@@ -0,0 +1,351 @@
1
+ SHELL := /bin/bash
2
+ .DEFAULT_GOAL := build
3
+
4
+ ## User settings
5
+ PYTEST_ARGS ?= ./tests
6
+ PYPI_REPO ?= pypi
7
+ BUMP ?= prerelease
8
+ TEST_DATA_DIR ?= $(shell pwd)/tests
9
+ CC_MERGE ?= yes
10
+ CC_OPTS ?= --no-input
11
+
12
+ ifdef TERM
13
+ BOLD_COLOR = $(shell tput bold)
14
+ HELP_COLOR = $(shell tput setaf 6)
15
+ HEADER_COLOR = $(BOLD_COLOR)$(shell tput setaf 2)
16
+ NO_COLOR = $(shell tput sgr0)
17
+ endif
18
+
19
+ help: ## List all commands
20
+ @printf "\n$(BOLD_COLOR)***** eyeD3 Makefile help *****$(NO_COLOR)\n"
21
+ @# This code borrowed from https://github.com/jedie/poetry-publish/blob/master/Makefile
22
+ @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9 -]+:.*?## / {printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
23
+ @echo ""
24
+ @printf "$(BOLD_COLOR)Options:$(NO_COLOR)\n"
25
+ @printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n" PYTEST_ARGS "If defined PDB options are added when 'pytest' is invoked"
26
+ @printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n" PYPI_REPO "The package index to publish, 'pypi' by default."
27
+ @printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n" BROWSER "HTML viewer used by docs-view/coverage-view"
28
+ @printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n" CC_MERGE "Set to no to disable cookiecutter merging."
29
+ @printf "$(HELP_COLOR)%-20s$(NO_COLOR) %s\n" CC_OPTS "OVerrided the default options (--no-input) with your own."
30
+ @echo ""
31
+
32
+
33
+ all: clean build test ## Build and test
34
+
35
+
36
+ ## Config
37
+ PROJECT_NAME := $(shell sed -n "s/^name = \"\(.*\)\"/\1/p" pyproject.toml)
38
+ ifeq ($(strip $(PROJECT_NAME)),)
39
+ $(error "PROJECT_NAME not set")
40
+ endif
41
+ VERSION := $(shell sed -n "s/^version = \"\(.*\)\"/\1/p" pyproject.toml)
42
+ ifeq ($(strip $(VERSION)),)
43
+ $(error "VERSION not set")
44
+ endif
45
+ RELEASE_NAME = $(shell sed -n "s/^release_name = \"\(.*\)\"/\1/p" pyproject.toml)
46
+ RELEASE_TAG := v$(VERSION)
47
+
48
+ SRC_DIRS = ./eyed3
49
+ GITHUB_USER = nicfit
50
+ GITHUB_REPO = eyeD3
51
+ CHANGELOG = HISTORY.rst
52
+ CHANGELOG_HEADER = v${VERSION} ($(shell date --iso-8601))$(if ${RELEASE_NAME}, : ${RELEASE_NAME},)
53
+ TEST_DATA = eyeD3-test-data
54
+ TEST_DATA_FILE = ${TEST_DATA}.tgz
55
+ ABOUT_PY := eyed3/__regarding__.py
56
+
57
+
58
+ ## Build
59
+ .PHONY: build
60
+ BUILD_OPTS ?=
61
+ build: $(ABOUT_PY) ## Build the project
62
+ pdm build -d dist/ $(BUILD_OPTS)
63
+
64
+ $(ABOUT_PY): pyproject.toml
65
+ regarding -o $@
66
+
67
+
68
+ ## Clean
69
+ clean: clean-test clean-dist clean-local clean-docs # Clean the project
70
+ touch pyproject.toml
71
+ rm -rf ./build
72
+ rm -rf eye{d,D}3.egg-info
73
+ rm -fr .eggs/
74
+ find . -name '*.egg' -exec rm -f {} +
75
+ find . -name '*.pyc' -exec rm -f {} +
76
+ find . -name '*.pyo' -exec rm -f {} +
77
+ find . -name '*~' -exec rm -f {} +
78
+ find . -name '__pycache__' -exec rm -fr {} +
79
+
80
+ clean-local:
81
+ -rm tags
82
+ -rm all.id3 example.id3
83
+ find . -name '*.rej' -exec rm -f '{}' \;
84
+ find . -name '*.orig' -exec rm -f '{}' \;
85
+ find . -type f -name '*~' | xargs -r rm
86
+
87
+
88
+ ### Test
89
+ .PHONY: test
90
+ test: ## Run tests with default python
91
+ tox -e py
92
+
93
+ test-all: ## Run tests with all supported versions of Python
94
+ tox --parallel=all
95
+
96
+ test-data:
97
+ # Move these to eyed3.nicfit.net
98
+ test -f ${TEST_DATA_DIR}/${TEST_DATA_FILE} || \
99
+ wget --quiet "http://eyed3.nicfit.net/releases/${TEST_DATA_FILE}" \
100
+ -O ${TEST_DATA_DIR}/${TEST_DATA_FILE}
101
+ tar xzf ${TEST_DATA_DIR}/${TEST_DATA_FILE} -C ${TEST_DATA_DIR}
102
+ cd tests && rm -f ./data && ln -s ${TEST_DATA_DIR}/${TEST_DATA} ./data
103
+
104
+ clean-test:
105
+ rm -fr .tox/
106
+ rm -f .coverage
107
+ find . -name '.pytest_cache' -type d -exec rm -rf {} +
108
+ -rm .testmondata
109
+ -rm examples/*.id3
110
+
111
+ clean-test-data:
112
+ -rm tests/data
113
+ -rm tests/${TEST_DATA_FILE}
114
+
115
+ pkg-test-data:
116
+ test -d build || mkdir build
117
+ tar czf ./build/${TEST_DATA_FILE} -h --exclude-vcs -C ./tests \
118
+ ./eyeD3-test-data
119
+
120
+ publish-test-data: pkg-test-data
121
+ scp ./build/${TEST_DATA_FILE} eyed3.nicfit.net:./data1/eyeD3-releases/
122
+
123
+ coverage:
124
+ coverage run --source $(SRC_DIRS) -m pytest $(PYTEST_ARGS)
125
+ coverage report
126
+ coverage html
127
+
128
+ coverage-view:
129
+ @if [ ! -f build/tests/coverage/index.html ]; then \
130
+ ${MAKE} coverage; \
131
+ fi
132
+ @${BROWSER} build/tests/coverage/index.html
133
+
134
+ lint: ## Check coding style
135
+ tox -e lint
136
+
137
+
138
+ ### Documentation
139
+ .PHONY: docs
140
+ docs: ## Generate project documentation with Sphinx
141
+ rm -f docs/eyed3.rst
142
+ rm -f docs/modules.rst
143
+ sphinx-apidoc --force -H "$(shell echo $(PROJECT_NAME) | tr '[:upper:]' '[:lower:]') module" -V $(VERSION) -o docs/ ${SRC_DIRS}
144
+ $(MAKE) -C docs clean
145
+ etc/mycog.py
146
+ $(MAKE) -C docs html
147
+ -rm example.id3
148
+
149
+ docs-dist: docs
150
+ test -d dist || mkdir dist
151
+ cd docs/_build && \
152
+ tar czvf ../../dist/$(PROJECT_NAME)-$(VERSION)-docs.tar.gz html
153
+
154
+ docs-view: docs
155
+ $(BROWSER) docs/_build/html/index.html
156
+
157
+ clean-docs:
158
+ $(MAKE) -C docs clean
159
+ -rm README.html
160
+
161
+
162
+ ### Distribute
163
+ .PHONY: dist
164
+ dist: clean-dist lint all docs-dist ## Create source and binary distribution files
165
+
166
+ _dist-md5:
167
+ @# The cd dist keeps the dist/ prefix out of the md5sum files
168
+ @cd dist && \
169
+ for f in $$(ls -I '*.md5'); do \
170
+ md5sum $${f} >| $${f}.md5; \
171
+ done
172
+ @ls -l dist
173
+
174
+
175
+ clean-dist: ## Clean distribution artifacts (included in `clean`)
176
+ rm -rf dist
177
+
178
+ check-manifest:
179
+ check-manifest
180
+
181
+ release-tag: _check-clean-repo _check-version-tag _check-main-branch
182
+ @if ! git tag --annotate $(RELEASE_TAG) -m "$(RELEASE_NAME)" 2> /dev/null; then \
183
+ echo "!!! $(RELEASE_TAG) already exists; update pyproject.toml !!!"; \
184
+ exit 1; \
185
+ fi
186
+ git push origin $(RELEASE_TAG)
187
+
188
+ #authors:
189
+ # @git authors --list | while read auth ; do \
190
+ # email=`echo "$$auth" | awk 'match($$0, /.*<(.*)>/, m) {print m[1]}'`;\
191
+ # echo "Checking $$email...";\
192
+ # if echo "$$email" | grep -v 'users.noreply.github.com'\
193
+ # | grep -v 'github-bot@pyup.io' \
194
+ # > /dev/null ; then \
195
+ # grep "$$email" AUTHORS.rst > /dev/null || echo " * $$auth" >> AUTHORS.rst;\
196
+ # fi;\
197
+ # done
198
+ #
199
+
200
+ ## Install
201
+ install: ## Install project and dependencies
202
+ python -m pip install --editable .
203
+
204
+ install-dev: ## Install project, dependencies, and developer tools
205
+ python -m pip install --editable .[dev,test]
206
+
207
+ install-extra: ## Install project, dependencies, and developer tools
208
+ python -m pip install --editable .[art-plugin,yaml-plugin]
209
+
210
+ install-all: install install-extra install-dev
211
+
212
+
213
+ ## Release
214
+ release: _check-on-release-tag _check-clean-repo _check-gh _check-pypi pre-release upload-release
215
+
216
+ pre-release: dist check-manifest test-all _check-clean-repo
217
+ #pre-release: # authors changelog
218
+
219
+ upload-release: _pypi-release _web-release _github-release
220
+
221
+ _pypi-release:
222
+ pdm publish -r ${PYPI_REPO}
223
+
224
+ _github-release:
225
+ @# TODO: --prerelease if appropriate
226
+ @# TODO: --notes-file when release notes are available
227
+ @# TODO: --latest=false when prerelease is used
228
+ gh release --repo nicfit/eyeD3 create $(RELEASE_TAG) --verify-tag \
229
+ --title "$(RELEASE_TAG) ($(RELEASE_NAME))" \
230
+ --draft --prerelease \
231
+ --generate-notes ./dist/*.tar.gz
232
+
233
+ # prerelease=""; \
234
+ # if echo "${RELEASE_TAG}" | grep '[^v0-9\.]'; then \
235
+ # prerelease="--pre-release"; \
236
+ # fi; \
237
+ # echo "NAME: $$name"; \
238
+ # echo "PRERELEASE: $$prerelease"; \
239
+
240
+ _web-release:
241
+ for f in `find ./dist -type f`; do \
242
+ scp $$f eyed3.nicfit.net:./data1/eyeD3-releases/`basename $$f`; \
243
+ done
244
+
245
+ #changelog:
246
+ # @last=`git tag -l --sort=version:refname | grep '^v[0-9]' | tail -n1`;\
247
+ # if ! grep "${CHANGELOG_HEADER}" ${CHANGELOG} > /dev/null; then \
248
+ # rm -f ${CHANGELOG}.new; \
249
+ # if test -n "$$last"; then \
250
+ # gitchangelog --author-format=email \
251
+ # --omit-author="travis@pobox.com" $${last}..HEAD |\
252
+ # sed "s|^%%version%% .*|${CHANGELOG_HEADER}|" |\
253
+ # sed '/^.. :changelog:/ r/dev/stdin' ${CHANGELOG} \
254
+ # > ${CHANGELOG}.new; \
255
+ # else \
256
+ # cat ${CHANGELOG} |\
257
+ # sed "s/^%%version%% .*/${CHANGELOG_HEADER}/" \
258
+ # > ${CHANGELOG}.new;\
259
+ # fi; \
260
+ # mv ${CHANGELOG}.new ${CHANGELOG}; \
261
+ # fi
262
+ #
263
+ #
264
+ ### MISC
265
+ #README.html: README.rst
266
+ # rst2html5.py README.rst >| README.html
267
+ # if test -n "${BROWSER}"; then \
268
+ # ${BROWSER} README.html;\
269
+ # fi
270
+ #
271
+ #GIT_COMMIT_HOOK = .git/hooks/commit-msg
272
+ #cookiecutter:
273
+ # tmp_d=`mktemp -d`; cc_d=$$tmp_d/eyeD3; \
274
+ # if test "${CC_MERGE}" = "no"; then \
275
+ # nicfit cookiecutter ${CC_OPTS} "$${tmp_d}"; \
276
+ # git -C "$$cc_d" diff; \
277
+ # git -C "$$cc_d" status -s -b; \
278
+ # else \
279
+ # nicfit cookiecutter --merge ${CC_OPTS} "$${tmp_d}" \
280
+ # --extra-merge ${GIT_COMMIT_HOOK} ${GIT_COMMIT_HOOK};\
281
+ # fi; \
282
+ # rm -rf $$tmp_d
283
+
284
+ ## Runtime environment
285
+ VENV_NAME ?= dev-eyeD3
286
+ VENV_DIR ?= $(HOME)/.virtualenvs
287
+ VENV_ACTIVATE := $(VENV_DIR)/$(VENV_NAME)/bin/activate
288
+ clean-venv:
289
+ test -n "$(VENV_DIR)" && test -n "$(VENV_NAME)" && rm -rf $(VENV_DIR)/$(VENV_NAME)
290
+
291
+ venv:
292
+ python -m venv --upgrade-deps $(VENV_DIR)/$(VENV_NAME)
293
+ @printf "\n$(BOLD_COLOR)To activate the virtualenv:$(NO_COLOR) source $(VENV_ACTIVATE)\n"
294
+ @printf "$(BOLD_COLOR)To deactivate the virtualenv:$(NO_COLOR) deactivate\n\n"
295
+
296
+
297
+ _check-version-tag:
298
+ @if git tag -l | grep -E '^$(shell echo ${RELEASE_TAG} | sed 's|\.|.|g')$$' > /dev/null; then \
299
+ echo "!!! Version tag '${RELEASE_TAG}' already exists !!!"; \
300
+ false; \
301
+ else\
302
+ echo "Version tag '${RELEASE_TAG}' is available."; \
303
+ fi
304
+
305
+ MAIN_BRANCH ?= 0.9.x
306
+ _check-main-branch:
307
+ @if [ `git branch --show-current` != $(MAIN_BRANCH) ]; then \
308
+ echo "!!! Not on $(MAIN_BRANCH) branch. !!!"; \
309
+ exit 1; \
310
+ fi
311
+
312
+ _check-on-release-tag:
313
+ @if [ "`git describe --tags`" != "$(RELEASE_TAG)" ]; then \
314
+ echo "!!! Not on $(RELEASE_TAG) checkout. !!!"; \
315
+ exit 1; \
316
+ fi
317
+
318
+ _check-clean-repo:
319
+ @if [ -n "`git status --porcelain --untracked-files=no`" ]; then \
320
+ echo "!!! Working repo has uncommitted/un-staged changes. !!!"; \
321
+ exit 1; \
322
+ else \
323
+ echo "Repo clean.";\
324
+ fi
325
+
326
+ _check-gh:
327
+ @test -n "${GH_TOKEN}" || (echo "GH_TOKEN not set, needed for gh" && false)
328
+ @gh --help > /dev/null || (echo "gh not installed" && false)
329
+
330
+ _check-pypi:
331
+ @(test -n "${PDM_PUBLISH_USERNAME}" && test -n "${PDM_PUBLISH_PASSWORD}") || \
332
+ (echo "PDM_BUBLISH_* not set, needed for PyPI publish" && false)
333
+
334
+ #bump-release: requirements
335
+ # @# TODO: is not a pre-release, clear release_name
336
+ # poetry version $(BUMP)
337
+
338
+ .PHONY: requirements
339
+ requirements:
340
+ pdm outdated
341
+ pdm update --unconstrained --update-all -d
342
+ # poetry update --lock
343
+ # poetry export -f requirements.txt --without-hashes\
344
+ # --output requirements/requirements.txt
345
+ # poetry export -f requirements.txt --without-hashes\
346
+ # --output requirements/test-requirements.txt -E test
347
+ # poetry export -f requirements.txt --without-hashes --output requirements/dev-requirements.txt --with dev
348
+ # poetry export -f requirements.txt --without-hashes\
349
+ # --output requirements/extra-requirements.txt \
350
+ # -E art-plugin -E yaml-plugin
351
+ # $(MAKE) build
eyed3-0.9.8a1/PKG-INFO ADDED
@@ -0,0 +1,163 @@
1
+ Metadata-Version: 2.4
2
+ Name: eyeD3
3
+ Version: 0.9.8a1
4
+ Summary: Python audio data toolkit (ID3 and MP3)
5
+ Author-email: Travis Shirk <travis@pobox.com>
6
+ Project-URL: homepage, https://eyeD3.nicfit.net/
7
+ Project-URL: repository, https://github.com/nicfit/eyeD3
8
+ Keywords: id3,mp3,python
9
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Editors
13
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: POSIX
16
+ Classifier: Natural Language :: English
17
+ Classifier: Programming Language :: Python
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Requires-Python: <4.0,>=3.9
24
+ Description-Content-Type: text/x-rst
25
+ License-File: LICENSE
26
+ License-File: AUTHORS.rst
27
+ Requires-Dist: filetype>=1.2.0
28
+ Requires-Dist: deprecation>=2.1.0
29
+ Provides-Extra: yaml-plugin
30
+ Requires-Dist: PyYAML>=6.0.2; extra == "yaml-plugin"
31
+ Provides-Extra: art-plugin
32
+ Requires-Dist: Pillow>=11.2.1; extra == "art-plugin"
33
+ Requires-Dist: pylast>=5.5.0; extra == "art-plugin"
34
+ Requires-Dist: requests>=2.32.3; extra == "art-plugin"
35
+ Provides-Extra: test
36
+ Requires-Dist: pytest>=8.3.5; extra == "test"
37
+ Requires-Dist: coverage>=7.8.0; extra == "test"
38
+ Requires-Dist: tox>=4.25.0; extra == "test"
39
+ Requires-Dist: factory-boy>=3.3.3; extra == "test"
40
+ Requires-Dist: pytest-cov>=6.1.1; extra == "test"
41
+ Requires-Dist: check-manifest>=0.50; extra == "test"
42
+ Requires-Dist: flake8>=7.2.0; extra == "test"
43
+ Provides-Extra: dev
44
+ Requires-Dist: twine>=6.1.0; extra == "dev"
45
+ Requires-Dist: Sphinx>=7.4.7; extra == "dev"
46
+ Requires-Dist: sphinx-rtd-theme>=3.0.2; extra == "dev"
47
+ Requires-Dist: sphinx-issues>=5.0.1; extra == "dev"
48
+ Requires-Dist: cogapp>=3.4.1; extra == "dev"
49
+ Requires-Dist: Paver>=1.3.4; extra == "dev"
50
+ Requires-Dist: nicfit-py[cookiecutter]>=0.8.7; extra == "dev"
51
+ Requires-Dist: regarding>=0.2.0; extra == "dev"
52
+ Dynamic: license-file
53
+
54
+ Status
55
+ ------
56
+ .. image:: https://img.shields.io/pypi/v/eyeD3.svg
57
+ :target: https://pypi.python.org/pypi/eyeD3/
58
+ :alt: Latest Version
59
+ .. image:: https://img.shields.io/pypi/status/eyeD3.svg
60
+ :target: https://pypi.python.org/pypi/eyeD3/
61
+ :alt: Project Status
62
+ .. image:: https://travis-ci.org/nicfit/eyeD3.svg?branch=master
63
+ :target: https://travis-ci.org/nicfit/eyeD3
64
+ :alt: Build Status
65
+ .. image:: https://img.shields.io/pypi/l/eyeD3.svg
66
+ :target: https://pypi.python.org/pypi/eyeD3/
67
+ :alt: License
68
+ .. image:: https://img.shields.io/pypi/pyversions/eyeD3.svg
69
+ :target: https://pypi.python.org/pypi/eyeD3/
70
+ :alt: Supported Python versions
71
+ .. image:: https://coveralls.io/repos/nicfit/eyeD3/badge.svg
72
+ :target: https://coveralls.io/r/nicfit/eyeD3
73
+ :alt: Coverage Status
74
+
75
+
76
+ About
77
+ -----
78
+ eyeD3_ is a Python tool for working with audio files, specifically MP3 files
79
+ containing ID3_ metadata (i.e. song info).
80
+
81
+ It provides a command-line tool (``eyeD3``) and a Python library
82
+ (``import eyed3``) that can be used to write your own applications or
83
+ plugins that are callable from the command-line tool.
84
+
85
+ For example, to set some song information in an mp3 file called
86
+ ``song.mp3``::
87
+
88
+ $ eyeD3 -a Integrity -A "Humanity Is The Devil" -t "Hollow" -n 2 song.mp3
89
+
90
+ With this command we've set the artist (``-a/--artist``), album
91
+ (``-A/--album``), title (``-t/--title``), and track number
92
+ (``-n/--track-num``) properties in the ID3 tag of the file. This is the
93
+ standard interface that eyeD3 has always had in the past, therefore it
94
+ is also the default plugin when no other is specified.
95
+
96
+ The results of this command can be seen by running the ``eyeD3`` with no
97
+ options.
98
+
99
+ ::
100
+
101
+ $ eyeD3 song.mp3
102
+ song.mp3 [ 3.06 MB ]
103
+ -------------------------------------------------------------------------
104
+ ID3 v2.4:
105
+ title: Hollow
106
+ artist: Integrity
107
+ album: Humanity Is The Devil
108
+ album artist: None
109
+ track: 2
110
+ -------------------------------------------------------------------------
111
+
112
+ The same can be accomplished using Python.
113
+
114
+ ::
115
+
116
+ import eyed3
117
+
118
+ audiofile = eyed3.load("song.mp3")
119
+ audiofile.tag.artist = "Token Entry"
120
+ audiofile.tag.album = "Free For All Comp LP"
121
+ audiofile.tag.album_artist = "Various Artists"
122
+ audiofile.tag.title = "The Edge"
123
+ audiofile.tag.track_num = 3
124
+
125
+ audiofile.tag.save()
126
+
127
+ eyeD3_ is written and maintained by `Travis Shirk`_ and is licensed under
128
+ version 3 of the GPL_.
129
+
130
+ Features
131
+ --------
132
+
133
+ * Python package (`import eyed3`) for writing applications and plugins.
134
+ * `eyeD3` : Command-line tool driver script that supports plugins.
135
+ * Easy ID3 editing/viewing of audio metadata from the command-line.
136
+ * Plugins for: Tag to string formatting (display), album fixing (fixup),
137
+ cover art downloading (art), collection stats (stats),
138
+ and json/yaml/jabber/nfo output formats, and more included.
139
+ * Support for ID3 versions 1.x, 2.2 (read-only), 2.3, and 2.4.
140
+ * Support for the MP3 audio format exposing details such as play time, bit
141
+ rate, sampling frequency, etc.
142
+ * Abstract design allowing future support for different audio formats and
143
+ metadata containers.
144
+
145
+ Get Started
146
+ -----------
147
+
148
+ Python >= 3.7 is required.
149
+
150
+ For `installation instructions`_ or more complete `documentation`_ see
151
+ http://eyeD3.nicfit.net/
152
+
153
+ Please post feedback and/or defects on the `issue tracker`_, or `mailing list`_.
154
+
155
+ .. _eyeD3: http://eyeD3.nicfit.net/
156
+ .. _Travis Shirk: travis@pobox.com
157
+ .. _issue tracker: https://github.com/nicfit/eyeD3/issues
158
+ .. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/eyed3-users
159
+ .. _installation instructions: http://eyeD3.nicfit.net/index.html#installation
160
+ .. _documentation: http://eyeD3.nicfit.net/index.html#documentation
161
+ .. _GPL: http://www.gnu.org/licenses/gpl-2.0.html
162
+ .. _ID3: http://id3.org/
163
+
@@ -92,7 +92,7 @@ Features
92
92
  Get Started
93
93
  -----------
94
94
 
95
- Python >= 3.6 is required.
95
+ Python >= 3.7 is required.
96
96
 
97
97
  For `installation instructions`_ or more complete `documentation`_ see
98
98
  http://eyeD3.nicfit.net/
@@ -73,8 +73,8 @@ etc.) are set using menber variables and for each file ``eyeD3`` traverses
73
73
  (using the given path(s) and optional ``--exclude`` options) the method
74
74
  ``handleFile`` will be called. The return value of this call is ignored, but
75
75
  if you wish to halt processing of files a ``StopIteration`` exception can be
76
- raised. Here is where the plugin should does whatever interesting it things it
77
- would like to do with the files it is passed. When all input files are
76
+ raised. Here the plugin should do whatever interesting it thinks it
77
+ would like to do with the passed files. When all input files are
78
78
  processed the method ``handleDone`` is called and the program exits. Below
79
79
  is an 'echo' plugin that prints each filename/path and the file's mime-type.
80
80