diff options
| -rw-r--r-- | .coveragerc | 23 | ||||
| -rw-r--r-- | .gitignore | 45 | ||||
| -rw-r--r-- | AUTHORS.rst | 5 | ||||
| -rw-r--r-- | CHANGES.rst | 4 | ||||
| -rw-r--r-- | README.md | 22 | ||||
| -rw-r--r-- | README.rst | 36 | ||||
| -rw-r--r-- | docs/Makefile | 177 | ||||
| -rw-r--r-- | docs/_static/.gitignore | 1 | ||||
| -rw-r--r-- | docs/authors.rst | 2 | ||||
| -rw-r--r-- | docs/changes.rst | 2 | ||||
| -rw-r--r-- | docs/conf.py | 238 | ||||
| -rw-r--r-- | docs/index.rst | 45 | ||||
| -rw-r--r-- | docs/license.rst | 7 | ||||
| -rw-r--r-- | requirements.txt | 3 | ||||
| -rw-r--r-- | setup.cfg | 74 | ||||
| -rw-r--r-- | setup.py | 24 | ||||
| -rw-r--r-- | tests/conftest.py | 12 | ||||
| -rwxr-xr-x | youtube_podcaster/youtube-podcaster (renamed from youtube-podcaster) | 0 | ||||
| -rw-r--r-- | youtube_podcaster/youtube-podcaster.json.sample (renamed from youtube-podcaster.json.sample) | 0 | ||||
| -rw-r--r-- | youtube_podcaster/youtube/__init__.py (renamed from youtube/__init__.py) | 0 | ||||
| -rw-r--r-- | youtube_podcaster/youtube/downloader.py (renamed from youtube/downloader.py) | 0 | ||||
| -rw-r--r-- | youtube_podcaster/youtube/youtube.py (renamed from youtube/youtube.py) | 0 |
22 files changed, 692 insertions, 28 deletions
diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..142021c --- /dev/null +++ b/.coveragerc | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | # .coveragerc to control coverage.py | ||
| 2 | [run] | ||
| 3 | branch = True | ||
| 4 | source = youtube_podcaster | ||
| 5 | # omit = bad_file.py | ||
| 6 | |||
| 7 | [report] | ||
| 8 | # Regexes for lines to exclude from consideration | ||
| 9 | exclude_lines = | ||
| 10 | # Have to re-enable the standard pragma | ||
| 11 | pragma: no cover | ||
| 12 | |||
| 13 | # Don't complain about missing debug-only code: | ||
| 14 | def __repr__ | ||
| 15 | if self\.debug | ||
| 16 | |||
| 17 | # Don't complain if tests don't hit defensive assertion code: | ||
| 18 | raise AssertionError | ||
| 19 | raise NotImplementedError | ||
| 20 | |||
| 21 | # Don't complain if non-runnable code isn't run: | ||
| 22 | if 0: | ||
| 23 | if __name__ == .__main__.: | ||
| @@ -1,8 +1,41 @@ | |||
| 1 | downloads/ | 1 | # Temporary and binary files |
| 2 | *~ | ||
| 3 | *.py[cod] | ||
| 4 | *.so | ||
| 5 | *.cfg | ||
| 6 | !setup.cfg | ||
| 7 | *.orig | ||
| 8 | *.log | ||
| 9 | *.pot | ||
| 10 | __pycache__/* | ||
| 11 | .cache/* | ||
| 12 | .*.swp | ||
| 2 | 13 | ||
| 3 | feeds.save | 14 | # Project files |
| 4 | youtube-podcaster.json | 15 | .ropeproject |
| 16 | .project | ||
| 17 | .pydevproject | ||
| 18 | .settings | ||
| 19 | .idea | ||
| 5 | 20 | ||
| 6 | *.pyc | 21 | # Package files |
| 7 | *.xml | 22 | *.egg |
| 8 | *.sw? | 23 | *.eggs/ |
| 24 | .installed.cfg | ||
| 25 | *.egg-info | ||
| 26 | |||
| 27 | # Unittest and coverage | ||
| 28 | htmlcov/* | ||
| 29 | .coverage | ||
| 30 | .tox | ||
| 31 | junit.xml | ||
| 32 | coverage.xml | ||
| 33 | |||
| 34 | # Build and docs folder/files | ||
| 35 | build/* | ||
| 36 | dist/* | ||
| 37 | sdist/* | ||
| 38 | docs/api/* | ||
| 39 | docs/_build/* | ||
| 40 | cover/* | ||
| 41 | MANIFEST | ||
diff --git a/AUTHORS.rst b/AUTHORS.rst new file mode 100644 index 0000000..b4de63b --- /dev/null +++ b/AUTHORS.rst | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | ========== | ||
| 2 | Developers | ||
| 3 | ========== | ||
| 4 | |||
| 5 | * Tom van der Lee <t0m.vd.l33@gmail.com> | ||
diff --git a/CHANGES.rst b/CHANGES.rst new file mode 100644 index 0000000..889f44c --- /dev/null +++ b/CHANGES.rst | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | ========= | ||
| 2 | Changelog | ||
| 3 | ========= | ||
| 4 | |||
diff --git a/README.md b/README.md deleted file mode 100644 index 8028dfd..0000000 --- a/README.md +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | # YouTube Podcaster | ||
| 2 | Lets you covert YouTube-playlists to RSS podcast feeds and serve them. | ||
| 3 | |||
| 4 | ## Features | ||
| 5 | * Check playlists on HTTP-request | ||
| 6 | * Downloads videos and converts them to Ogg Vorbis files. | ||
| 7 | * Serve RSS feed | ||
| 8 | |||
| 9 | ## What it doesn't do (at the moment) | ||
| 10 | * Convert to mp3, mp4 or any other audio/video format | ||
| 11 | * Serve the downloaded audio files (needs to be done by an other server) | ||
| 12 | |||
| 13 | ## Dependencies | ||
| 14 | * [youtube-dl](https://github.com/rg3/youtube-dl) | ||
| 15 | * [python-feedgen](https://github.com/lkiesow/python-feedgen) | ||
| 16 | |||
| 17 | ## To do | ||
| 18 | * Add comments/documentation | ||
| 19 | * Support multiple audio/video formats | ||
| 20 | |||
| 21 | ## LICENSE | ||
| 22 | YouTube Podcaster is licensed under the MIT License, see the LICENSE file for more info. | ||
diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..b485fbb --- /dev/null +++ b/README.rst | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | YouTube Podcaster | ||
| 2 | ================= | ||
| 3 | |||
| 4 | Lets you covert YouTube-playlists to RSS podcast feeds and serve them. | ||
| 5 | |||
| 6 | Features | ||
| 7 | -------- | ||
| 8 | |||
| 9 | - Check playlists on HTTP-request | ||
| 10 | - Downloads videos and converts them to Ogg Vorbis files. | ||
| 11 | - Serve RSS feed | ||
| 12 | |||
| 13 | What it doesn't do (at the moment) | ||
| 14 | ---------------------------------- | ||
| 15 | |||
| 16 | - Convert to mp3, mp4 or any other audio/video format | ||
| 17 | - Serve the downloaded audio files (needs to be done by an other | ||
| 18 | server) | ||
| 19 | |||
| 20 | Dependencies | ||
| 21 | ------------ | ||
| 22 | |||
| 23 | - `youtube-dl <https://github.com/rg3/youtube-dl>`__ | ||
| 24 | - `python-feedgen <https://github.com/lkiesow/python-feedgen>`__ | ||
| 25 | |||
| 26 | To do | ||
| 27 | ----- | ||
| 28 | |||
| 29 | - Add comments/documentation | ||
| 30 | - Support multiple audio/video formats | ||
| 31 | |||
| 32 | LICENSE | ||
| 33 | ------- | ||
| 34 | |||
| 35 | YouTube Podcaster is licensed under the MIT License, see the LICENSE | ||
| 36 | file for more info. | ||
diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..e8b986c --- /dev/null +++ b/docs/Makefile | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | # Makefile for Sphinx documentation | ||
| 2 | # | ||
| 3 | |||
| 4 | # You can set these variables from the command line. | ||
| 5 | SPHINXOPTS = | ||
| 6 | SPHINXBUILD = sphinx-build | ||
| 7 | PAPER = | ||
| 8 | BUILDDIR = _build | ||
| 9 | |||
| 10 | # User-friendly check for sphinx-build | ||
| 11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $?), 1) | ||
| 12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) | ||
| 13 | endif | ||
| 14 | |||
| 15 | # Internal variables. | ||
| 16 | PAPEROPT_a4 = -D latex_paper_size=a4 | ||
| 17 | PAPEROPT_letter = -D latex_paper_size=letter | ||
| 18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | ||
| 19 | # the i18n builder cannot share the environment and doctrees with the others | ||
| 20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | ||
| 21 | |||
| 22 | .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext | ||
| 23 | |||
| 24 | help: | ||
| 25 | @echo "Please use \`make <target>' where <target> is one of" | ||
| 26 | @echo " html to make standalone HTML files" | ||
| 27 | @echo " dirhtml to make HTML files named index.html in directories" | ||
| 28 | @echo " singlehtml to make a single large HTML file" | ||
| 29 | @echo " pickle to make pickle files" | ||
| 30 | @echo " json to make JSON files" | ||
| 31 | @echo " htmlhelp to make HTML files and a HTML help project" | ||
| 32 | @echo " qthelp to make HTML files and a qthelp project" | ||
| 33 | @echo " devhelp to make HTML files and a Devhelp project" | ||
| 34 | @echo " epub to make an epub" | ||
| 35 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" | ||
| 36 | @echo " latexpdf to make LaTeX files and run them through pdflatex" | ||
| 37 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" | ||
| 38 | @echo " text to make text files" | ||
| 39 | @echo " man to make manual pages" | ||
| 40 | @echo " texinfo to make Texinfo files" | ||
| 41 | @echo " info to make Texinfo files and run them through makeinfo" | ||
| 42 | @echo " gettext to make PO message catalogs" | ||
| 43 | @echo " changes to make an overview of all changed/added/deprecated items" | ||
| 44 | @echo " xml to make Docutils-native XML files" | ||
| 45 | @echo " pseudoxml to make pseudoxml-XML files for display purposes" | ||
| 46 | @echo " linkcheck to check all external links for integrity" | ||
| 47 | @echo " doctest to run all doctests embedded in the documentation (if enabled)" | ||
| 48 | |||
| 49 | clean: | ||
| 50 | rm -rf $(BUILDDIR)/* | ||
| 51 | |||
| 52 | html: | ||
| 53 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html | ||
| 54 | @echo | ||
| 55 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." | ||
| 56 | |||
| 57 | dirhtml: | ||
| 58 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml | ||
| 59 | @echo | ||
| 60 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." | ||
| 61 | |||
| 62 | singlehtml: | ||
| 63 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml | ||
| 64 | @echo | ||
| 65 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." | ||
| 66 | |||
| 67 | pickle: | ||
| 68 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle | ||
| 69 | @echo | ||
| 70 | @echo "Build finished; now you can process the pickle files." | ||
| 71 | |||
| 72 | json: | ||
| 73 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json | ||
| 74 | @echo | ||
| 75 | @echo "Build finished; now you can process the JSON files." | ||
| 76 | |||
| 77 | htmlhelp: | ||
| 78 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp | ||
| 79 | @echo | ||
| 80 | @echo "Build finished; now you can run HTML Help Workshop with the" \ | ||
| 81 | ".hhp project file in $(BUILDDIR)/htmlhelp." | ||
| 82 | |||
| 83 | qthelp: | ||
| 84 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp | ||
| 85 | @echo | ||
| 86 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ | ||
| 87 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:" | ||
| 88 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/youtube-podcaster.qhcp" | ||
| 89 | @echo "To view the help file:" | ||
| 90 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/youtube-podcaster.qhc" | ||
| 91 | |||
| 92 | devhelp: | ||
| 93 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp | ||
| 94 | @echo | ||
| 95 | @echo "Build finished." | ||
| 96 | @echo "To view the help file:" | ||
| 97 | @echo "# mkdir -p $HOME/.local/share/devhelp/youtube-podcaster" | ||
| 98 | @echo "# ln -s $(BUILDDIR)/devhelp $HOME/.local/share/devhelp/youtube-podcaster" | ||
| 99 | @echo "# devhelp" | ||
| 100 | |||
| 101 | epub: | ||
| 102 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub | ||
| 103 | @echo | ||
| 104 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub." | ||
| 105 | |||
| 106 | latex: | ||
| 107 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | ||
| 108 | @echo | ||
| 109 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." | ||
| 110 | @echo "Run \`make' in that directory to run these through (pdf)latex" \ | ||
| 111 | "(use \`make latexpdf' here to do that automatically)." | ||
| 112 | |||
| 113 | latexpdf: | ||
| 114 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | ||
| 115 | @echo "Running LaTeX files through pdflatex..." | ||
| 116 | $(MAKE) -C $(BUILDDIR)/latex all-pdf | ||
| 117 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | ||
| 118 | |||
| 119 | latexpdfja: | ||
| 120 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | ||
| 121 | @echo "Running LaTeX files through platex and dvipdfmx..." | ||
| 122 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja | ||
| 123 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | ||
| 124 | |||
| 125 | text: | ||
| 126 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text | ||
| 127 | @echo | ||
| 128 | @echo "Build finished. The text files are in $(BUILDDIR)/text." | ||
| 129 | |||
| 130 | man: | ||
| 131 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man | ||
| 132 | @echo | ||
| 133 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man." | ||
| 134 | |||
| 135 | texinfo: | ||
| 136 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | ||
| 137 | @echo | ||
| 138 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." | ||
| 139 | @echo "Run \`make' in that directory to run these through makeinfo" \ | ||
| 140 | "(use \`make info' here to do that automatically)." | ||
| 141 | |||
| 142 | info: | ||
| 143 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | ||
| 144 | @echo "Running Texinfo files through makeinfo..." | ||
| 145 | make -C $(BUILDDIR)/texinfo info | ||
| 146 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." | ||
| 147 | |||
| 148 | gettext: | ||
| 149 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale | ||
| 150 | @echo | ||
| 151 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." | ||
| 152 | |||
| 153 | changes: | ||
| 154 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes | ||
| 155 | @echo | ||
| 156 | @echo "The overview file is in $(BUILDDIR)/changes." | ||
| 157 | |||
| 158 | linkcheck: | ||
| 159 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | ||
| 160 | @echo | ||
| 161 | @echo "Link check complete; look for any errors in the above output " \ | ||
| 162 | "or in $(BUILDDIR)/linkcheck/output.txt." | ||
| 163 | |||
| 164 | doctest: | ||
| 165 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest | ||
| 166 | @echo "Testing of doctests in the sources finished, look at the " \ | ||
| 167 | "results in $(BUILDDIR)/doctest/output.txt." | ||
| 168 | |||
| 169 | xml: | ||
| 170 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml | ||
| 171 | @echo | ||
| 172 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml." | ||
| 173 | |||
| 174 | pseudoxml: | ||
| 175 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml | ||
| 176 | @echo | ||
| 177 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." | ||
diff --git a/docs/_static/.gitignore b/docs/_static/.gitignore new file mode 100644 index 0000000..3c96363 --- /dev/null +++ b/docs/_static/.gitignore | |||
| @@ -0,0 +1 @@ | |||
| # Empty directory | |||
diff --git a/docs/authors.rst b/docs/authors.rst new file mode 100644 index 0000000..cd8e091 --- /dev/null +++ b/docs/authors.rst | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | .. _authors: | ||
| 2 | .. include:: ../AUTHORS.rst | ||
diff --git a/docs/changes.rst b/docs/changes.rst new file mode 100644 index 0000000..257630a --- /dev/null +++ b/docs/changes.rst | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | .. _changes: | ||
| 2 | .. include:: ../CHANGES.rst | ||
diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..6467b89 --- /dev/null +++ b/docs/conf.py | |||
| @@ -0,0 +1,238 @@ | |||
| 1 | # -*- coding: utf-8 -*- | ||
| 2 | # | ||
| 3 | # This file is execfile()d with the current directory set to its containing dir. | ||
| 4 | # | ||
| 5 | # Note that not all possible configuration values are present in this | ||
| 6 | # autogenerated file. | ||
| 7 | # | ||
| 8 | # All configuration values have a default; values that are commented out | ||
| 9 | # serve to show the default. | ||
| 10 | |||
| 11 | import sys | ||
| 12 | import os | ||
| 13 | import inspect | ||
| 14 | from sphinx import apidoc | ||
| 15 | |||
| 16 | |||
| 17 | __location__ = os.path.join(os.getcwd(), os.path.dirname( | ||
| 18 | inspect.getfile(inspect.currentframe()))) | ||
| 19 | |||
| 20 | package = "youtube_podcaster" | ||
| 21 | namespace = [] | ||
| 22 | namespace_pkg = ".".join([namespace[-1], package]) if namespace else package | ||
| 23 | |||
| 24 | # If extensions (or modules to document with autodoc) are in another directory, | ||
| 25 | # add these directories to sys.path here. If the directory is relative to the | ||
| 26 | # documentation root, use os.path.abspath to make it absolute, like shown here. | ||
| 27 | # sys.path.insert(0, os.path.abspath('.')) | ||
| 28 | |||
| 29 | # -- General configuration ----------------------------------------------------- | ||
| 30 | |||
| 31 | # If your documentation needs a minimal Sphinx version, state it here. | ||
| 32 | # needs_sphinx = '1.0' | ||
| 33 | |||
| 34 | # Add any Sphinx extension module names here, as strings. They can be extensions | ||
| 35 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. | ||
| 36 | extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', | ||
| 37 | 'sphinx.ext.autosummary', 'sphinx.ext.viewcode', 'sphinx.ext.coverage', | ||
| 38 | 'sphinx.ext.doctest', 'sphinx.ext.ifconfig', 'sphinx.ext.pngmath'] | ||
| 39 | |||
| 40 | # Add any paths that contain templates here, relative to this directory. | ||
| 41 | templates_path = ['_templates'] | ||
| 42 | |||
| 43 | # The suffix of source filenames. | ||
| 44 | source_suffix = '.rst' | ||
| 45 | |||
| 46 | # The encoding of source files. | ||
| 47 | # source_encoding = 'utf-8-sig' | ||
| 48 | |||
| 49 | # The master toctree document. | ||
| 50 | master_doc = 'index' | ||
| 51 | |||
| 52 | # General information about the project. | ||
| 53 | project = u'youtube-podcaster' | ||
| 54 | copyright = u'2015, Tom van der Lee' | ||
| 55 | |||
| 56 | # The version info for the project you're documenting, acts as replacement for | ||
| 57 | # |version| and |release|, also used in various other places throughout the | ||
| 58 | # built documents. | ||
| 59 | # | ||
| 60 | # The short X.Y version. | ||
| 61 | version = '' # Is set by calling `setup.py docs` | ||
| 62 | # The full version, including alpha/beta/rc tags. | ||
| 63 | release = '' # Is set by calling `setup.py docs` | ||
| 64 | |||
| 65 | # The language for content autogenerated by Sphinx. Refer to documentation | ||
| 66 | # for a list of supported languages. | ||
| 67 | # language = None | ||
| 68 | |||
| 69 | # There are two options for replacing |today|: either, you set today to some | ||
| 70 | # non-false value, then it is used: | ||
| 71 | # today = '' | ||
| 72 | # Else, today_fmt is used as the format for a strftime call. | ||
| 73 | # today_fmt = '%B %d, %Y' | ||
| 74 | |||
| 75 | # List of patterns, relative to source directory, that match files and | ||
| 76 | # directories to ignore when looking for source files. | ||
| 77 | exclude_patterns = ['_build'] | ||
| 78 | |||
| 79 | # The reST default role (used for this markup: `text`) to use for all documents. | ||
| 80 | # default_role = None | ||
| 81 | |||
| 82 | # If true, '()' will be appended to :func: etc. cross-reference text. | ||
| 83 | # add_function_parentheses = True | ||
| 84 | |||
| 85 | # If true, the current module name will be prepended to all description | ||
| 86 | # unit titles (such as .. function::). | ||
| 87 | # add_module_names = True | ||
| 88 | |||
| 89 | # If true, sectionauthor and moduleauthor directives will be shown in the | ||
| 90 | # output. They are ignored by default. | ||
| 91 | # show_authors = False | ||
| 92 | |||
| 93 | # The name of the Pygments (syntax highlighting) style to use. | ||
| 94 | pygments_style = 'sphinx' | ||
| 95 | |||
| 96 | # A list of ignored prefixes for module index sorting. | ||
| 97 | # modindex_common_prefix = [] | ||
| 98 | |||
| 99 | # If true, keep warnings as "system message" paragraphs in the built documents. | ||
| 100 | # keep_warnings = False | ||
| 101 | |||
| 102 | |||
| 103 | # -- Options for HTML output --------------------------------------------------- | ||
| 104 | |||
| 105 | # The theme to use for HTML and HTML Help pages. See the documentation for | ||
| 106 | # a list of builtin themes. | ||
| 107 | html_theme = 'alabaster' | ||
| 108 | |||
| 109 | # Theme options are theme-specific and customize the look and feel of a theme | ||
| 110 | # further. For a list of options available for each theme, see the | ||
| 111 | # documentation. | ||
| 112 | # html_theme_options = {} | ||
| 113 | |||
| 114 | # Add any paths that contain custom themes here, relative to this directory. | ||
| 115 | # html_theme_path = [] | ||
| 116 | |||
| 117 | # The name for this set of Sphinx documents. If None, it defaults to | ||
| 118 | # "<project> v<release> documentation". | ||
| 119 | try: | ||
| 120 | from namespace_pkg import __version__ as version | ||
| 121 | except ImportError: | ||
| 122 | pass | ||
| 123 | else: | ||
| 124 | release = version | ||
| 125 | |||
| 126 | # A shorter title for the navigation bar. Default is the same as html_title. | ||
| 127 | # html_short_title = None | ||
| 128 | |||
| 129 | # The name of an image file (relative to this directory) to place at the top | ||
| 130 | # of the sidebar. | ||
| 131 | # html_logo = "" | ||
| 132 | |||
| 133 | # The name of an image file (within the static path) to use as favicon of the | ||
| 134 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 | ||
| 135 | # pixels large. | ||
| 136 | # html_favicon = None | ||
| 137 | |||
| 138 | # Add any paths that contain custom static files (such as style sheets) here, | ||
| 139 | # relative to this directory. They are copied after the builtin static files, | ||
| 140 | # so a file named "default.css" will overwrite the builtin "default.css". | ||
| 141 | html_static_path = ['_static'] | ||
| 142 | |||
| 143 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, | ||
| 144 | # using the given strftime format. | ||
| 145 | # html_last_updated_fmt = '%b %d, %Y' | ||
| 146 | |||
| 147 | # If true, SmartyPants will be used to convert quotes and dashes to | ||
| 148 | # typographically correct entities. | ||
| 149 | # html_use_smartypants = True | ||
| 150 | |||
| 151 | # Custom sidebar templates, maps document names to template names. | ||
| 152 | # html_sidebars = {} | ||
| 153 | |||
| 154 | # Additional templates that should be rendered to pages, maps page names to | ||
| 155 | # template names. | ||
| 156 | # html_additional_pages = {} | ||
| 157 | |||
| 158 | # If false, no module index is generated. | ||
| 159 | # html_domain_indices = True | ||
| 160 | |||
| 161 | # If false, no index is generated. | ||
| 162 | # html_use_index = True | ||
| 163 | |||
| 164 | # If true, the index is split into individual pages for each letter. | ||
| 165 | # html_split_index = False | ||
| 166 | |||
| 167 | # If true, links to the reST sources are added to the pages. | ||
| 168 | # html_show_sourcelink = True | ||
| 169 | |||
| 170 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | ||
| 171 | # html_show_sphinx = True | ||
| 172 | |||
| 173 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. | ||
| 174 | # html_show_copyright = True | ||
| 175 | |||
| 176 | # If true, an OpenSearch description file will be output, and all pages will | ||
| 177 | # contain a <link> tag referring to it. The value of this option must be the | ||
| 178 | # base URL from which the finished HTML is served. | ||
| 179 | # html_use_opensearch = '' | ||
| 180 | |||
| 181 | # This is the file name suffix for HTML files (e.g. ".xhtml"). | ||
| 182 | # html_file_suffix = None | ||
| 183 | |||
| 184 | # Output file base name for HTML help builder. | ||
| 185 | htmlhelp_basename = 'youtube_podcaster-doc' | ||
| 186 | |||
| 187 | |||
| 188 | # -- Options for LaTeX output -------------------------------------------------- | ||
| 189 | |||
| 190 | latex_elements = { | ||
| 191 | # The paper size ('letterpaper' or 'a4paper'). | ||
| 192 | # 'papersize': 'letterpaper', | ||
| 193 | |||
| 194 | # The font size ('10pt', '11pt' or '12pt'). | ||
| 195 | # 'pointsize': '10pt', | ||
| 196 | |||
| 197 | # Additional stuff for the LaTeX preamble. | ||
| 198 | # 'preamble': '', | ||
| 199 | } | ||
| 200 | |||
| 201 | # Grouping the document tree into LaTeX files. List of tuples | ||
| 202 | # (source start file, target name, title, author, documentclass [howto/manual]). | ||
| 203 | latex_documents = [ | ||
| 204 | ('index', 'user_guide.tex', u'youtube-podcaster Documentation', | ||
| 205 | u'Tom van der Lee', 'manual'), | ||
| 206 | ] | ||
| 207 | |||
| 208 | # The name of an image file (relative to this directory) to place at the top of | ||
| 209 | # the title page. | ||
| 210 | # latex_logo = "" | ||
| 211 | |||
| 212 | # For "manual" documents, if this is true, then toplevel headings are parts, | ||
| 213 | # not chapters. | ||
| 214 | # latex_use_parts = False | ||
| 215 | |||
| 216 | # If true, show page references after internal links. | ||
| 217 | # latex_show_pagerefs = False | ||
| 218 | |||
| 219 | # If true, show URL addresses after external links. | ||
| 220 | # latex_show_urls = False | ||
| 221 | |||
| 222 | # Documents to append as an appendix to all manuals. | ||
| 223 | # latex_appendices = [] | ||
| 224 | |||
| 225 | # If false, no module index is generated. | ||
| 226 | # latex_domain_indices = True | ||
| 227 | |||
| 228 | # -- External mapping ------------------------------------------------------------ | ||
| 229 | python_version = '.'.join(map(str, sys.version_info[0:2])) | ||
| 230 | intersphinx_mapping = { | ||
| 231 | 'sphinx': ('http://sphinx.pocoo.org', None), | ||
| 232 | 'python': ('http://docs.python.org/' + python_version, None), | ||
| 233 | 'matplotlib': ('http://matplotlib.sourceforge.net', None), | ||
| 234 | 'numpy': ('http://docs.scipy.org/doc/numpy', None), | ||
| 235 | 'sklearn': ('http://scikit-learn.org/stable', None), | ||
| 236 | 'pandas': ('http://pandas.pydata.org/pandas-docs/stable', None), | ||
| 237 | 'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None), | ||
| 238 | } | ||
diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..62a305d --- /dev/null +++ b/docs/index.rst | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | ================= | ||
| 2 | youtube-podcaster | ||
| 3 | ================= | ||
| 4 | |||
| 5 | This is the documentation of **youtube-podcaster**. | ||
| 6 | |||
| 7 | .. note:: | ||
| 8 | |||
| 9 | This is the main page of your project's `Sphinx <http://sphinx-doc.org/>`_ | ||
| 10 | documentation. It is formatted in `reStructuredText | ||
| 11 | <http://sphinx-doc.org/rest.html>`__. Add additional pages by creating | ||
| 12 | rst-files in ``docs`` and adding them to the `toctree | ||
| 13 | <http://sphinx-doc.org/markup/toctree.html>`_ below. Use then | ||
| 14 | `references <http://sphinx-doc.org/markup/inline.html>`__ in order to link | ||
| 15 | them from this page, e.g. :ref:`authors <authors>` and :ref:`changes`. | ||
| 16 | It is also possible to refer to the documentation of other Python packages | ||
| 17 | with the `Python domain syntax | ||
| 18 | <http://sphinx-doc.org/domains.html#the-python-domain>`__. By default you | ||
| 19 | can reference the documentation of `Sphinx <http://sphinx.pocoo.org>`__, | ||
| 20 | `Python <http://docs.python.org/>`__, `matplotlib | ||
| 21 | <http://matplotlib.sourceforge.net>`__, `NumPy | ||
| 22 | <http://docs.scipy.org/doc/numpy>`__, `Scikit-Learn | ||
| 23 | <http://scikit-learn.org/stable>`__, `Pandas | ||
| 24 | <http://pandas.pydata.org/pandas-docs/stable>`__, `SciPy | ||
| 25 | <http://docs.scipy.org/doc/scipy/reference/>`__. You can add more by | ||
| 26 | extending the ``intersphinx_mapping`` in your Sphinx's ``conf.py``. | ||
| 27 | |||
| 28 | Contents | ||
| 29 | ======== | ||
| 30 | |||
| 31 | .. toctree:: | ||
| 32 | :maxdepth: 2 | ||
| 33 | |||
| 34 | License <license> | ||
| 35 | Authors <authors> | ||
| 36 | Changelog <changes> | ||
| 37 | Module Reference <api/modules> | ||
| 38 | |||
| 39 | |||
| 40 | Indices and tables | ||
| 41 | ================== | ||
| 42 | |||
| 43 | * :ref:`genindex` | ||
| 44 | * :ref:`modindex` | ||
| 45 | * :ref:`search` | ||
diff --git a/docs/license.rst b/docs/license.rst new file mode 100644 index 0000000..943758d --- /dev/null +++ b/docs/license.rst | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | .. _license: | ||
| 2 | |||
| 3 | ======= | ||
| 4 | License | ||
| 5 | ======= | ||
| 6 | |||
| 7 | .. literalinclude:: ../LICENSE | ||
diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bee56c1 --- /dev/null +++ b/requirements.txt | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | # Add your requirements here like: | ||
| 2 | youtube-dl | ||
| 3 | feedgen | ||
diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..1d3b7c5 --- /dev/null +++ b/setup.cfg | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | [metadata] | ||
| 2 | name = youtube-podcaster | ||
| 3 | summary = Converts youtube playlists to RSS-feeds | ||
| 4 | author = Tom van der Lee | ||
| 5 | author-email = t0m.vd.l33@gmail.com | ||
| 6 | license = MIT License | ||
| 7 | home-page = http://github.com/tomvanderlee/youtube-podcaster | ||
| 8 | description-file = README.rst | ||
| 9 | # Add here all kinds of additional classifiers as defined under | ||
| 10 | # https://pypi.python.org/pypi?%3Aaction=list_classifiers | ||
| 11 | classifiers = Development Status :: 3 - Alpha, | ||
| 12 | License :: OSI Approved :: MIT License | ||
| 13 | Programming Language :: Python :: 3 :: Only | ||
| 14 | |||
| 15 | [entry_points] | ||
| 16 | # Add here console scripts like: | ||
| 17 | # console_scripts = | ||
| 18 | # hello_world = youtube_podcaster.module:function | ||
| 19 | # as well as other entry_points. | ||
| 20 | |||
| 21 | |||
| 22 | [files] | ||
| 23 | # Add here 'data_files', 'packages' or 'namespace_packages'. | ||
| 24 | # Additional data files are defined as key value pairs of source and target: | ||
| 25 | packages = | ||
| 26 | youtube_podcaster | ||
| 27 | # data_files = | ||
| 28 | # share/youtube_podcaster_docs = docs/* | ||
| 29 | |||
| 30 | [extras] | ||
| 31 | # Add here additional requirements for extra features, like: | ||
| 32 | # PDF = | ||
| 33 | # ReportLab>=1.2 | ||
| 34 | # RXP | ||
| 35 | |||
| 36 | [test] | ||
| 37 | # py.test options when running `python setup.py test` | ||
| 38 | addopts = tests | ||
| 39 | |||
| 40 | [pytest] | ||
| 41 | # Options for py.test: | ||
| 42 | # Specify command line options as you would do when invoking py.test directly. | ||
| 43 | # e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml | ||
| 44 | # in order to write a coverage file that can be read by Jenkins. | ||
| 45 | addopts = | ||
| 46 | --cov youtube_podcaster --cov-report term-missing | ||
| 47 | --verbose | ||
| 48 | |||
| 49 | [aliases] | ||
| 50 | docs = build_sphinx | ||
| 51 | |||
| 52 | [bdist_wheel] | ||
| 53 | # Use this option if your package is pure-python | ||
| 54 | universal = 1 | ||
| 55 | |||
| 56 | [build_sphinx] | ||
| 57 | source_dir = docs | ||
| 58 | build_dir = docs/_build | ||
| 59 | |||
| 60 | [pbr] | ||
| 61 | # Let pbr run sphinx-apidoc | ||
| 62 | autodoc_tree_index_modules = True | ||
| 63 | # autodoc_tree_excludes = ... | ||
| 64 | # Let pbr itself generate the apidoc | ||
| 65 | # autodoc_index_modules = True | ||
| 66 | # autodoc_exclude_modules = ... | ||
| 67 | # Convert warnings to errors | ||
| 68 | # warnerrors = True | ||
| 69 | |||
| 70 | [devpi:upload] | ||
| 71 | # Options for the devpi: PyPI serer and packaging tool | ||
| 72 | # VCS export must be deactivated since we are using setuptools-scm | ||
| 73 | no-vcs = 1 | ||
| 74 | format = bdist_wheel | ||
diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..3ec3131 --- /dev/null +++ b/setup.py | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | #!/usr/bin/env python | ||
| 2 | # -*- coding: utf-8 -*- | ||
| 3 | """ | ||
| 4 | Setup file for youtube_podcaster. | ||
| 5 | |||
| 6 | This file was generated with PyScaffold 2.4.2, a tool that easily | ||
| 7 | puts up a scaffold for your new Python project. Learn more under: | ||
| 8 | http://pyscaffold.readthedocs.org/ | ||
| 9 | """ | ||
| 10 | |||
| 11 | import sys | ||
| 12 | from setuptools import setup | ||
| 13 | |||
| 14 | |||
| 15 | def setup_package(): | ||
| 16 | needs_sphinx = {'build_sphinx', 'upload_docs'}.intersection(sys.argv) | ||
| 17 | sphinx = ['sphinx'] if needs_sphinx else [] | ||
| 18 | setup(setup_requires=['six', 'pyscaffold>=2.4rc1,<2.5a0'] + sphinx, | ||
| 19 | tests_require=['pytest_cov', 'pytest'], | ||
| 20 | use_pyscaffold=True) | ||
| 21 | |||
| 22 | |||
| 23 | if __name__ == "__main__": | ||
| 24 | setup_package() | ||
diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..1a40d64 --- /dev/null +++ b/tests/conftest.py | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #!/usr/bin/env python | ||
| 2 | # -*- coding: utf-8 -*- | ||
| 3 | """ | ||
| 4 | Dummy conftest.py for youtube_podcaster. | ||
| 5 | |||
| 6 | If you don't know what this is for, just leave it empty. | ||
| 7 | Read more about conftest.py under: | ||
| 8 | https://pytest.org/latest/plugins.html | ||
| 9 | """ | ||
| 10 | from __future__ import print_function, absolute_import, division | ||
| 11 | |||
| 12 | import pytest | ||
diff --git a/youtube-podcaster b/youtube_podcaster/youtube-podcaster index bb2db26..bb2db26 100755 --- a/youtube-podcaster +++ b/youtube_podcaster/youtube-podcaster | |||
diff --git a/youtube-podcaster.json.sample b/youtube_podcaster/youtube-podcaster.json.sample index d9d078f..d9d078f 100644 --- a/youtube-podcaster.json.sample +++ b/youtube_podcaster/youtube-podcaster.json.sample | |||
diff --git a/youtube/__init__.py b/youtube_podcaster/youtube/__init__.py index d26ae61..d26ae61 100644 --- a/youtube/__init__.py +++ b/youtube_podcaster/youtube/__init__.py | |||
diff --git a/youtube/downloader.py b/youtube_podcaster/youtube/downloader.py index ca1327b..ca1327b 100644 --- a/youtube/downloader.py +++ b/youtube_podcaster/youtube/downloader.py | |||
diff --git a/youtube/youtube.py b/youtube_podcaster/youtube/youtube.py index bcbff21..bcbff21 100644 --- a/youtube/youtube.py +++ b/youtube_podcaster/youtube/youtube.py | |||
