diff --git a/LICENSE.txt b/LICENSE.txt index 8c51745..96e8baa 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2014 Jan Dittberner +Copyright (c) 2014, 2015 Jan Dittberner Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/docs/__init__.py b/docs/__init__.py index 8772c82..e69de29 100644 --- a/docs/__init__.py +++ b/docs/__init__.py @@ -1 +0,0 @@ -# Included so that Django's startproject comment runs against the docs directory diff --git a/docs/changelog.rst b/docs/changelog.rst index 38ff556..05cebe2 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,5 @@ Changelog ========= +* :release:`0.1.0 <2015-01-04>` +* :feature:`-` initial project setup diff --git a/docs/code.rst b/docs/code.rst index 34709f1..9f1b90b 100644 --- a/docs/code.rst +++ b/docs/code.rst @@ -2,11 +2,8 @@ Code documentation ================== -.. index:: Django +gvamysql is implemented as `Celery`_ app. -gvamysql is implemented as `Django`_ project and provides some `Celery`_ tasks. - -.. _Django: https://www.djangoproject.com/ .. _Celery: http://www.celeryproject.org/ @@ -23,45 +20,11 @@ The project module :py:mod:`gvamysql` :members: -:py:mod:`gvamysql.urls` ------------------------ - -.. automodule:: gvamysql.urls - - -:py:mod:`gvamysql.wsgi` ------------------------ - -.. automodule:: gvamysql.wsgi - :members: - - :py:mod:`gvamysql.settings` --------------------------- .. automodule:: gvamysql.settings -:py:mod:`gvamysql.settings.base` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: gvamysql.settings.base - :members: - -:py:mod:`gvamysql.settings.local` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: gvamysql.settings.local - -:py:mod:`gvamysql.settings.production` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: gvamysql.settings.production - -:py:mod:`gvamysql.settings.test` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: gvamysql.settings.test - :py:mod:`mysqltasks` app ======================== diff --git a/docs/conf.py b/docs/conf.py index 8016554..ee8ec46 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,18 +14,12 @@ import sys import os -import django # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath(os.path.join('..', 'gvamysql'))) -os.environ['GVAMYSQL_ALLOWED_HOSTS'] = 'localhost' -os.environ['GVAMYSQL_SERVER_EMAIL'] = 'root@localhost' - -django.setup() - # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. @@ -53,16 +47,16 @@ master_doc = 'index' # General information about the project. project = u'gvamysql' -copyright = u'2014, Jan Dittberner' +copyright = u'2014, 2015 Jan Dittberner' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '0.2.0' +version = '0.1' # The full version, including alpha/beta/rc tags. -release = '0.2.0' +release = '0.1.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/install.rst b/docs/install.rst index 0736466..06da90c 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -28,8 +28,7 @@ your virtualenv: .. _virtualenv: https://virtualenv.pypa.io/en/latest/ You will also need to ensure that the virtualenv has the project directory -added to the path. Adding the project directory will allow `django-admin.py` to -be able to change settings using the `--settings` flag. +added to the path. .. index:: virtualenvwrapper diff --git a/gvamysql/gvacommon/.gitignore b/gvamysql/gvacommon/.gitignore new file mode 100644 index 0000000..5f1ace6 --- /dev/null +++ b/gvamysql/gvacommon/.gitignore @@ -0,0 +1,3 @@ +.*.swp +*.pyc +.ropeproject/ diff --git a/gvamysql/gvacommon/__init__.py b/gvamysql/gvacommon/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gvamysql/gvacommon/celeryrouters.py b/gvamysql/gvacommon/celeryrouters.py new file mode 100644 index 0000000..ec7b122 --- /dev/null +++ b/gvamysql/gvacommon/celeryrouters.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + + +class GvaRouter(object): + + def route_for_task(self, task, args=None, kwargs=None): + for route in ['ldap', 'file', 'mysql', 'pgsql']: + if route in task: + return { + 'exchange': route, + 'exchange_type': 'direct', + 'queue': route, + } + return None diff --git a/gvamysql/gvamysql/celery.py b/gvamysql/gvamysql/celery.py index 31b104b..8867263 100644 --- a/gvamysql/gvamysql/celery.py +++ b/gvamysql/gvamysql/celery.py @@ -6,18 +6,10 @@ This module defines the Celery_ app for gvamysql. """ from __future__ import absolute_import -import os - from celery import Celery -from django.conf import settings - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', - 'gvamysql.settings.production') - - #: The Celery application app = Celery('gvamysql') -app.config_from_object('django.conf:settings') -app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) +app.config_from_object('gvamysql.settings') +app.autodiscover_tasks(['mysqltasks'], force=True) diff --git a/gvamysql/gvamysql/settings.py b/gvamysql/gvamysql/settings.py new file mode 100644 index 0000000..8063997 --- /dev/null +++ b/gvamysql/gvamysql/settings.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# pymode:lint_ignore=E501 +""" +Common settings and globals. + +""" + +from os import environ + + +def get_env_setting(setting): + """ + Get the environment setting or return exception. + + :param str setting: name of an environment setting + :raises ImproperlyConfigured: if the environment setting is not defined + :return: environment setting value + :rtype: str + """ + try: + return environ[setting] + except KeyError: + error_msg = "Set the %s env variable" % setting + raise AssertionError(error_msg) + + +########## CELERY CONFIGURATION +CELERY_TIMEZONE = 'Europe/Berlin' +CELERY_ENABLE_UTC = True +CELERY_RESULT_BACKEND = 'amqp' +CELERY_RESULT_PERSISTENT = True +CELERY_TASK_RESULT_EXPIRES = None +CELERY_ROUTES = ( + 'gvacommon.celeryrouters.GvaRouter', +) +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' +BROKER_URL = get_env_setting('GVAMYSQL_BROKER_URL') +########## END CELERY CONFIGURATION + +########## GVAMYSQL CONFIGURATION +GVAMYSQL_DBADMIN_HOST = get_env_setting('GVAMYSQL_DBADMIN_HOST') +GVAMYSQL_DBADMIN_PORT = int(get_env_setting('GVAMYSQL_DBADMIN_PORT')) +GVAMYSQL_DBADMIN_USER = get_env_setting('GVAMYSQL_DBADMIN_USER') +GVAMYSQL_DBADMIN_PASSWORD = get_env_setting('GVAMYSQL_DBADMIN_PASSWORD') +########## END GVAMYSQL CONFIGURATION diff --git a/gvamysql/gvamysql/settings/__init__.py b/gvamysql/gvamysql/settings/__init__.py deleted file mode 100644 index 4f53a5e..0000000 --- a/gvamysql/gvamysql/settings/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -This module contains settings for various environments. -""" diff --git a/gvamysql/gvamysql/settings/base.py b/gvamysql/gvamysql/settings/base.py deleted file mode 100644 index 511fe38..0000000 --- a/gvamysql/gvamysql/settings/base.py +++ /dev/null @@ -1,294 +0,0 @@ -# -*- coding: utf-8 -*- -# pymode:lint_ignore=E501 -""" -Common settings and globals. - -""" - -from os.path import abspath, basename, dirname, join, normpath -from sys import path -from os import environ - -# Normally you should not import ANYTHING from Django directly -# into your settings, but ImproperlyConfigured is an exception. -from django.core.exceptions import ImproperlyConfigured - - -def get_env_setting(setting): - """ - Get the environment setting or return exception. - - :param str setting: name of an environment setting - :raises ImproperlyConfigured: if the environment setting is not defined - :return: environment setting value - :rtype: str - """ - try: - return environ[setting] - except KeyError: - error_msg = "Set the %s env variable" % setting - raise ImproperlyConfigured(error_msg) - - -########## PATH CONFIGURATION -# Absolute filesystem path to the Django project directory: -DJANGO_ROOT = dirname(dirname(abspath(__file__))) - -# Absolute filesystem path to the top-level project folder: -SITE_ROOT = dirname(DJANGO_ROOT) - -# Site name: -SITE_NAME = basename(DJANGO_ROOT) - -# Add our project to our pythonpath, this way we don't need to type our project -# name in our dotted import paths: -path.append(DJANGO_ROOT) -########## END PATH CONFIGURATION - - -########## DEBUG CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug -DEBUG = False - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug -TEMPLATE_DEBUG = DEBUG -########## END DEBUG CONFIGURATION - - -########## MANAGER CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins -ADMINS = ( - (get_env_setting('GVAMYSQL_ADMIN_NAME'), get_env_setting('GVAMYSQL_ADMIN_EMAIL')), -) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers -MANAGERS = ADMINS -########## END MANAGER CONFIGURATION - - -########## DATABASE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': normpath(join(DJANGO_ROOT, 'default.db')), - 'USER': '', - 'PASSWORD': '', - 'HOST': '', - 'PORT': '', - }, -} -########## END DATABASE CONFIGURATION - - -########## GENERAL CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#time-zone -TIME_ZONE = 'Europe/Berlin' - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code -LANGUAGE_CODE = 'en-us' - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id -SITE_ID = 1 - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n -USE_I18N = True - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n -USE_L10N = True - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-tz -USE_TZ = True -########## END GENERAL CONFIGURATION - - -########## MEDIA CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root -MEDIA_ROOT = normpath(join(SITE_ROOT, 'media')) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url -MEDIA_URL = '/media/' -########## END MEDIA CONFIGURATION - - -########## STATIC FILE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root -STATIC_ROOT = normpath(join(SITE_ROOT, 'assets')) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url -STATIC_URL = '/static/' - -# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS -STATICFILES_DIRS = ( - normpath(join(SITE_ROOT, 'static')), -) - -# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders -STATICFILES_FINDERS = ( - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -) -########## END STATIC FILE CONFIGURATION - - -########## SECRET CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key -# Note: This key should only be used for development and testing. -SECRET_KEY = get_env_setting('GVAMYSQL_SECRETKEY') -########## END SECRET CONFIGURATION - - -########## SITE CONFIGURATION -# Hosts/domain names that are valid for this site -# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts -ALLOWED_HOSTS = [] -########## END SITE CONFIGURATION - - -########## FIXTURE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FIXTURE_DIRS -FIXTURE_DIRS = ( - normpath(join(SITE_ROOT, 'fixtures')), -) -########## END FIXTURE CONFIGURATION - - -########## TEMPLATE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors -TEMPLATE_CONTEXT_PROCESSORS = ( - 'django.contrib.auth.context_processors.auth', - 'django.core.context_processors.debug', - 'django.core.context_processors.i18n', - 'django.core.context_processors.media', - 'django.core.context_processors.static', - 'django.core.context_processors.tz', - 'django.contrib.messages.context_processors.messages', - 'django.core.context_processors.request', -) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-loaders -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-dirs -TEMPLATE_DIRS = ( - normpath(join(SITE_ROOT, 'templates')), -) -########## END TEMPLATE CONFIGURATION - - -########## MIDDLEWARE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#middleware-classes -MIDDLEWARE_CLASSES = ( - # Default Django middleware. - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -) -########## END MIDDLEWARE CONFIGURATION - - -########## URL CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#root-urlconf -ROOT_URLCONF = '%s.urls' % SITE_NAME -########## END URL CONFIGURATION - - -########## TEST RUNNER CONFIGURATION -TEST_RUNNER = 'django.test.runner.DiscoverRunner' -########## END TEST RUNNER CONFIGURATION - - -########## APP CONFIGURATION -DJANGO_APPS = ( - # Default Django apps: - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.messages', - 'django.contrib.staticfiles', - - # Useful template tags: - # 'django.contrib.humanize', - - # Admin panel and documentation: - 'django.contrib.admin', - # 'django.contrib.admindocs', -) - -# Apps specific for this project go here. -LOCAL_APPS = ( - 'mysqltasks', -) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps -INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS -########## END APP CONFIGURATION - - -########## LOGGING CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#logging -# A sample logging configuration. The only tangible logging -# performed by this configuration is to send an email to -# the site admins on every HTTP 500 error when DEBUG=False. -# See http://docs.djangoproject.com/en/dev/topics/logging for -# more details on how to customize your logging configuration. -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'filters': { - 'require_debug_false': { - '()': 'django.utils.log.RequireDebugFalse' - } - }, - 'handlers': { - 'mail_admins': { - 'level': 'ERROR', - 'filters': ['require_debug_false'], - 'class': 'django.utils.log.AdminEmailHandler' - } - }, - 'loggers': { - 'django.request': { - 'handlers': ['mail_admins'], - 'level': 'ERROR', - 'propagate': True, - }, - } -} -########## END LOGGING CONFIGURATION - - -########## WSGI CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#wsgi-application -WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME -########## END WSGI CONFIGURATION - - -########## GVAMYSQL CONFIGURATION -GVAMYSQL_DBADMIN_USER = get_env_setting('GVAMYSQL_DBADMIN_USER') -GVAMYSQL_DBADMIN_PASSWORD = get_env_setting('GVAMYSQL_DBADMIN_PASSWORD') -########## END GVAMYSQL CONFIGURATION - - -########## CELERY CONFIGURATION -BROKER_URL = get_env_setting('GVAMYSQL_BROKER_URL') -CELERY_RESULT_BACKEND = 'amqp' -CELERY_RESULT_PERSISTENT = True -CELERY_TASK_RESULT_EXPIRES = None -CELERY_ROUTES = ( - 'gvacommon.celeryrouters.Router', - 'gvacommon.celeryrouters.FileRouter', -) -CELERY_TIMEZONE = 'Europe/Berlin' -CELERY_ENABLE_UTC = True -CELERY_ACCEPT_CONTENT = ['json'] -CELERY_TASK_SERIALIZER = 'json' -CELERY_RESULT_SERIALIZER = 'json' -########## END CELERY CONFIGURATION diff --git a/gvamysql/gvamysql/settings/local.py b/gvamysql/gvamysql/settings/local.py deleted file mode 100644 index dbd4381..0000000 --- a/gvamysql/gvamysql/settings/local.py +++ /dev/null @@ -1,51 +0,0 @@ -# pymode:lint_ignore=W0401,E501 -""" -Development settings and globals based on :py:mod:`gvafile.settings.base`. - -""" - -from __future__ import absolute_import - -from .base import * - - -########## DEBUG CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug -DEBUG = True - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug -TEMPLATE_DEBUG = DEBUG -########## END DEBUG CONFIGURATION - - -########## EMAIL CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' -########## END EMAIL CONFIGURATION - - -########## CACHE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches -CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', - } -} -########## END CACHE CONFIGURATION - - -########## TOOLBAR CONFIGURATION -# See: http://django-debug-toolbar.readthedocs.org/en/latest/installation.html#explicit-setup -INSTALLED_APPS += ( - 'debug_toolbar', -) - -MIDDLEWARE_CLASSES += ( - 'debug_toolbar.middleware.DebugToolbarMiddleware', -) - -DEBUG_TOOLBAR_PATCH_SETTINGS = False - -# http://django-debug-toolbar.readthedocs.org/en/latest/installation.html -INTERNAL_IPS = ('127.0.0.1',) -########## END TOOLBAR CONFIGURATION diff --git a/gvamysql/gvamysql/settings/production.py b/gvamysql/gvamysql/settings/production.py deleted file mode 100644 index 2ae7f46..0000000 --- a/gvamysql/gvamysql/settings/production.py +++ /dev/null @@ -1,50 +0,0 @@ -# pymode:lint_ignore=W0401,E501 -""" -Production settings and globals based on :py:mod:`gvafile.settings.base`. - -""" - -from __future__ import absolute_import - -from .base import * - -########## HOST CONFIGURATION -# See: https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production -ALLOWED_HOSTS = get_env_setting('GVAMYSQL_ALLOWED_HOSTS').split(',') -########## END HOST CONFIGURATION - -########## EMAIL CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-host -#EMAIL_HOST = environ.get('EMAIL_HOST', 'smtp.gmail.com') - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-host-password -#EMAIL_HOST_PASSWORD = environ.get('EMAIL_HOST_PASSWORD', '') - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-host-user -#EMAIL_HOST_USER = environ.get('EMAIL_HOST_USER', 'your_email@example.com') - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-port -#EMAIL_PORT = environ.get('EMAIL_PORT', 587) - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix -EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-use-tls -#EMAIL_USE_TLS = True - -# See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email -SERVER_EMAIL = get_env_setting('GVAMYSQL_SERVER_EMAIL') -########## END EMAIL CONFIGURATION - -########## DATABASE CONFIGURATION -#DATABASES = {} -########## END DATABASE CONFIGURATION - - -########## CACHE CONFIGURATION -# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches -#CACHES = {} -########## END CACHE CONFIGURATION diff --git a/gvamysql/gvamysql/settings/test.py b/gvamysql/gvamysql/settings/test.py deleted file mode 100644 index a132e85..0000000 --- a/gvamysql/gvamysql/settings/test.py +++ /dev/null @@ -1,20 +0,0 @@ -# pymode:lint_ignore=W0401 -""" -Test settings based on :py:mod:`gvafile.settings.base`. - -""" -from __future__ import absolute_import - -from .base import * - -########## IN-MEMORY TEST DATABASE -DATABASES = { - "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": ":memory:", - "USER": "", - "PASSWORD": "", - "HOST": "", - "PORT": "", - }, -} diff --git a/gvamysql/gvamysql/urls.py b/gvamysql/gvamysql/urls.py deleted file mode 100644 index 450b2f9..0000000 --- a/gvamysql/gvamysql/urls.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -This module defines the main URLConf for gvamysql. - -""" - -from django.conf.urls import patterns, include, url -from django.conf import settings - -# Uncomment the next two lines to enable the admin: -from django.contrib import admin -admin.autodiscover() - -urlpatterns = patterns( - '', - url(r'^admin/', include(admin.site.urls)), -) - -# Uncomment the next line to serve media files in dev. -# urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - -if settings.DEBUG: - import debug_toolbar - urlpatterns += patterns('', - url(r'^__debug__/', include(debug_toolbar.urls)), - ) diff --git a/gvamysql/manage.py b/gvamysql/manage.py deleted file mode 100755 index 3970649..0000000 --- a/gvamysql/manage.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gvafile.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/gvamysql/mysqltasks/models.py b/gvamysql/mysqltasks/models.py deleted file mode 100644 index d1ff455..0000000 --- a/gvamysql/mysqltasks/models.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Empty models module required for Django to accept this as an app. -""" diff --git a/gvamysql/mysqltasks/tasks.py b/gvamysql/mysqltasks/tasks.py index 81d28fa..e40522b 100644 --- a/gvamysql/mysqltasks/tasks.py +++ b/gvamysql/mysqltasks/tasks.py @@ -1,18 +1,29 @@ """ -This module defines Celery_ tasks to manage MySQL users and database. +This module defines Celery_ tasks to manage MySQL users and databases. """ from __future__ import absolute_import, unicode_literals -from django.conf import settings - from celery import shared_task from celery.utils.log import get_task_logger +from gvamysql import settings +from MySQLdb import connect + _LOGGER = get_task_logger(__name__) +def _get_connection(): + return connect( + host=settings.GVAMYSQL_DBADMIN_HOST, + port=settings.GVAMYSQL_DBADMIN_PORT, + user=settings.GVAMYSQL_DBADMIN_USER, + passwd=settings.GVAMYSQL_DBADMIN_PASSWORD, + db='mysql', + ) + + @shared_task def create_mysql_user(username, password): """ @@ -24,6 +35,16 @@ def create_mysql_user(username, password): :rtype: str """ + conn = _get_connection() + curs = conn.cursor() + curs.execute( + """ + CREATE USER %(username)s@'%%' IDENTIFIED BY %(password)s + """, + {'username': username, 'password': password} + ) + conn.commit() + return username @shared_task @@ -37,6 +58,15 @@ def set_mysql_userpassword(username, password): :rtype: boolean """ + conn = _get_connection() + curs = conn.cursor() + curs.execute( + """ + SET PASSWORD FOR %(username)s = PASSWORD(%(password)s) + """, + {'username': username, 'password': password}) + conn.commit() + return True @shared_task @@ -49,6 +79,15 @@ def delete_mysql_user(username): :rtype: boolean """ + conn = _get_connection() + curs = conn.cursor() + curs.execute( + """ + DROP USER %(username)s@'%%' + """, + {'username': username}) + conn.commit() + return True @shared_task @@ -62,15 +101,41 @@ def create_mysql_database(dbname, username): :rtype: str """ + conn = _get_connection() + curs = conn.cursor() + curs.execute( + """ + CREATE DATABASE `%(dbname)s` CHARACTER SET utf8 COLLATE utf8_general_ci + """ % {'dbname': dbname}) + curs.execute( + """ + GRANT ALL PRIVILEGES ON `%(dbname)s`.* TO %%(username)s@'%%%%' + """ % {'dbname': dbname}, {'username': username}) + conn.commit() + return dbname @shared_task -def delete_mysql_database(dbname): +def delete_mysql_database(dbname, username): """ - This task deletes an existing MySQL database. + This task deletes an existing MySQL database and revokes privileges of the + given user on that database. :param str dbname: database name + :param str username: the user name of an existing MySQL user :return: True if the database has been deleted, False otherwise :rtype: boolean """ + conn = _get_connection() + curs = conn.cursor() + curs.execute( + """ + REVOKE ALL PRIVILEGES ON `%(dbname)s`.* FROM %%(username)s@'%%%%' + """ % {'dbname': dbname}, {'username': username}) + curs.execute( + """ + DROP DATABASE `%(dbname)s` + """ % {'dbname': dbname}) + conn.commit() + return True diff --git a/requirements/base.txt b/requirements/base.txt index c4aa5c8..f131562 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,11 +1,8 @@ -Django==1.7.1 amqp==1.4.6 bpython==0.13.1 anyjson==0.3.3 -argparse==1.2.1 billiard==3.3.0.19 celery==3.1.17 kombu==3.0.24 pytz==2014.10 -wsgiref==0.1.2 mysqlclient==1.3.4 diff --git a/requirements/local.txt b/requirements/local.txt index 4bdfc63..d0cecd4 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -1,7 +1,6 @@ # Local development dependencies go here -r base.txt coverage==3.7.1 -django-debug-toolbar==1.2.2 Sphinx==1.2.3 sqlparse==0.1.14 releases==0.7.0