commit d6f245a8d8ef237aece03ebe688001a91d9f852a Author: Jan Dittberner Date: Tue Jan 20 15:33:18 2009 +0100 initial implementation diff --git a/ddportfolioservice/__init__.py b/ddportfolioservice/__init__.py new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/ddportfolioservice/__init__.py @@ -0,0 +1 @@ +# diff --git a/ddportfolioservice/ddportfolio.ini b/ddportfolioservice/ddportfolio.ini new file mode 100644 index 0000000..888340a --- /dev/null +++ b/ddportfolioservice/ddportfolio.ini @@ -0,0 +1,51 @@ +[overview] +urls=ddpo,alladdresses +ddpo.pattern=http://qa.debian.org/developer.php?login=%(email)s +alladdresses.pattern=http://qa.debian.org/developer.php?login=%(name)s + +[bugs] +urls=received,reported,bugstats,usertags,searchall,wnpp +received.pattern=http://bugs.debian.org/%(email)s +reported.pattern=http://bugs.debian.org/from:%(email)s +bugstats.pattern=http://asdfasdf.debian.net/~tar/bugstats/?%(email)s +usertags.pattern=http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=%(email)s +searchall.pattern=http://merkel.debian.org/~don/cgi/search.cgi?phrase=%(name)s&search=search +wnpp.pattern=http://qa.debian.org/developer.php?wnpp=%(email)s + +[build] +urls=buildd,igloo,svnbuildstat +buildd.pattern=http://buildd.debian.org/pkg.cgi?maint=%(email)s +igloo.pattern=http://oldpeople.debian.org/~igloo/status.php?email=%(email)s&thin=on +svnbuildstat.pattern=http://svnbuildstat.debian.net/packages/list/%(email)s + +[qa] +urls=lintian,lintianfull,dehs +lintian.pattern=http://lintian.debian.org/maintainer/%(email)s.html +lintianfull.pattern=http://lintian.debian.org/full/%(email)s.html +dehs.pattern=http://dehs.alioth.debian.org/report.php?login=%(email)s + +[upload] +urls=keylog +keylog.pattern=http://merkel.debian.org/~enrico/keylog/%(gpgfp)s.html + +[lists] +urls=dolists,adolists,gmane +dolists.pattern=http://lists.debian.org/cgi-bin/search?author=%(name)s&sort=date +adolists.pattern=http://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22 +gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.* + +[files] +urls=people,alioth +people.pattern=http://people.debian.org/~%(username)s/ +alioth.pattern=http://alioth.debian.org/~%(username)s/ + +[membership] +urls=nm,db,alioth +nm.pattern=https://nm.debian.org/nmstatus.php?email=%(email)s +db.pattern=http://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search +alioth.pattern=http://alioth.debian.org/users/%(username)s/ + +[miscellaneous] +urls=debtags,links +debtags.pattern=http://debtags.alioth.debian.org/todo.html?maint=%(email)s +links.pattern=http://www.google.com/search?hl=en&lr=&q=site%%3Adebian.org+%%22%(name)s%%22+-site%%3Anm.debian.org+-site%%3Alintian.debian.org+-site%%3Abugs.debian.org+-site%%3Alists.debian.org+-site%%3Apackages.debian.org+-site%%3Alists.alioth.debian.org+-site%%3Aftp.debian.org++-site%%3Apackages.qa.debian.org++-site%%3Aftp*.*.debian.org+-inurl%%3Adebian.org%%2Fdevel%%2Fpeople.+-inurl%%3Aindices%%2FMaintainers+-inurl%%3Adebian.org%%2Fdebian%%2Fproject++-inurl%%3A%%2Fdists%%2F&btnG=Search diff --git a/ddportfolioservice/ddportfolio.py b/ddportfolioservice/ddportfolio.py new file mode 100644 index 0000000..b737ee4 --- /dev/null +++ b/ddportfolioservice/ddportfolio.py @@ -0,0 +1,68 @@ +# -*- python -*- +# -*- coding: utf8 -*- + +from paste.request import parse_formvars +import pkg_resources +import minjson +from ConfigParser import ConfigParser +from urllib import quote_plus + +my_config = ConfigParser() +my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) + +def build_urls(fields): + result = {} + qfields = dict([(key, quote_plus(fields[key])) for key in fields]) + for section in my_config.sections(): + if my_config.has_option(section, 'urls'): + for url in my_config.get(section, 'urls').split(','): + if my_config.has_option(section, url + '.pattern'): + try: + result[section + '.' + url] = \ + my_config.get(section, url + '.pattern', + False, qfields) + except Exception, e: + print "unable to parse %s: %s" % (my_config.get(section, url + '.pattern', True), e) + return result + +def app(environ, start_response): + fields = parse_formvars(environ) + if environ['REQUEST_METHOD'] == 'POST': + data = build_urls(fields) + if ('mode' in fields and fields['mode'] == 'json'): + start_response('200 OK', [('content-type', 'text/json')]) + return [minjson.write(data)] + else: + start_response('200 OK', [('content-type', 'text/html')]) + return [''' +Debian Developer Portfolio + +'] + else: + start_response('200 OK', [('content-type', 'text/html')]) + return [''' + + Debian Developer Portfolio + + +
+
+ Debian Developer Portfolio +
+
+
+
+
+
+
+
+ +
+
+ +'''] + +if __name__ == '__main__': + from paste import httpserver + httpserver.serve(app, host='127.0.0.1', port='8080') diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..01bb954 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,3 @@ +[egg_info] +tag_build = dev +tag_svn_revision = true diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..e97cbb5 --- /dev/null +++ b/setup.py @@ -0,0 +1,34 @@ +from setuptools import setup, find_packages +import sys, os + +version = '0.1' + +setup(name='ddportfolioservice', + version=version, + description="service to create DDPortfolio URLs", + long_description="""This is a service implementation that +returns a set of personalized URLs as outlined in +http://wiki.debian.org/DDPortfolio. It takes the Debian developers +full name and email address as input and returns a JSON formatted +array of URLs.""", + # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=['Development Status :: 3 - Alpha', + 'Environment :: Web Environment', + 'License :: DFSG approved', + 'License :: OSI approved :: ' . + 'GNU Affero General Public License v3', + 'Programming Language :: Python'], + keywords='Debian service JSON', + author='Jan Dittberner', + author_email='jan@dittberner.info', + url='http://debian-stuff.dittberner.info/ddportfolioservice/', + license='AGPLv3', + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + # -*- Extra requirements: -*- + 'PasteDeploy', + 'python-json' + ], + )