add gvamysql module
This commit is contained in:
		
							parent
							
								
									c84b6c8fc5
								
							
						
					
					
						commit
						d937450819
					
				
					 8 changed files with 466 additions and 0 deletions
				
			
		
							
								
								
									
										0
									
								
								gvamysql/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								gvamysql/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										23
									
								
								gvamysql/celery.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								gvamysql/celery.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| """ | ||||
| This module defines the Celery_ app for gvamysql. | ||||
| 
 | ||||
| .. _Celery: http://www.celeryproject.org/ | ||||
| 
 | ||||
| """ | ||||
| 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) | ||||
							
								
								
									
										3
									
								
								gvamysql/settings/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								gvamysql/settings/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| """ | ||||
| This module contains settings for various environments. | ||||
| """ | ||||
							
								
								
									
										294
									
								
								gvamysql/settings/base.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								gvamysql/settings/base.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,294 @@ | |||
| # -*- 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 | ||||
							
								
								
									
										51
									
								
								gvamysql/settings/local.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								gvamysql/settings/local.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,51 @@ | |||
| # 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 | ||||
							
								
								
									
										50
									
								
								gvamysql/settings/production.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								gvamysql/settings/production.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| # 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 | ||||
							
								
								
									
										20
									
								
								gvamysql/settings/test.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								gvamysql/settings/test.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| # 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": "", | ||||
|     }, | ||||
| } | ||||
							
								
								
									
										25
									
								
								gvamysql/urls.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								gvamysql/urls.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| """ | ||||
| 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)), | ||||
|                             ) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue