Commit 66233ec5acba574c8c9b81cc3a7f9d83ef14c9ab

Authored by Gust
0 parents

Initial commit

.gitignore 0 → 100644
  1 +++ a/.gitignore
... ... @@ -0,0 +1,19 @@
  1 +*~
  2 +*.log
  3 +*.pot
  4 +*.pyc
  5 +*.pyo
  6 +local_settings.py
  7 +project_cfg.py
  8 +
  9 +*.swp
  10 +*.sqlite3
  11 +*.db
  12 +.DS_Store
  13 +.vagrant
  14 +
  15 +ext/
  16 +*.egg-info/
  17 +
  18 +colab_gitlab.egg-info
  19 +dist
... ...
MANIFEST.in 0 → 100644
  1 +++ a/MANIFEST.in
... ... @@ -0,0 +1,8 @@
  1 +include DESCRIPTION.rst
  2 +
  3 +# Include the test suite (FIXME: does not work yet)
  4 +# recursive-include tests *
  5 +
  6 +# If using Python 2.6 or less, then have to include package data, even though
  7 +# it's already declared in setup.py
  8 +include requirements.txt
... ...
README.rst 0 → 100644
  1 +++ a/README.rst
... ... @@ -0,0 +1,84 @@
  1 +.. -*- coding: utf-8 -*-
  2 +
  3 +.. highlight:: rest
  4 +
  5 +.. _colab_software:
  6 +
  7 +=================================
  8 +Colab-Gitlab - Gitlab proxy Plugin
  9 +=================================
  10 +
  11 +
  12 +
  13 +What is Colab?
  14 +==============
  15 +
  16 +Application that integrates existing systems to represent the contributions of the members through:
  17 +
  18 +* The amendments to the Wiki trac system.
  19 +
  20 +* Changes to the trac system code.
  21 +
  22 +* Discussions at the mailman list.
  23 +
  24 +* And other systems in the community.
  25 +
  26 +
  27 +
  28 +Features
  29 +========
  30 +
  31 +* Developed by Interlegis Communities http://colab.interlegis.leg.br/
  32 +
  33 +* Written in Python http://python.org/
  34 +
  35 +* Built with Django Web Framework https://www.djangoproject.com/
  36 +
  37 +* Search engine with Solr https://lucene.apache.org/solr/
  38 +
  39 +
  40 +
  41 +Installation
  42 +============
  43 +
  44 +After installing the colab-gitlab
  45 +
  46 +.. code-block::
  47 +
  48 + pip install colab-gitlab
  49 +
  50 +Alter the colab configuration file and uncomment the lines for the gitlab configuration,
  51 +set your upstream(gitlab) address and private_token for the gitlab api:
  52 +
  53 +.. code-block::
  54 +
  55 + vim /etc/colab/settings.yaml
  56 +
  57 + PROXIED_APPS:
  58 + gitlab:
  59 + upstream: 'http://localhost:8090/gitlab/'
  60 + private_token: ''
  61 +
  62 +
  63 +Running Colab
  64 +=============
  65 +
  66 +To run Colab with development server you will have to:
  67 +
  68 +1- Create the example configuration file:
  69 +
  70 +.. code-block::
  71 +
  72 + colab-init-config > /etc/colab/settings.yaml
  73 +
  74 +2- Edit the configuration file. Make sure you set everything you need including **database** credentials.
  75 +
  76 +3- Run the development server:
  77 +
  78 +.. code-block::
  79 +
  80 + colab-admin runserver 0.0.0.0:8000
  81 +
  82 +
  83 +**NOTE**: In case you want to keep the configuration file else where just set the
  84 +desired location in environment variable **COLAB_SETTINGS**.
... ...
colab/__init__.py 0 → 100644
  1 +++ a/colab/__init__.py
... ... @@ -0,0 +1 @@
  1 +__import__('pkg_resources').declare_namespace(__name__)
0 2 \ No newline at end of file
... ...
colab/proxy/__init__.py 0 → 100644
  1 +++ a/colab/proxy/__init__.py
... ... @@ -0,0 +1 @@
  1 +__import__('pkg_resources').declare_namespace(__name__)
0 2 \ No newline at end of file
... ...
colab/proxy/gitlab/__init__.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/__init__.py
... ...
colab/proxy/gitlab/admin.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/admin.py
... ... @@ -0,0 +1,3 @@
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
... ...
colab/proxy/gitlab/apps.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/apps.py
... ... @@ -0,0 +1,7 @@
  1 +
  2 +from ..utils.apps import ColabProxiedAppConfig
  3 +
  4 +
  5 +class ProxyGitlabAppConfig(ColabProxiedAppConfig):
  6 + name = 'colab.proxy.gitlab'
  7 + verbose_name = 'Gitlab Proxy'
... ...
colab/proxy/gitlab/data_api.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/data_api.py
... ... @@ -0,0 +1,51 @@
  1 +from colab.proxy.gitlab.models import *
  2 +from colab.proxy.proxybase.proxy_data_api import ProxyDataAPI
  3 +from django.db.models.fields import DateTimeField
  4 +from dateutil.parser import parse
  5 +import urllib2
  6 +import json
  7 +from django.conf import settings
  8 +
  9 +class GitlabDataAPI(ProxyDataAPI):
  10 +
  11 +
  12 + def fetchProjects(self):
  13 + page = 1
  14 + projects = []
  15 +
  16 + proxy_config = settings.PROXIED_APPS.get(self.app_label, {})
  17 + admin_token = proxy_config.get('auth_token')
  18 +
  19 + # Iterates throughout all projects pages
  20 + while(True):
  21 + data = urllib2.urlopen('https://beta.softwarepublico.gov.br/gitlab/api/v3/projects/all?private_token={}&per_page=100&page={}'.format(admin_token, page))
  22 + json_data = json.load(data)
  23 +
  24 + if len(json_data) == 0:
  25 + break
  26 +
  27 + page = page + 1
  28 +
  29 + for element in json_data:
  30 + project = GitlabProject()
  31 +
  32 + for field in GitlabProject._meta.fields:
  33 + value = element[field.name]
  34 + value = parse(element[field.name]) if isinstance(field, DateTimeField) else value
  35 + setattr(project, field.name, value)
  36 +
  37 + projects.append(project)
  38 +
  39 + return projects
  40 +
  41 +
  42 + def fetchData(self):
  43 + data = self.fetchProjects()
  44 +
  45 + for datum in data:
  46 + datum.save()
  47 +
  48 + @property
  49 + def app_label(self):
  50 + return 'gitlab'
  51 +
... ...
colab/proxy/gitlab/diazo.xml 0 → 100644
  1 +++ a/colab/proxy/gitlab/diazo.xml
... ... @@ -0,0 +1,18 @@
  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 + <before theme-children="/html/head" content-children="/html/head" />
  7 + <before css:theme-children="#main-content" css:content-children="body" />
  8 +
  9 + <merge attributes="class" css:theme="body" css:content="body" />
  10 +
  11 + <!-- Add gitlab properties -->
  12 + <merge attributes="data-page" css:theme="body" css:content="body" />
  13 + <merge attributes="data-project-id" css:theme="body" css:content="body" />
  14 +
  15 + <drop css:content="#top-panel" />
  16 + <drop css:content=".navbar-gitlab" />
  17 + <drop css:content=".git-clone-holder .btn:contains('HTTPS')" />
  18 +</rules>
... ...
colab/proxy/gitlab/migrations/0001_initial.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/migrations/0001_initial.py
... ... @@ -0,0 +1,28 @@
  1 +# -*- coding: utf-8 -*-
  2 +from __future__ import unicode_literals
  3 +
  4 +from django.db import models, migrations
  5 +
  6 +
  7 +class Migration(migrations.Migration):
  8 +
  9 + dependencies = [
  10 + ]
  11 +
  12 + operations = [
  13 + migrations.CreateModel(
  14 + name='GitlabProject',
  15 + fields=[
  16 + ('id', models.IntegerField(serialize=False, primary_key=True)),
  17 + ('description', models.TextField()),
  18 + ('public', models.BooleanField(default=True)),
  19 + ('name', models.TextField()),
  20 + ('name_with_namespace', models.TextField()),
  21 + ('created_at', models.DateTimeField(blank=True)),
  22 + ('last_activity_at', models.DateTimeField(blank=True)),
  23 + ],
  24 + options={
  25 + },
  26 + bases=(models.Model,),
  27 + ),
  28 + ]
... ...
colab/proxy/gitlab/migrations/__init__.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/migrations/__init__.py
... ...
colab/proxy/gitlab/models.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/models.py
... ... @@ -0,0 +1,13 @@
  1 +from django.db import models
  2 +from django.conf import settings
  3 +from colab.accounts.models import User
  4 +
  5 +class GitlabProject(models.Model):
  6 +
  7 + id = models.IntegerField(primary_key=True)
  8 + description = models.TextField()
  9 + public = models.BooleanField(default=True)
  10 + name = models.TextField()
  11 + name_with_namespace = models.TextField()
  12 + created_at = models.DateTimeField(blank=True)
  13 + last_activity_at = models.DateTimeField(blank=True)
... ...
colab/proxy/gitlab/templates/proxy/gitlab.html 0 → 100644
  1 +++ a/colab/proxy/gitlab/templates/proxy/gitlab.html
... ... @@ -0,0 +1,51 @@
  1 +{% extends 'base.html' %}
  2 +{% load static from staticfiles %}
  3 +
  4 +{% block head_css %}
  5 +<style>
  6 + /* Reset left and with for .modal-dialog style (like gitlab does),
  7 + the bootstrap.css one makes it small */
  8 + @media screen and (min-width: 768px) {
  9 + .modal-dialog {
  10 + left: auto;
  11 + width: auto;
  12 + }
  13 + }
  14 + div#main-content {
  15 + margin-top: 65px;
  16 + }
  17 +
  18 + div#main-content div.container {
  19 + width: 1110px;
  20 + }
  21 + div#main-content div.flash-container{
  22 + width: 85%;
  23 + }
  24 + #breadcrumbs {
  25 + border: 0 !important;
  26 + }
  27 +
  28 + #right-top-nav {
  29 + margin-right: 5em !important;
  30 + }
  31 +</style>
  32 +{% endblock %}
  33 +
  34 +{% block head_js %}
  35 +<script type="text/javascript">
  36 + $(function(){
  37 + // bootstrap.css forces .hide {display:none!important}, and this makes
  38 + // gitlab .hide elements NEVER have a display:block, so
  39 + // instead of editing bootstrap.css, we just removed '.hide' css class and
  40 + // toggled
  41 + $('.hide').removeClass('hide').css('display', 'none');
  42 +
  43 + // Hit the SSH clone button to select it by default
  44 + jQuery(".git-clone-holder .btn:contains('SSH')").click()
  45 +
  46 + });
  47 +</script>
  48 +<script type="text/javascript" src="{% static 'third-party/bootstrap/js/bootstrap.min.js' %}"></script>
  49 +<script type="text/javascript" src="{% static 'third-party/jquery.cookie.js' %}"></script>
  50 +<script>jQuery.noConflict();</script>
  51 +{% endblock %}
... ...
colab/proxy/gitlab/tests.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/tests.py
... ... @@ -0,0 +1,3 @@
  1 +from django.test import TestCase
  2 +
  3 +# Create your tests here.
... ...
colab/proxy/gitlab/urls.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/urls.py
... ... @@ -0,0 +1,9 @@
  1 +
  2 +from django.conf.urls import patterns, url
  3 +
  4 +from .views import GitlabProxyView
  5 +
  6 +
  7 +urlpatterns = patterns('',
  8 + url(r'^gitlab/(?P<path>.*)$', GitlabProxyView.as_view()),
  9 +)
... ...
colab/proxy/gitlab/views.py 0 → 100644
  1 +++ a/colab/proxy/gitlab/views.py
... ... @@ -0,0 +1,9 @@
  1 +
  2 +from django.conf import settings
  3 +
  4 +from ..utils.views import ColabProxyView
  5 +
  6 +
  7 +class GitlabProxyView(ColabProxyView):
  8 + app_label = 'gitlab'
  9 + diazo_theme_template = 'proxy/gitlab.html'
... ...
requirements.txt 0 → 100644
  1 +++ a/requirements.txt
... ... @@ -0,0 +1 @@
  1 +colab
0 2 \ No newline at end of file
... ...
setup.py 0 → 100644
  1 +++ a/setup.py
... ... @@ -0,0 +1,47 @@
  1 +
  2 +from setuptools import setup, find_packages
  3 +from pip.download import PipSession
  4 +from pip.req import parse_requirements
  5 +
  6 +import os
  7 +# if you are not using vagrant, just delete os.link directly,
  8 +# The hard link only saves a little disk space, so you should not care
  9 +if os.environ.get('USER', '') == 'vagrant':
  10 + del os.link
  11 +
  12 +session = PipSession()
  13 +reqs = [str(req.req) for req in parse_requirements('requirements.txt',
  14 + session=session) if req.req]
  15 +
  16 +EXCLUDE_FROM_PACKAGES = []
  17 +
  18 +
  19 +setup(
  20 + name='colab-gitlab',
  21 + version='0.1.0',
  22 + url='https://github.com/colab-community/colab_gitlab',
  23 + author='Sergio Oliveira',
  24 + author_email='sergio@tracy.com.br',
  25 + description=
  26 + 'Gitlab plugin for Colab, a colaboration platform for communities',
  27 + license='LICENSE.txt',
  28 + packages=find_packages(exclude="EXCLUDE_FROM_PACKAGES"),
  29 + include_package_data=True,
  30 + namespace_packages=['colab', 'colab.proxy'],
  31 + zip_safe=False,
  32 + long_description=open('README.rst').read(),
  33 + install_requires=reqs,
  34 + classifiers=[
  35 + 'Development Status :: 3 - Alpha',
  36 + 'Environment :: Web Environment',
  37 + 'Framework :: Django',
  38 + 'Intended Audience :: Developers',
  39 + 'Operating System :: OS Independent',
  40 + 'Programming Language :: Python',
  41 + 'Programming Language :: Python :: 2',
  42 + 'Programming Language :: Python :: 2.7',
  43 + 'Topic :: Internet :: WWW/HTTP',
  44 + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
  45 + 'Topic :: Internet :: WWW/HTTP :: WSGI',
  46 + ],
  47 +)
... ...