Commit 2abb487945ede57261122c2edd2b77e403ec2f2e

Authored by Sergio Oliveira
1 parent 31d4ac82
Exists in startplugin

Implemented startplugin command

startplugin it's a command that generates the base of a Colab plugin.
Just like django's startapp and startproject.

Signed-off-by: Sergio Oliveira <sergio@tracy.com.br>
colab/conf/__init__.py 0 → 100644
colab/conf/plugin_template/setup.py 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +#!/usr/bin/env python
  2 +"""
  3 +{{ app_name_verbose }} Colab plugin
  4 +===================================
  5 +"""
  6 +from setuptools import setup, find_packages
  7 +
  8 +install_requires = ['colab']
  9 +
  10 +tests_require = ['mock']
  11 +
  12 +
  13 +setup(
  14 + name="{{ app_name_dash }}",
  15 + version='0.1.0',
  16 + author='<<Author Name>>',
  17 + author_email='<<Author email>>',
  18 + url='<< project url/repo url >>',
  19 + description='{{ app_name_verbose }} Colab plugin',
  20 + long_description=__doc__,
  21 + license='<< project license >>',
  22 + package_dir={'': 'src'},
  23 + packages=find_packages('src'),
  24 + zip_safe=False,
  25 + install_requires=install_requires,
  26 + test_suite="tests.runtests.run",
  27 + tests_require=tests_require,
  28 + extras_require={'test': tests_require},
  29 + include_package_data=True,
  30 + classifiers=[
  31 + 'Framework :: Django',
  32 + 'Intended Audience :: Developers',
  33 + 'Intended Audience :: System Administrators',
  34 + 'Operating System :: OS Independent',
  35 + 'Topic :: Software Development'
  36 + ],
  37 +)
... ...
colab/conf/plugin_template/src/app_name/__init__.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +
  2 +
  3 +default_app_config = '{{ app_name }}.apps.PluginAppConfig'
... ...
colab/conf/plugin_template/src/app_name/apps.py 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +
  2 +from colab.plugins.utils.apps import ColabPluginAppConfig
  3 +
  4 +
  5 +class {{ app_name_camel }}AppConfig(ColabPluginAppConfig):
  6 + name = '{{ app_name }}'
  7 + verbose_name = '{{ app_name_verbose }} Plugin'
  8 + short_name = '{{ app_name }}'
... ...
colab/conf/plugin_template/src/app_name/data_importer.py 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +
  2 +from colab.plugins.data import PluginDataImporter
  3 +
  4 +
  5 +class {{ app_name_camel }}DataImporter(PluginDataImporter):
  6 + app_label = '{{ app_name }}'
  7 +
  8 + def fetch_data(self):
  9 + pass
... ...
colab/conf/plugin_template/src/app_name/diazo.xml 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +<rules
  2 + xmlns="http://namespaces.plone.org/diazo"
  3 + xmlns:css="http://namespaces.plone.org/diazo/css"
  4 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5 +
  6 +</rules>
... ...
colab/conf/plugin_template/src/app_name/models.py 0 → 100644
... ... @@ -0,0 +1 @@
  1 +# Your models here.
... ...
colab/conf/plugin_template/src/app_name/search_indexes.py 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +# Your search indexes here.
  2 +# See: http://django-haystack.readthedocs.org/en/latest/searchindex_api.html
... ...
colab/conf/plugin_template/src/app_name/urls.py 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +
  2 +from django.conf.urls import patterns, url
  3 +
  4 +from .views import {{ app_name_camel }}ProxyView
  5 +
  6 +urlpatterns = patterns('',
  7 + url(r'^(?P<path>.*)$', GitlabProxyView.as_view(), name='{{ app_name }}'),
  8 +)
... ...
colab/conf/plugin_template/src/app_name/views.py 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +
  2 +from colab.plugins.views import ColabProxyView
  3 +
  4 +
  5 +class {{ app_name_camel }}ProxyView(ColabProxyView):
  6 + app_label = '{{ app_name }}'
... ...
colab/conf/plugin_template/tests/__init__.py 0 → 100644
colab/conf/plugin_template/tests/colab_settings.py 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +
  2 +## Set to false in production
  3 +DEBUG = True
  4 +TEMPLATE_DEBUG = False
  5 +
  6 +## System admins
  7 +ADMINS = [['John Foo', 'john@example.com'], ['Mary Bar', 'mary@example.com']]
  8 +
  9 +MANAGERS = ADMINS
  10 +
  11 +COLAB_FROM_ADDRESS = '"Colab" <noreply@example.com>'
  12 +SERVER_EMAIL = '"Colab" <noreply@example.com>'
  13 +
  14 +EMAIL_HOST = 'localhost'
  15 +EMAIL_PORT = 25
  16 +EMAIL_SUBJECT_PREFIX = '[colab]'
  17 +
  18 +SECRET_KEY = 'not-a-secret'
  19 +
  20 +ALLOWED_HOSTS = [
  21 + 'localhost',
  22 +# 'example.com',
  23 +# 'example.org',
  24 +# 'example.net',
  25 +]
  26 +
  27 +### Uncomment to enable social networks fields profile
  28 +SOCIAL_NETWORK_ENABLED = True
  29 +
  30 +## Disable indexing
  31 +ROBOTS_NOINDEX = True
  32 +
  33 +LOGGING = {
  34 + 'version': 1,
  35 +
  36 + 'handlers': {
  37 + 'null': {
  38 + 'level': 'DEBUG',
  39 + 'class': 'logging.NullHandler',
  40 + },
  41 + },
  42 +
  43 + 'loggers': {
  44 + 'colab.mailman': {
  45 + 'handlers': ['null'],
  46 + 'propagate': False,
  47 + },
  48 + 'haystack': {
  49 + 'handlers': ['null'],
  50 + 'propagate': False,
  51 + },
  52 + },
  53 +}
  54 +
  55 +STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
