Refactor module structure
Move pgsqltasks to top level to keep the task names when using Python 3
This commit is contained in:
parent
acf2b171a9
commit
68f0834954
12 changed files with 67 additions and 84 deletions
|
@ -1,6 +1,8 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
* :support:`-` move pgsqltasks to top level to keep the task names when
|
||||||
|
using Python 3
|
||||||
* :support:`-` use Pipenv for dependency management
|
* :support:`-` use Pipenv for dependency management
|
||||||
|
|
||||||
* :release:`0.2.0 <2018-11-21>`
|
* :release:`0.2.0 <2018-11-21>`
|
||||||
|
|
|
@ -7,30 +7,24 @@ gvapgsql is implemented as `Celery`_ app.
|
||||||
.. _Celery: http://www.celeryproject.org/
|
.. _Celery: http://www.celeryproject.org/
|
||||||
|
|
||||||
|
|
||||||
The project module :py:mod:`gvapgsql`
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
.. automodule:: gvapgsql
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`gvapgsql.celery`
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
.. automodule:: gvapgsql.celery
|
|
||||||
:members:
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`gvapgsql.settings`
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
.. automodule:: gvapgsql.settings
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`pgsqltasks` app
|
:py:mod:`pgsqltasks` app
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
:py:mod:`pgsqltasks.celery`
|
||||||
|
---------------------------
|
||||||
|
|
||||||
.. automodule:: pgsqltasks
|
.. automodule:: pgsqltasks
|
||||||
|
|
||||||
|
.. automodule:: pgsqltasks.celery
|
||||||
|
:members:
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`pgsqltasks.settings`
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
.. automodule:: pgsqltasks.settings
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`pgsqltasks.tasks`
|
:py:mod:`pgsqltasks.tasks`
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|
21
docs/conf.py
21
docs/conf.py
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# pymode:lint_ignore=E501
|
# pymode:lint_ignore=E501
|
||||||
#
|
#
|
||||||
# gvamysql documentation build configuration file, created by
|
# gvapgsql documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Sun Feb 17 11:46:20 2013.
|
# sphinx-quickstart on Sun Feb 17 11:46:20 2013.
|
||||||
#
|
#
|
||||||
# This file is execfile()d with the current directory set to its containing dir.
|
# This file is execfile()d with the current directory set to its containing dir.
|
||||||
|
@ -35,13 +35,13 @@ os.environ['GVAPGSQL_DBADMIN_PASSWORD'] = 'gvapgsql'
|
||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
extensions = ['releases', 'sphinx.ext.autodoc', 'celery.contrib.sphinx']
|
extensions = ['releases', 'sphinx.ext.autodoc', 'celery.contrib.sphinx']
|
||||||
|
|
||||||
|
# configuration for releases extension
|
||||||
|
releases_issue_uri = 'https://git.dittberner.info/gnuviech/gvapgsql/issues/%s'
|
||||||
|
releases_release_uri = 'https://git.dittberner.info/gnuviech/gvapgsql/stc/tag/%s'
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|
||||||
releases_issue_uri = 'https://dev.gnuviech-server.de/gvapgsql/ticket/%s'
|
|
||||||
|
|
||||||
releases_release_uri = 'https://dev.gnuviech-server.de/gvapgsql/milestone/%s'
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
# The suffix of source filenames.
|
||||||
source_suffix = '.rst'
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
@ -53,16 +53,17 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'gvapgsql'
|
project = u'gvapgsql'
|
||||||
copyright = u'2015-2018 Jan Dittberner'
|
copyright = u'2015-2020 Jan Dittberner'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
|
||||||
version = '0.2'
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '0.2.0'
|
from pgsqltasks import __version__ as release
|
||||||
|
|
||||||
|
# The short X.Y version.
|
||||||
|
version = ".".join(release.split('.')[:2])
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
@ -103,7 +104,7 @@ pygments_style = 'sphinx'
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
html_theme = 'default'
|
html_theme = 'alabaster'
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
|
|
3
gvapgsql/gvacommon/.gitignore
vendored
3
gvapgsql/gvacommon/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
.*.swp
|
|
||||||
*.pyc
|
|
||||||
.ropeproject/
|
|
|
@ -3,13 +3,8 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
|
|
||||||
class GvaRouter(object):
|
class GvaRouter(object):
|
||||||
|
|
||||||
def route_for_task(self, task, args=None, kwargs=None):
|
def route_for_task(self, task, args=None, kwargs=None):
|
||||||
for route in ['ldap', 'file', 'mysql', 'pgsql']:
|
for route in ["ldap", "file", "mysql", "pgsql"]:
|
||||||
if route in task:
|
if route in task:
|
||||||
return {
|
return {"exchange": route, "exchange_type": "direct", "queue": route}
|
||||||
'exchange': route,
|
|
||||||
'exchange_type': 'direct',
|
|
||||||
'queue': route,
|
|
||||||
}
|
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
"""
|
|
||||||
This module defines the Celery_ app for gvapgsql.
|
|
||||||
|
|
||||||
.. _Celery: http://www.celeryproject.org/
|
|
||||||
|
|
||||||
"""
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
from celery import Celery
|
|
||||||
|
|
||||||
#: The Celery application
|
|
||||||
app = Celery('gvapgsql')
|
|
||||||
|
|
||||||
app.config_from_object('gvapgsql.settings')
|
|
||||||
app.autodiscover_tasks(['pgsqltasks'], force=True)
|
|
|
@ -2,3 +2,9 @@
|
||||||
This module contains :py:mod:`pgsqltasks.tasks`.
|
This module contains :py:mod:`pgsqltasks.tasks`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
__version__ = "0.3.0"
|
||||||
|
|
||||||
|
from pgsqltasks.celery import app as celery_app
|
||||||
|
|
||||||
|
__all__ = ("celery_app",)
|
||||||
|
|
13
gvapgsql/pgsqltasks/celery.py
Normal file
13
gvapgsql/pgsqltasks/celery.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
"""
|
||||||
|
This module defines the Celery_ app for gvapgsql.
|
||||||
|
|
||||||
|
.. _Celery: http://www.celeryproject.org/
|
||||||
|
|
||||||
|
"""
|
||||||
|
from celery import Celery
|
||||||
|
|
||||||
|
#: The Celery application
|
||||||
|
app = Celery("pgsqltasks")
|
||||||
|
|
||||||
|
app.config_from_object("pgsqltasks.settings")
|
||||||
|
app.autodiscover_tasks(["pgsqltasks.tasks"], force=True)
|
|
@ -1,4 +0,0 @@
|
||||||
"""
|
|
||||||
Empty models to make Django accept pgsqltasks as an app.
|
|
||||||
|
|
||||||
"""
|
|
|
@ -25,23 +25,21 @@ def get_env_setting(setting):
|
||||||
|
|
||||||
|
|
||||||
########## CELERY CONFIGURATION
|
########## CELERY CONFIGURATION
|
||||||
CELERY_TIMEZONE = 'Europe/Berlin'
|
CELERY_BROKER_URL = get_env_setting("GVAPGSQL_BROKER_URL")
|
||||||
CELERY_ENABLE_UTC = True
|
CELERY_RESULT_BACKEND = get_env_setting("GVAPGSQL_RESULTS_REDIS_URL")
|
||||||
CELERY_RESULT_BACKEND = 'amqp'
|
|
||||||
CELERY_RESULT_PERSISTENT = True
|
|
||||||
CELERY_TASK_RESULT_EXPIRES = None
|
CELERY_TASK_RESULT_EXPIRES = None
|
||||||
CELERY_ROUTES = (
|
CELERY_ROUTES = ("gvacommon.celeryrouters.GvaRouter",)
|
||||||
'gvacommon.celeryrouters.GvaRouter',
|
CELERY_TIMEZONE = "Europe/Berlin"
|
||||||
)
|
CELERY_ENABLE_UTC = True
|
||||||
CELERY_ACCEPT_CONTENT = ['json']
|
CELERY_RESULT_PERSISTENT = True
|
||||||
CELERY_TASK_SERIALIZER = 'json'
|
CELERY_ACCEPT_CONTENT = ["json"]
|
||||||
CELERY_RESULT_SERIALIZER = 'json'
|
CELERY_TASK_SERIALIZER = "json"
|
||||||
BROKER_URL = get_env_setting('GVAPGSQL_BROKER_URL')
|
CELERY_RESULT_SERIALIZER = "json"
|
||||||
########## END CELERY CONFIGURATION
|
########## END CELERY CONFIGURATION
|
||||||
|
|
||||||
########## GVAPGSQL CONFIGURATION
|
########## GVAPGSQL CONFIGURATION
|
||||||
GVAPGSQL_DBADMIN_HOST = get_env_setting('GVAPGSQL_DBADMIN_HOST')
|
GVAPGSQL_DBADMIN_HOST = get_env_setting("GVAPGSQL_DBADMIN_HOST")
|
||||||
GVAPGSQL_DBADMIN_PORT = int(get_env_setting('GVAPGSQL_DBADMIN_PORT'))
|
GVAPGSQL_DBADMIN_PORT = int(get_env_setting("GVAPGSQL_DBADMIN_PORT"))
|
||||||
GVAPGSQL_DBADMIN_USER = get_env_setting('GVAPGSQL_DBADMIN_USER')
|
GVAPGSQL_DBADMIN_USER = get_env_setting("GVAPGSQL_DBADMIN_USER")
|
||||||
GVAPGSQL_DBADMIN_PASSWORD = get_env_setting('GVAPGSQL_DBADMIN_PASSWORD')
|
GVAPGSQL_DBADMIN_PASSWORD = get_env_setting("GVAPGSQL_DBADMIN_PASSWORD")
|
||||||
########## END GVAPGSQL CONFIGURATION
|
########## END GVAPGSQL CONFIGURATION
|
|
@ -2,15 +2,12 @@
|
||||||
This module defines Celery_ tasks to manage PostgreSQL users and databases.
|
This module defines Celery_ tasks to manage PostgreSQL users and databases.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from celery.utils.log import get_task_logger
|
from celery.utils.log import get_task_logger
|
||||||
|
|
||||||
from gvapgsql import settings
|
|
||||||
from psycopg2 import connect
|
from psycopg2 import connect
|
||||||
from psycopg2.extensions import ISQLQuote
|
from psycopg2.extensions import ISQLQuote
|
||||||
|
|
||||||
|
from pgsqltasks import settings
|
||||||
|
|
||||||
_LOGGER = get_task_logger(__name__)
|
_LOGGER = get_task_logger(__name__)
|
||||||
|
|
||||||
|
@ -56,7 +53,7 @@ def _get_connection():
|
||||||
port=settings.GVAPGSQL_DBADMIN_PORT,
|
port=settings.GVAPGSQL_DBADMIN_PORT,
|
||||||
user=settings.GVAPGSQL_DBADMIN_USER,
|
user=settings.GVAPGSQL_DBADMIN_USER,
|
||||||
password=settings.GVAPGSQL_DBADMIN_PASSWORD,
|
password=settings.GVAPGSQL_DBADMIN_PASSWORD,
|
||||||
database='postgres',
|
database="postgres",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,11 +74,10 @@ def create_pgsql_user(username, password):
|
||||||
"""
|
"""
|
||||||
CREATE USER %(username)s WITH PASSWORD %(password)s
|
CREATE USER %(username)s WITH PASSWORD %(password)s
|
||||||
""",
|
""",
|
||||||
{'username': Ident(username), 'password': password}
|
{"username": Ident(username), "password": password},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def set_pgsql_userpassword(username, password):
|
def set_pgsql_userpassword(username, password):
|
||||||
"""
|
"""
|
||||||
|
@ -99,7 +95,7 @@ def set_pgsql_userpassword(username, password):
|
||||||
"""
|
"""
|
||||||
ALTER ROLE %(username)s WITH PASSWORD %(password)s
|
ALTER ROLE %(username)s WITH PASSWORD %(password)s
|
||||||
""",
|
""",
|
||||||
{'username': Ident(username), 'password': password}
|
{"username": Ident(username), "password": password},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,7 +115,7 @@ def delete_pgsql_user(username):
|
||||||
"""
|
"""
|
||||||
DROP ROLE %(username)s
|
DROP ROLE %(username)s
|
||||||
""",
|
""",
|
||||||
{'username': Ident(username)}
|
{"username": Ident(username)},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,7 +138,7 @@ def create_pgsql_database(dbname, username):
|
||||||
CREATE DATABASE %(dbname)s OWNER %(username)s
|
CREATE DATABASE %(dbname)s OWNER %(username)s
|
||||||
TEMPLATE template0 ENCODING 'UTF8'
|
TEMPLATE template0 ENCODING 'UTF8'
|
||||||
""",
|
""",
|
||||||
{'dbname': Ident(dbname), 'username': Ident(username)}
|
{"dbname": Ident(dbname), "username": Ident(username)},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,5 +159,5 @@ def delete_pgsql_database(dbname):
|
||||||
"""
|
"""
|
||||||
DROP DATABASE %(dbname)s
|
DROP DATABASE %(dbname)s
|
||||||
""",
|
""",
|
||||||
{'dbname': Ident(dbname)}
|
{"dbname": Ident(dbname)},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue