diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2830888 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.pyc +*.egg-info +.pytest_cache/ +/debian/.debhelper/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..7e7f73b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,18 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/psf/black + rev: 22.3.0 + hooks: + - id: black + args: ['--target-version', 'py37', '--skip-string-normalization', '--line-length', '110'] +- repo: https://github.com/PyCQA/isort + rev: 5.7.0 + hooks: + - id: isort + args: ['--profile', 'black', '--line-length', '110'] +- repo: https://github.com/asottile/pyupgrade + rev: v2.20.0 + hooks: + - id: pyupgrade + args: ['--keep-percent-format', '--py37-plus'] diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..6a44876 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,44 @@ +@Library('eo-jenkins-lib@main') import eo.Utils + +pipeline { + agent any + options { + disableConcurrentBuilds() + } + stages { + stage('Unit Tests') { + steps { + sh 'tox -rv' + } + post { + always { + mergeJunitResults() + } + } + } + stage('Packaging') { + steps { + script { + if (env.JOB_NAME == 'publik-django-templatetags' && env.GIT_BRANCH == 'origin/main') { + sh 'sudo -H -u eobuilder /usr/local/bin/eobuilder -d buster,bullseye publik-django-templatetags' + } else if (env.GIT_BRANCH.startsWith('hotfix/')) { + sh "sudo -H -u eobuilder /usr/local/bin/eobuilder -d buster,bullseye --branch ${env.GIT_BRANCH} --hotfix publik-django-templatetags" + } + } + } + } + } + post { + always { + script { + utils = new Utils() + utils.mail_notify(currentBuild, env, 'ci+jenkins-publik-django-templatetags@entrouvert.org') + } + } + success { + cleanWs() + } + } +} + + diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..61ad30b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +include MANIFEST.in +include COPYING +include README +include VERSION diff --git a/README b/README new file mode 100644 index 0000000..6d4c6b9 --- /dev/null +++ b/README @@ -0,0 +1,40 @@ +publik-django-templatetags +========================== + +Template tags and filters shared between Publik projects. + +Code Style +---------- + +black is used to format the code, using thoses parameters: + + black --target-version py35 --skip-string-normalization --line-length 110 + +isort is used to format the imports, using those parameters: + + isort --profile black --line-length 110 + +pyupgrade is used to automatically upgrade syntax, using those parameters: + + pyupgrade --keep-percent-format --py37-plus + +There is .pre-commit-config.yaml to use pre-commit to automatically run black, +isort and pyupgrade before commits. (execute `pre-commit install` to install +the git hook.) + + +License +------- + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..e18862d --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +publik-django-templatetags (0-1) unstable; urgency=low + + * initial release + + -- Frederic Peters Tue, 03 May 2022 08:42:40 +0200 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..0e88b60 --- /dev/null +++ b/debian/control @@ -0,0 +1,13 @@ +Source: publik-django-templatetags +Maintainer: Entr’ouvert +Section: python +Priority: optional +Build-Depends: debhelper-compat (= 12), dh-python, python3-all, python3-setuptools, python3-django +Standards-Version: 3.9.1 + +Package: python3-publik-django-templatetags +Architecture: all +Depends: ${misc:Depends}, ${python3:Depends} +Description: Template tags and filters shared between Publik projects + Django shared application with custom template tags and filters + useful in multiple Publik modules. diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..b37f7a2 --- /dev/null +++ b/debian/rules @@ -0,0 +1,7 @@ +#!/usr/bin/make -f + +export PYBUILD_NAME=publik-django-templatetags +export PYBUILD_DISABLE=test + +%: + dh $@ --with python3 --buildsystem=pybuild diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/publik_django_templatetags/__init__.py b/publik_django_templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..c184c0f --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +DJANGO_SETTINGS_MODULE = tests.project.settings diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..2871a66 --- /dev/null +++ b/setup.py @@ -0,0 +1,114 @@ +#! /usr/bin/env python + +import os +import subprocess +import sys +from distutils.cmd import Command +from distutils.command.build import build as _build +from distutils.command.sdist import sdist + +from setuptools import find_packages, setup +from setuptools.command.install_lib import install_lib as _install_lib + + +class eo_sdist(sdist): + def run(self): + if os.path.exists('VERSION'): + os.remove('VERSION') + version = get_version() + with open('VERSION', 'w') as fd: + fd.write(version) + sdist.run(self) + if os.path.exists('VERSION'): + os.remove('VERSION') + + +def get_version(): + if os.path.exists('VERSION'): + with open('VERSION') as v: + return v.read() + if os.path.exists('.git'): + p = subprocess.Popen( + ['git', 'describe', '--dirty=.dirty', '--match=v*'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + result = p.communicate()[0] + if p.returncode == 0: + result = result.decode('ascii').strip()[1:] # strip spaces/newlines and initial v + if '-' in result: # not a tagged version + real_number, commit_count, commit_hash = result.split('-', 2) + version = '%s.post%s+%s' % (real_number, commit_count, commit_hash) + else: + version = result + return version + else: + return '0.0.post%s' % len(subprocess.check_output(['git', 'rev-list', 'HEAD']).splitlines()) + return '0.0' + + +class compile_translations(Command): + description = 'compile message catalogs to MO files via django compilemessages' + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + try: + from django.core.management import call_command + + for path, dirs, files in os.walk('publik_django_templatetags'): + if 'locale' not in dirs: + continue + curdir = os.getcwd() + os.chdir(os.path.realpath(path)) + call_command('compilemessages') + os.chdir(curdir) + except ImportError: + sys.stderr.write('!!! Please install Django >= 2.2 to build translations\n') + + +class build(_build): + sub_commands = [('compile_translations', None)] + _build.sub_commands + + +class install_lib(_install_lib): + def run(self): + self.run_command('compile_translations') + _install_lib.run(self) + + +setup( + name='publik_django_templatetags', + version=get_version(), + description='Publik Django Templatetags', + author='Lauréline Guérin', + author_email='lguerin@entrouvert.com', + packages=find_packages(), + include_package_data=True, + url='https://dev.entrouvert.org/projects/publik-django-templatetags', + classifiers=[ + 'Development Status :: 2 - Pre-Alpha', + 'Environment :: Web Environment', + 'Framework :: Django', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + ], + install_requires=[ + 'django', + 'requests', + ], + zip_safe=False, + cmdclass={ + 'build': build, + 'compile_translations': compile_translations, + 'install_lib': install_lib, + 'sdist': eo_sdist, + }, +) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/project/__init__.py b/tests/project/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/project/settings.py b/tests/project/settings.py new file mode 100644 index 0000000..a820ed6 --- /dev/null +++ b/tests/project/settings.py @@ -0,0 +1,45 @@ +import os + +DATABASES = { + 'default': { + 'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.postgresql_psycopg2'), + 'NAME': 'publik-django-templatetags-test-%s' + % os.environ.get("BRANCH_NAME", "").replace('/', '-')[:45], + } +} + +KNOWN_SERVICES = { + 'wcs': { + 'default': { + 'title': 'test', + 'url': 'http://127.0.0.1:8999/', + 'secret': 'combo', + 'orig': 'combo', + 'backoffice-menu-url': 'http://127.0.0.1:8999/backoffice/', + 'secondary': False, + }, + 'other': { + 'title': 'test2', + 'url': 'http://127.0.0.2:8999/', + 'secret': 'combo', + 'orig': 'combo', + 'backoffice-menu-url': 'http://127.0.0.2:8999/backoffice/', + 'secondary': True, + }, + }, +} + +REQUESTS_TIMEOUT = 25 + +DEBUG = True +USE_TZ = True +INSTALLED_APPS = [ + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sites", +] +STATIC_URL = "/static/" +SITE_ID = 1 +MIDDLEWARE_CLASSES = () +LOGGING = {} +SECRET_KEY = "yay" diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..a1e6f23 --- /dev/null +++ b/tox.ini @@ -0,0 +1,25 @@ +[tox] +envlist = py3-django{22,32}-codestyle-coverage +toxworkdir = {env:TMPDIR:/tmp}/tox-{env:USER}/publik-django-templatetags/{env:BRANCH_NAME:} + +[testenv] +usedevelop = + coverage: True + nocoverage: False +setenv = + SETUPTOOLS_USE_DISTUTILS=stdlib + JUNIT=--junitxml=junit-{envname}.xml + coverage: COVERAGE=--cov-report xml --cov-report html --cov=publik_django_templatetags/ +deps = + django22: django>=2.2,<2.3 + django32: django>=3.2,<3.3 + pytest + pytest-cov + pytest-django + WebTest + psycopg2-binary<2.9 + psycopg2<2.9 + pre-commit +commands = + pytest {posargs: {env:JUNIT:} {env:COVERAGE:} tests/} + codestyle: pre-commit run --all-files --show-diff-on-failure