... ...
colab/conf/plugin_template/tests/plugins.d/app_name.py 0 → 100644
... ... @@ -0,0 +1,32 @@
  1 +
  2 +from django.utils.translation import ugettext_lazy as _
  3 +from colab.plugins.utils.menu import colab_url_factory
  4 +
  5 +name = '{{ app_name }}'
  6 +verbose_name = '{{ app_name_verbose }} Plugin'
  7 +
  8 +upstream = 'localhost'
  9 +# middlewares = []
  10 +
  11 +urls = {
  12 + 'include': '{{ app_name }}.urls',
  13 + 'namespace': '{{ app_name }}',
  14 + 'prefix': '^{{ app_name }}/',
  15 +}
  16 +
  17 +menu_title = _('{{ app_name }}')
  18 +
  19 +url = colab_url_factory('{{ app_name }}')
  20 +
  21 +# Extra data to be exposed to plugin app config
  22 +extra = {}
  23 +
  24 +menu_urls = (
  25 +# Example of menu URL:
  26 +# url(display=_('Public Projects'), viewname='gitlab',
  27 +# kwargs={'path': 'public/projects'}, auth=False),
  28 +
  29 +# Example of authenticated user menu URL:
  30 +# url(display=_('Profile'), viewname='gitlab',
  31 +# kwargs={'path': 'profile'}, auth=True),
  32 +)
... ...
colab/conf/plugin_template/tests/runtests.py 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +#!/usr/bin/env python
  2 +import os
  3 +import sys
  4 +
  5 +import django
  6 +from django.conf import settings
  7 +from django.test.utils import get_runner
  8 +
  9 +
  10 +def run():
  11 + os.environ['DJANGO_SETTINGS_MODULE'] = 'colab.settings'
  12 + os.environ['COLAB_PLUGINS'] = 'tests/plugins.d'
  13 + os.environ['COLAB_SETTINGS'] = 'tests/colab_settings.py'
  14 + django.setup()
  15 + TestRunner = get_runner(settings)
  16 + test_runner = TestRunner()
  17 + failures = test_runner.run_tests(["tests"])
  18 + sys.exit(bool(failures))
  19 +
  20 +
  21 +if __name__ == "__main__":
  22 + run()
... ...
colab/conf/plugin_template/tests/test_plugin.py 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +
  2 +from django.test import TestCase, Client
  3 +
  4 +
  5 +class PluginTest(TestCase):
  6 +
  7 + def setUp(self):
  8 + self.client = Client()
  9 +
  10 + def test_true(self):
  11 + assert True
... ...
colab/management/commands/startplugin.py 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +
  2 +import os
  3 +
  4 +import colab
  5 +
  6 +from django.core.management.commands.startapp import Command as StartAppCommand
  7 +
  8 +
  9 +class Command(StartAppCommand):
  10 + help = ("Creates a Colab plugin directory structure for the given "
  11 + "plugin name in the current directory or optionally in the "
  12 + "plugin directory.")
  13 + missing_args_message = "You must provide a plugin name"
  14 +
  15 + def handle_template(self, template, subdir):
  16 + if template is None:
  17 + return os.path.join(colab.__path__[0], 'conf', 'plugin_template')
  18 +
  19 + return super(Command, self).handle_template(template, subdir)
  20 +
  21 + def handle(self, name, **kwargs):
  22 + kwargs['app_name_dash'] = name.replace('_', '-')
  23 + kwargs['app_name_camel'] = name.title().replace('_', '')
  24 + kwargs['app_name_verbose'] = name.replace('_', ' ').title()
  25 + super(Command, self).handle(name, **kwargs)
... ...
  • 0c50dfdcc20618fdf7819fd603588c49?s=40&d=identicon
    Diego Camarinha @diegoamc

    Nas linhas 26 e 30 do arquivo colab/conf/plugin_template/tests/plugins.d/app_name.py, gitlab está hardcoded.

    Choose File ...   File name...
    Cancel
  • 0c50dfdcc20618fdf7819fd603588c49?s=40&d=identicon
    Diego Camarinha @diegoamc

    A definição da classe de teste do plugin não deveria ser {{ app_name_camel }}PluginTest? Em colab/conf/plugin_template/tests/test_plugin.py.

    Choose File ...   File name...
    Cancel