Recently I needed to deploy Patchwork and I noticed it was missing a setup.py. This is a first draft at adding one and making Patchwork easy to install with pip.
To do this, static files and templates are moved within the Python package. "htdocs" is renamed to "static" which is the default location Django searches for static files. The two templates directories have been merged - I'm not sure why there are two so this perhaps breaks something I'm not aware of. With this change you should be able to do something like: $ python3 setup.py sdist $ python3 -m venv ~/.virtualenvs/pw $ source ~/.virtualenvs/pw/bin/activate $ pip install dist/patchwork-3.0.0a1.tar.gz $ DJANGO_SETTINGS_MODULE=patchwork.settings.dev PW_TEST_DB_TYPE=sqlite \ django-admin migrate $ DJANGO_SETTINGS_MODULE=patchwork.settings.dev PW_TEST_DB_TYPE=sqlite \ django-admin runserver I poked around the web UI and everything seems to work as expected, but it's quite likely I've missed something. This change would obviously also require updating the installation documentation, but before I go any further I'd love some feedback on this. Is this something people are interested in? My motivation for this is that I've got a little Django app that runs alongside Patchwork and would prefer it to be a simple "pip install" to get everything set up. Signed-off-by: Jeremy Cline <jcl...@redhat.com> --- MANIFEST.in | 7 ++ htdocs/js/jquery-1.10.1.min.js | 1 - htdocs/js/jquery.checkboxes-1.0.6.min.js | 1 - htdocs/js/jquery.stickytableheaders.min.js | 1 - htdocs/js/jquery.tablednd.js | 1 - patchwork/settings/base.py | 4 +- {htdocs => patchwork/static}/README.rst | 0 .../static}/css/bootstrap.min.css | 0 .../static}/css/selectize.bootstrap3.css | 0 {htdocs => patchwork/static}/css/style.css | 0 .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../static}/js/bootstrap.min.js | 0 {htdocs => patchwork/static}/js/bundle.js | 0 .../static}/js/clipboard.min.js | 0 patchwork/static/js/jquery-1.10.1.min.js | 1 + .../static/js/jquery.checkboxes-1.0.6.min.js | 1 + .../js/jquery.stickytableheaders.min.js | 1 + patchwork/static/js/jquery.tablednd.js | 1 + .../static}/js/selectize.min.js | 0 {templates => patchwork/templates}/404.html | 0 {templates => patchwork/templates}/base.html | 0 .../registration/password_change_done.html | 0 .../registration/password_change_form.html | 0 .../registration/password_reset_complete.html | 0 .../registration/password_reset_confirm.html | 0 .../registration/password_reset_done.html | 0 .../registration/password_reset_email.html | 0 .../registration/password_reset_form.html | 0 requirements-test.txt | 2 +- setup.py | 69 ++++++++++++++++++ 33 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 MANIFEST.in delete mode 120000 htdocs/js/jquery-1.10.1.min.js delete mode 120000 htdocs/js/jquery.checkboxes-1.0.6.min.js delete mode 120000 htdocs/js/jquery.stickytableheaders.min.js delete mode 120000 htdocs/js/jquery.tablednd.js rename {htdocs => patchwork/static}/README.rst (100%) rename {htdocs => patchwork/static}/css/bootstrap.min.css (100%) rename {htdocs => patchwork/static}/css/selectize.bootstrap3.css (100%) rename {htdocs => patchwork/static}/css/style.css (100%) rename {htdocs => patchwork/static}/fonts/glyphicons-halflings-regular.eot (100%) rename {htdocs => patchwork/static}/fonts/glyphicons-halflings-regular.svg (100%) rename {htdocs => patchwork/static}/fonts/glyphicons-halflings-regular.ttf (100%) rename {htdocs => patchwork/static}/fonts/glyphicons-halflings-regular.woff (100%) rename {htdocs => patchwork/static}/js/bootstrap.min.js (100%) rename {htdocs => patchwork/static}/js/bundle.js (100%) rename {htdocs => patchwork/static}/js/clipboard.min.js (100%) create mode 120000 patchwork/static/js/jquery-1.10.1.min.js create mode 120000 patchwork/static/js/jquery.checkboxes-1.0.6.min.js create mode 120000 patchwork/static/js/jquery.stickytableheaders.min.js create mode 120000 patchwork/static/js/jquery.tablednd.js rename {htdocs => patchwork/static}/js/selectize.min.js (100%) rename {templates => patchwork/templates}/404.html (100%) rename {templates => patchwork/templates}/base.html (100%) rename {templates => patchwork/templates}/registration/password_change_done.html (100%) rename {templates => patchwork/templates}/registration/password_change_form.html (100%) rename {templates => patchwork/templates}/registration/password_reset_complete.html (100%) rename {templates => patchwork/templates}/registration/password_reset_confirm.html (100%) rename {templates => patchwork/templates}/registration/password_reset_done.html (100%) rename {templates => patchwork/templates}/registration/password_reset_email.html (100%) rename {templates => patchwork/templates}/registration/password_reset_form.html (100%) create mode 100755 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..8d20fbf --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,7 @@ +include COPYING CONTRIBUTING.rst README.rst +include requirements-prod.txt requirements-test.txt +recursive-include patchwork/static *.js *.css *.png *.ico *.eot *.svg *.ttf *.woff *.woff2 +recursive-include patchwork/templates *.html *.txt +recursive-include patchwork/fixtures *.xml +graft docs +prune docs/_build diff --git a/htdocs/js/jquery-1.10.1.min.js b/htdocs/js/jquery-1.10.1.min.js deleted file mode 120000 index d48d893..0000000 --- a/htdocs/js/jquery-1.10.1.min.js +++ /dev/null @@ -1 +0,0 @@ -../../lib/packages/jquery/jquery-1.10.1.min.js \ No newline at end of file diff --git a/htdocs/js/jquery.checkboxes-1.0.6.min.js b/htdocs/js/jquery.checkboxes-1.0.6.min.js deleted file mode 120000 index dfef5d4..0000000 --- a/htdocs/js/jquery.checkboxes-1.0.6.min.js +++ /dev/null @@ -1 +0,0 @@ -../../lib/packages/jquery/jquery.checkboxes-1.0.6.min.js \ No newline at end of file diff --git a/htdocs/js/jquery.stickytableheaders.min.js b/htdocs/js/jquery.stickytableheaders.min.js deleted file mode 120000 index 0c22fa9..0000000 --- a/htdocs/js/jquery.stickytableheaders.min.js +++ /dev/null @@ -1 +0,0 @@ -../../lib/packages/jquery/jquery.stickytableheaders.min.js \ No newline at end of file diff --git a/htdocs/js/jquery.tablednd.js b/htdocs/js/jquery.tablednd.js deleted file mode 120000 index ed51ba1..0000000 --- a/htdocs/js/jquery.tablednd.js +++ /dev/null @@ -1 +0,0 @@ -../../lib/packages/jquery/jquery.tablednd.js \ No newline at end of file diff --git a/patchwork/settings/base.py b/patchwork/settings/base.py index 001878a..e72d809 100644 --- a/patchwork/settings/base.py +++ b/patchwork/settings/base.py @@ -5,7 +5,7 @@ Base settings for patchwork project. import os ROOT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), - os.pardir, os.pardir) + os.pardir) # # Core settings @@ -97,7 +97,7 @@ SITE_ID = 1 STATIC_URL = '/static/' STATICFILES_DIRS = [ - os.path.join(ROOT_DIR, 'htdocs'), + os.path.join(ROOT_DIR, 'static'), ] # diff --git a/htdocs/README.rst b/patchwork/static/README.rst similarity index 100% rename from htdocs/README.rst rename to patchwork/static/README.rst diff --git a/htdocs/css/bootstrap.min.css b/patchwork/static/css/bootstrap.min.css similarity index 100% rename from htdocs/css/bootstrap.min.css rename to patchwork/static/css/bootstrap.min.css diff --git a/htdocs/css/selectize.bootstrap3.css b/patchwork/static/css/selectize.bootstrap3.css similarity index 100% rename from htdocs/css/selectize.bootstrap3.css rename to patchwork/static/css/selectize.bootstrap3.css diff --git a/htdocs/css/style.css b/patchwork/static/css/style.css similarity index 100% rename from htdocs/css/style.css rename to patchwork/static/css/style.css diff --git a/htdocs/fonts/glyphicons-halflings-regular.eot b/patchwork/static/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from htdocs/fonts/glyphicons-halflings-regular.eot rename to patchwork/static/fonts/glyphicons-halflings-regular.eot diff --git a/htdocs/fonts/glyphicons-halflings-regular.svg b/patchwork/static/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from htdocs/fonts/glyphicons-halflings-regular.svg rename to patchwork/static/fonts/glyphicons-halflings-regular.svg diff --git a/htdocs/fonts/glyphicons-halflings-regular.ttf b/patchwork/static/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from htdocs/fonts/glyphicons-halflings-regular.ttf rename to patchwork/static/fonts/glyphicons-halflings-regular.ttf diff --git a/htdocs/fonts/glyphicons-halflings-regular.woff b/patchwork/static/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from htdocs/fonts/glyphicons-halflings-regular.woff rename to patchwork/static/fonts/glyphicons-halflings-regular.woff diff --git a/htdocs/js/bootstrap.min.js b/patchwork/static/js/bootstrap.min.js similarity index 100% rename from htdocs/js/bootstrap.min.js rename to patchwork/static/js/bootstrap.min.js diff --git a/htdocs/js/bundle.js b/patchwork/static/js/bundle.js similarity index 100% rename from htdocs/js/bundle.js rename to patchwork/static/js/bundle.js diff --git a/htdocs/js/clipboard.min.js b/patchwork/static/js/clipboard.min.js similarity index 100% rename from htdocs/js/clipboard.min.js rename to patchwork/static/js/clipboard.min.js diff --git a/patchwork/static/js/jquery-1.10.1.min.js b/patchwork/static/js/jquery-1.10.1.min.js new file mode 120000 index 0000000..659cd57 --- /dev/null +++ b/patchwork/static/js/jquery-1.10.1.min.js @@ -0,0 +1 @@ +../../../lib/packages/jquery/jquery-1.10.1.min.js \ No newline at end of file diff --git a/patchwork/static/js/jquery.checkboxes-1.0.6.min.js b/patchwork/static/js/jquery.checkboxes-1.0.6.min.js new file mode 120000 index 0000000..8b3452b --- /dev/null +++ b/patchwork/static/js/jquery.checkboxes-1.0.6.min.js @@ -0,0 +1 @@ +../../../lib/packages/jquery/jquery.checkboxes-1.0.6.min.js \ No newline at end of file diff --git a/patchwork/static/js/jquery.stickytableheaders.min.js b/patchwork/static/js/jquery.stickytableheaders.min.js new file mode 120000 index 0000000..7031ac1 --- /dev/null +++ b/patchwork/static/js/jquery.stickytableheaders.min.js @@ -0,0 +1 @@ +../../../lib/packages/jquery/jquery.stickytableheaders.min.js \ No newline at end of file diff --git a/patchwork/static/js/jquery.tablednd.js b/patchwork/static/js/jquery.tablednd.js new file mode 120000 index 0000000..80574c4 --- /dev/null +++ b/patchwork/static/js/jquery.tablednd.js @@ -0,0 +1 @@ +../../../lib/packages/jquery/jquery.tablednd.js \ No newline at end of file diff --git a/htdocs/js/selectize.min.js b/patchwork/static/js/selectize.min.js similarity index 100% rename from htdocs/js/selectize.min.js rename to patchwork/static/js/selectize.min.js diff --git a/templates/404.html b/patchwork/templates/404.html similarity index 100% rename from templates/404.html rename to patchwork/templates/404.html diff --git a/templates/base.html b/patchwork/templates/base.html similarity index 100% rename from templates/base.html rename to patchwork/templates/base.html diff --git a/templates/registration/password_change_done.html b/patchwork/templates/registration/password_change_done.html similarity index 100% rename from templates/registration/password_change_done.html rename to patchwork/templates/registration/password_change_done.html diff --git a/templates/registration/password_change_form.html b/patchwork/templates/registration/password_change_form.html similarity index 100% rename from templates/registration/password_change_form.html rename to patchwork/templates/registration/password_change_form.html diff --git a/templates/registration/password_reset_complete.html b/patchwork/templates/registration/password_reset_complete.html similarity index 100% rename from templates/registration/password_reset_complete.html rename to patchwork/templates/registration/password_reset_complete.html diff --git a/templates/registration/password_reset_confirm.html b/patchwork/templates/registration/password_reset_confirm.html similarity index 100% rename from templates/registration/password_reset_confirm.html rename to patchwork/templates/registration/password_reset_confirm.html diff --git a/templates/registration/password_reset_done.html b/patchwork/templates/registration/password_reset_done.html similarity index 100% rename from templates/registration/password_reset_done.html rename to patchwork/templates/registration/password_reset_done.html diff --git a/templates/registration/password_reset_email.html b/patchwork/templates/registration/password_reset_email.html similarity index 100% rename from templates/registration/password_reset_email.html rename to patchwork/templates/registration/password_reset_email.html diff --git a/templates/registration/password_reset_form.html b/patchwork/templates/registration/password_reset_form.html similarity index 100% rename from templates/registration/password_reset_form.html rename to patchwork/templates/registration/password_reset_form.html diff --git a/requirements-test.txt b/requirements-test.txt index 5afe243..43af5ea 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -2,4 +2,4 @@ mysqlclient~=1.4.4 psycopg2-binary~=2.8.0 sqlparse~=0.3.0 python-dateutil~=2.8.0 -https://github.com/p1c2u/openapi-core/archive/97ec8c796746f72ef3298fe92078b5f80e1f66f7.tar.gz +git+https://github.com/p1c2u/openapi-core.git@97ec8c796746f72ef3298fe92078b5f80e1f66f7 # openapi-core diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..0ea5fe4 --- /dev/null +++ b/setup.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +import os + +from setuptools import setup, find_packages + + +here = os.path.abspath(os.path.dirname(__file__)) +with open(os.path.join(here, "README.rst")) as fd: + README = fd.read() + + +def get_requirements(requirements_file="requirements-prod.txt"): + """Get the contents of a file listing the requirements. + + Args: + requirements_file (str): The path to the requirements file, relative + to this file. + + Returns: + list: the list of requirements, or an empty list if + ``requirements_file`` could not be opened or read. + """ + with open(requirements_file) as fd: + lines = fd.readlines() + dependencies = [] + for line in lines: + maybe_dep = line.strip() + if maybe_dep.startswith("#"): + # Skip pure comment lines + continue + if maybe_dep.startswith("git+"): + # VCS reference for dev purposes, expect a trailing comment + # with the normal requirement + __, __, maybe_dep = maybe_dep.rpartition("#") + else: + # Ignore any trailing comment + maybe_dep, __, __ = maybe_dep.partition("#") + # Remove any whitespace and assume non-empty results are dependencies + maybe_dep = maybe_dep.strip() + if maybe_dep: + dependencies.append(maybe_dep) + return dependencies + + +setup( + name="patchwork", + version="3.0.0a1", + description="A patch tracking system for community-based projects.", + long_description=README, + url="https://github.com/getpatchwork/patchwork/", + # Possible options are at https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Framework :: Django", + "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + ], + license="GPLv2", + packages=find_packages(), + include_package_data=True, + zip_safe=False, + install_requires=get_requirements(), + tests_require=get_requirements(requirements_file="requirements-test.txt"), + test_suite="patchwork.tests", +) -- 2.26.2 _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork