Commit 66233ec5acba574c8c9b81cc3a7f9d83ef14c9ab
0 parents
Exists in
master
and in
1 other branch
Initial commit
Showing
19 changed files
with
353 additions
and
0 deletions
Show diff stats
| 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 | ... | ... |
| 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**. | ... | ... |
| 1 | +++ a/colab/proxy/gitlab/__init__.py | ... | ... |
| 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 | + | ... | ... |
| 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> | ... | ... |
| 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 | + ] | ... | ... |
| 1 | +++ a/colab/proxy/gitlab/migrations/__init__.py | ... | ... |
| 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) | ... | ... |
| 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 %} | ... | ... |
| 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 | +) | ... | ... |