diff --git a/.gitignore b/.gitignore index 77fa001..ade15d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,12 @@ -data/ -*.pyc *.egg-info/ +*.mo +*.pot +*.pyc +.*.swp .coverage +.idea/ +.ropeproject/ +/dist/ +data/ +debianmemberportfolio/model/keyringcache.db +tags diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..87d3ab4 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,14 @@ +--- +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +sphinx: + configuration: docs/source/conf.py + +python: + install: + - requirements: docs/doc-requirements.txt diff --git a/ChangeLog b/ChangeLog index 737d397..8c45a78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,90 @@ +2023-06-03 Jan Dittberner + * add updated translations from Weblate + * switch to Poetry for dependency management + * describe translation workflow in developer documentation + * fix internal server error when name is missing for non Debian member (thanks Paul Wise for the report) + * fix unicode handling in urlbuilder (thanks Paul Wise for the report) + +2022-09-24 Jan Dittberner + * add updated translations from Weblate + * update dependencies + * replace gpg and pgp with OpenPGP (thanks Guillem Jover) + * remove flattr code + +2021-10-24 Jan Dittberner + * add updated translations from Weblate + * fix NM URL (thanks Diederik de Haas) + +2021-07-03 Jan Dittberner + * Add translations from Weblate + * remove a dead services (thanks Juri Grabowski) + +2020-02-22 Jan Dittberner + * Update translations + +2018-05-12 Jan Dittberner + * add patch by Paul Wise to provide Repology information links + * Update translations + +2018-02-09 Jan Dittberner + * add patch by Paul Wise to provide Salsa links + * Update translations + +2015-11-12 Jan Dittberner + * port to Python 3 and Flask + +2015-03-09 Jan Dittberner + * apply patch for DMD link by Paul Wise + +2015-02-20 Jan Dittberner + * add Jessie requirements file + * fix language check if no Accept-Language header is sent + +2014-10-14 Jan Dittberner + * add patch by Paul Wise to use to update DUCK link to new static page + * add patch by Paul Wise to remove generated files from version + control + * add patch by Paul Wise to use https in links, comments, docstrings, + etc. + +2014-04-10 Jan Dittberner + * add patch by Paul Wise to use SSL where available + * add patch by Paul Wise to fix link to the contributors site + +2014-02-09 Jan Dittberner + * renamed module from ddportfolio to debianmemberportfolio + * add patch for DUCK URL by Paul Wise + +2014-02-08 Jan Dittberner + * moved to new server + * ported to Wheezy versions of the dependencies + * applied patches by Paul Wise and Olivier Berger + * update Sphinx documentation + * check responses in controller unit tests + * update copyright years of files + +2013-02-24 Jan Dittberner + * add sphinx documentation + * applied multiple patches by Paul Wise + +2012-12-08 Jan Dittberner + + * include patch for Debian URL checker by Paul Wise + * add link to Transifex translation project + +2012-11-21 Jan Dittberner + + * add pip requirements file with Debian Squeeze versions + * add indonesian translation by Izharul Haq + +2012-06-19 Jan Dittberner + + * add portuguese (Brasil) translation by Daniel Manzano + +2012-05-18 Jan Dittberner + + * add french translation by Stéphane Aulery + 2012-03-04 Jan Dittberner * update debtags location diff --git a/MANIFEST.in b/MANIFEST.in index c822c84..5df1764 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,2 @@ -include newpylonsapp/config/deployment.ini_tmpl -recursive-include ddportfolioservice/public * -recursive-include ddportfolioservice/templates * +recursive-include debianmemberportfolio/static * +recursive-include debianmemberportfolio/templates * diff --git a/README.md b/README.md new file mode 100644 index 0000000..8ea677b --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Debian Member Portfolio Service + +This is a service implementation that returns a set of personalized URLs as outlined in +https://wiki.debian.org/DDPortfolio. It takes the Debian Member's full name and email address as input and returns +a JSON formatted array or an HTML page of URLs. + +See https://debian-member-portfolio-service.readthedocs.org/ for more documentation (or its source in +docs/source/devdocs.rst), including how to configure a development environment. + +## Translations + +Translations for the Debian Member Portfolio service are maintained using +[Weblate](https://hosted.weblate.org/projects/debian-member-portfolio-service/translations/). Thanks to Weblate for +hosting the translation service and to all contributors of translations. diff --git a/README.txt b/README.txt deleted file mode 100644 index 2861c89..0000000 --- a/README.txt +++ /dev/null @@ -1,20 +0,0 @@ -This file is for you to describe the ddportfolioservice -application. Typically you would include information such as the -information below: - -Installation and Setup -====================== - -Install ``ddportfolioservice`` using easy_install:: - - easy_install ddportfolioservice - -Make a config file as follows:: - - paster make-config ddportfolioservice config.ini - -Tweak the config file as appropriate and then setup the application:: - - paster setup-app config.ini - -Then you are ready to go. diff --git a/agpl-3.0.txt b/agpl-3.0.txt index dba13ed..be3f7b2 100644 --- a/agpl-3.0.txt +++ b/agpl-3.0.txt @@ -1,7 +1,7 @@ GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -643,7 +643,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -658,4 +658,4 @@ specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see -. +. diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 0000000..f0234b3 --- /dev/null +++ b/babel.cfg @@ -0,0 +1,3 @@ +[python: **.py] +[jinja2: **/templates/**.html] +extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/config.py b/config.py new file mode 100644 index 0000000..a77f89b --- /dev/null +++ b/config.py @@ -0,0 +1,33 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service Flask configuration +# +# Copyright © 2015 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +WTF_CSRF_ENABLED = False + +# available languages +LANGUAGES = { + 'en': 'English', + 'de': 'Deutsch', + 'fr': 'Français', + 'id': 'Bahasa Indonesia', + 'pt_BR': 'Portuguese (Brazil)' +} diff --git a/ddportfolioservice/__init__.py b/ddportfolioservice/__init__.py deleted file mode 100644 index 98fc07b..0000000 --- a/ddportfolioservice/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service package -# Copyright (c) 2009 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/config/__init__.py b/ddportfolioservice/config/__init__.py deleted file mode 100644 index cdcce52..0000000 --- a/ddportfolioservice/config/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service config package -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/config/deployment.ini_tmpl b/ddportfolioservice/config/deployment.ini_tmpl deleted file mode 100644 index 29f9ab9..0000000 --- a/ddportfolioservice/config/deployment.ini_tmpl +++ /dev/null @@ -1,60 +0,0 @@ -# -# ddportfolioservice - Pylons configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = true -email_to = you@yourdomain.com -smtp_server = localhost -error_email_from = paste@localhost - -[server:main] -use = egg:Paste#http -host = 0.0.0.0 -port = 5000 - -[app:main] -use = egg:ddportfolioservice -full_stack = true -static_files = true - -cache_dir = %(here)s/data -beaker.session.key = ddportfolioservice -beaker.session.secret = ${app_instance_secret} -app_instance_uuid = ${app_instance_uuid} - -# If you'd like to fine-tune the individual locations of the cache data dirs -# for the Cache data, or the Session saves, un-comment the desired settings -# here: -#beaker.cache.data_dir = %(here)s/data/cache -#beaker.session.data_dir = %(here)s/data/sessions - -# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* -# Debug mode will enable the interactive debugging tool, allowing ANYONE to -# execute malicious code after an exception is raised. -set debug = false - - -# Logging configuration -[loggers] -keys = root - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = INFO -handlers = console - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(asctime)s %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s diff --git a/ddportfolioservice/config/environment.py b/ddportfolioservice/config/environment.py deleted file mode 100644 index 3d666fa..0000000 --- a/ddportfolioservice/config/environment.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service environment configuration -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Pylons environment configuration""" -import os - -from mako.lookup import TemplateLookup -from pylons.configuration import PylonsConfig -from pylons.error import handle_mako_error - -import ddportfolioservice.lib.app_globals as app_globals -import ddportfolioservice.lib.helpers -from ddportfolioservice.config.routing import make_map - - -def load_environment(global_conf, app_conf): - """ - Configure the Pylons environment via the ``pylons.config`` object - """ - config = PylonsConfig() - - # Pylons paths - root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - paths = dict(root=root, - controllers=os.path.join(root, 'controllers'), - static_files=os.path.join(root, 'public'), - templates=[os.path.join(root, 'templates')]) - - # Initialize config with the basic options - config.init_app( - global_conf, app_conf, package='ddportfolioservice', paths=paths) - - config['routes.map'] = make_map(config) - config['pylons.app_globals'] = app_globals.Globals(config) - config['pylons.h'] = ddportfolioservice.lib.helpers - - # Setup cache object as early as possible - import pylons - pylons.cache._push_object(config['pylons.app_globals'].cache) - - # Create the Mako TemplateLookup, with the default auto-escaping - config['pylons.app_globals'].mako_lookup = TemplateLookup( - directories=paths['templates'], - error_handler=handle_mako_error, - module_directory=os.path.join(app_conf['cache_dir'], 'templates'), - input_encoding='utf-8', default_filters=['escape'], - imports=['from webhelpers.html import escape']) - - # CONFIGURATION OPTIONS HERE (note: all config options will override - # any Pylons config options) - - return config diff --git a/ddportfolioservice/config/middleware.py b/ddportfolioservice/config/middleware.py deleted file mode 100644 index 4f075ce..0000000 --- a/ddportfolioservice/config/middleware.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service middleware configuration -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Pylons middleware initialization""" -from beaker.middleware import SessionMiddleware -from paste.cascade import Cascade -from paste.registry import RegistryManager -from paste.urlparser import StaticURLParser -from paste.deploy.converters import asbool -from pylons.middleware import ErrorHandler, StatusCodeRedirect -from pylons.wsgiapp import PylonsApp -from routes.middleware import RoutesMiddleware - -from ddportfolioservice.config.environment import load_environment - - -def make_app(global_conf, full_stack=True, static_files=True, **app_conf): - """Create a Pylons WSGI application and return it - - ``global_conf`` - The inherited configuration for this application. Normally from - the [DEFAULT] section of the Paste ini file. - - ``full_stack`` - Whether this application provides a full WSGI stack (by default, - meaning it handles its own exceptions and errors). Disable - full_stack when this application is "managed" by another WSGI - middleware. - - ``static_files`` - Whether this application serves its own static files; disable - when another web server is responsible for serving them. - - ``app_conf`` - The application's local configuration. Normally specified in - the [app:] section of the Paste ini file (where - defaults to main). - - """ - # Configure the Pylons environment - config = load_environment(global_conf, app_conf) - - # The Pylons WSGI app - app = PylonsApp(config=config) - - # Routing/Session/Cache Middleware - app = RoutesMiddleware(app, config['routes.map']) - app = SessionMiddleware(app, config) - - # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) - - if asbool(full_stack): - # Handle Python exceptions - app = ErrorHandler(app, global_conf, **config['pylons.errorware']) - - # Display error documents for 401, 403, 404 status codes (and - # 500 when debug is disabled) - if asbool(config['debug']): - app = StatusCodeRedirect(app) - else: - app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) - - # Establish the Registry for this application - app = RegistryManager(app) - - if asbool(static_files): - # Serve static files - static_app = StaticURLParser(config['pylons.paths']['static_files']) - app = Cascade([static_app, app]) - app.config = config - return app diff --git a/ddportfolioservice/config/routing.py b/ddportfolioservice/config/routing.py deleted file mode 100644 index 196b33c..0000000 --- a/ddportfolioservice/config/routing.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service routing configuration -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Routes configuration - -The more specific and detailed routes should be defined first so they -may take precedent over the more generic routes. For more information -refer to the routes manual at http://routes.groovie.org/docs/ -""" -from routes import Mapper - - -def make_map(config): - """Create, configure and return the routes Mapper""" - map = Mapper(directory=config['pylons.paths']['controllers'], - always_scan=config['debug'], explicit=True) - map.minimization = False - - # The ErrorController route (handles 404/500 error pages); it should - # likely stay at the top, ensuring it can always be resolved - map.connect('/error/{action}', controller='error') - map.connect('/error/{action}/{id}', controller='error') - - # CUSTOM ROUTES HERE - map.connect('/', controller='ddportfolio', action='index') - map.connect('/result', controller='ddportfolio', action='urllist') - map.connect('/htmlformhelper.js', controller='showformscripts', - action='index') - - map.connect('/{controller}/{action}') - map.connect('/{controller}/{action}/{id}') - - return map diff --git a/ddportfolioservice/controllers/__init__.py b/ddportfolioservice/controllers/__init__.py deleted file mode 100644 index 09444ed..0000000 --- a/ddportfolioservice/controllers/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service controllers package -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/controllers/ddportfolio.py b/ddportfolioservice/controllers/ddportfolio.py deleted file mode 100644 index 4063f87..0000000 --- a/ddportfolioservice/controllers/ddportfolio.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service DdportfolioController -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -import logging -import simplejson - -from pylons import request, response, tmpl_context as c -from pylons.i18n import N_, _ -import formencode.api -import formencode.validators - -from ddportfolioservice.lib.base import BaseController, render -from ddportfolioservice.model.form import DDDataRequest, DeveloperData -from ddportfolioservice.model.urlbuilder import build_urls -from ddportfolioservice.model import dddatabuilder - -log = logging.getLogger(__name__) - - -class DdportfolioController(BaseController): - _LABELS = { - 'overview': { - 'label': N_('Overview'), - 'ddpo': N_("Debian Member's Package Overview"), - 'alladdresses': N_("""Debian Member's Package Overview -... showing all email addresses"""), - }, - 'bugs': { - 'label': N_('Bugs'), - 'received': N_('''bugs received -(note: co-maintainers not listed, see \ -#430986)'''), - 'reported': N_('bugs reported'), - 'usertags': N_('user tags'), - 'searchall': N_('all messages (i.e., full text search for \ -developer name on all bug logs)'), - 'wnpp': N_('WNPP'), - 'correspondent': N_('correspondent for bugs'), - 'graph': N_('one year open bug history graph'), - }, - 'build': { - 'label': N_('Build'), - 'buildd': N_('buildd.d.o'), - 'igloo': N_('igloo'), - }, - 'qa': { - 'label': N_('Quality Assurance'), - 'lintian': N_('lintian reports'), - 'lintianfull': N_('full lintian reports (i.e. including \ -"info"-level messages)'), - 'piuparts': N_('piuparts'), - 'patchtracker': N_('Debian patch tracking system'), - }, - 'lists': { - 'label': N_('Mailing Lists'), - 'dolists': N_('lists.d.o'), - 'adolists': N_('lists.a.d.o'), - 'gmane': N_('gmane'), - }, - 'files': { - 'label': N_('Files'), - 'people': N_('people.d.o'), - 'oldpeople': N_('oldpeople'), - 'alioth': N_('Alioth'), - }, - 'membership': { - 'label': N_('Membership'), - 'nm': N_('NM'), - 'dbfinger': N_('DB information via finger'), - 'db': N_('DB information via HTTP'), - 'alioth': N_('Alioth'), - 'wiki': N_('Wiki'), - 'forum': N_('Forum'), - }, - 'miscellaneous': { - 'label': N_('Miscellaneous'), - 'debtags': N_('debtags'), - 'links': N_('links'), - 'website': N_('Debian website'), - 'search': N_('Debian search'), - 'gpgfinger': N_('GPG public key via finger'), - 'gpgweb': N_('GPG public key via HTTP'), - 'nm': N_('NM, AM participation'), - }, - 'ssh': { - 'label': N_('Information reachable via ssh (for Debian Members)'), - 'owndndoms': N_('owned debian.net domains'), - 'miainfo': N_('MIA database information'), - 'groupinfo': N_('Group membership information'), - }, - 'ubuntu': { - 'label': N_('Ubuntu'), - 'ubuntudiff': N_('Available patches from Ubuntu'), - }, - } - - def _get_label(self, section, url=None): - if section in self._LABELS: - if url: - if url in self._LABELS[section]: - return self._LABELS[section][url] - elif 'label' in self._LABELS[section]: - return self._LABELS[section]['label'] - if url: - return "%s.%s" % (section, url) - return section - - def index(self): - """ - Render the input form. - """ - return render('/showform.mako') - - def urllist(self): - """Handle the actual data.""" - schema = DDDataRequest() - try: - formencode.api.set_stdtranslation( - domain="FormEncode", - languages=[lang[0:2] for lang in request.languages]) - form_result = schema.to_python(request.params) - except formencode.validators.Invalid, error: - c.messages = {'errors': error.unpack_errors()} - return render('/showform.mako') - fields = dddatabuilder.build_data(form_result['email']) - rp = request.params.copy() - - DM_TUPLES = (('name', 'name'), - ('gpgfp', 'gpgfp'), - ('nonddemail', 'email')) - DD_TUPLES = (('username', 'username'), - ('aliothusername', 'username')) - - if fields['type'] in (dddatabuilder.TYPE_DD, dddatabuilder.TYPE_DM): - for tuple in DM_TUPLES: - if not tuple[0] in rp or not rp[tuple[0]]: - rp[tuple[0]] = fields[tuple[1]] - if fields['type'] == dddatabuilder.TYPE_DD: - for tuple in DD_TUPLES: - if not tuple[0] in rp or not rp[tuple[0]]: - rp[tuple[0]] = fields[tuple[1]] - - schema = DeveloperData() - try: - formencode.api.set_stdtranslation( - domain="FormEncode", - languages=[lang[0:2] for lang in request.languages]) - form_result = schema.to_python(rp) - except formencode.validators.Invalid, error: - c.messages = {'errors': error.unpack_errors()} - return render('/showform.mako') - if form_result['wikihomepage'] is None: - log.debug('generate wikihomepage from name') - form_result['wikihomepage'] = "".join( - [part.capitalize() for part in form_result['name'].split()]) - data = build_urls(form_result) - if form_result['mode'] == 'json': - response.headers['Content-Type'] = 'text/javascript' - return simplejson.dumps( - dict([("%s.%s" % \ - (entry[1], entry[2].name), entry[3]) \ - for entry in data if entry[0] == 'url'])) - for entry in data: - if entry[0] in ('url', 'error'): - entry.append(_(self._get_label(entry[1], entry[2].name))) - elif entry[0] == 'section': - entry.append(_(self._get_label(entry[1]))) - c.urldata = data - return render('/showurls.mako') diff --git a/ddportfolioservice/controllers/error.py b/ddportfolioservice/controllers/error.py deleted file mode 100644 index 67bc56d..0000000 --- a/ddportfolioservice/controllers/error.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service ErrorController -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -import cgi - -from paste.urlparser import PkgResourcesParser -from pylons import request -from pylons.controllers.util import forward -from pylons.middleware import error_document_template -from webhelpers.html.builder import literal - -from ddportfolioservice.lib.base import BaseController - - -class ErrorController(BaseController): - """Generates error documents as and when they are required. - - The ErrorDocuments middleware forwards to ErrorController when error - related status codes are returned from the application. - - This behaviour can be altered by changing the parameters to the - ErrorDocuments middleware in your config/middleware.py file. - """ - - def document(self): - """Render the error document""" - resp = request.environ.get('pylons.original_response') - content = literal(resp.body) or cgi.escape( - request.GET.get('message', '')) - page = error_document_template % \ - dict(prefix=request.environ.get('SCRIPT_NAME', ''), - code=cgi.escape( - request.GET.get('code', str(resp.status_int))), - message=content) - return page - - def img(self, id): - """Serve Pylons' stock images""" - return self._serve_file('/'.join(['media/img', id])) - - def style(self, id): - """Serve Pylons' stock stylesheets""" - return self._serve_file('/'.join(['media/style', id])) - - def _serve_file(self, path): - """ - Call Paste's FileApp (a WSGI application) to serve the file at - the specified path - """ - request.environ['PATH_INFO'] = '/%s' % path - return forward(PkgResourcesParser('pylons', 'pylons')) diff --git a/ddportfolioservice/controllers/showformscripts.py b/ddportfolioservice/controllers/showformscripts.py deleted file mode 100644 index 6b826bf..0000000 --- a/ddportfolioservice/controllers/showformscripts.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service ShowformscriptController. -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -import logging -import simplejson - -from pylons import request, response -from pylons.controllers.util import abort -import formencode.api -import formencode.validators - -from ddportfolioservice.lib.base import BaseController, render -from ddportfolioservice.model.form import DDDataRequest -from ddportfolioservice.model import dddatabuilder - -log = logging.getLogger(__name__) - - -class ShowformscriptsController(BaseController): - """This controller is used to support data entry in showform. - - It provides code for generating JavaScript as well as JSON - responses for autocompletion of fields.""" - - def index(self): - """ - This action generates the helper script for the showform page. - """ - response.headers['Content-Type'] = 'text/javascript; charset=utf-8' - return render('/showformscript.mako') - - def fetchdddata(self): - """ - This action fetches the data for a given mail address and - returns them as JSON. - """ - schema = DDDataRequest() - try: - formencode.api.set_stdtranslation( - domain="FormEncode", - languages=[lang[0:2] for lang in request.languages]) - form_result = schema.to_python(request.params) - except formencode.validators.Invalid, error: - errors = error.unpack_errors() - abort(400, "\n".join( - ["%s: %s" % (key, errors[key]) for key in errors])) - fields = dddatabuilder.build_data(form_result['email']) - log.debug(fields) - response.headers['Content-Type'] = 'text/plain' - return simplejson.dumps(fields) diff --git a/ddportfolioservice/controllers/template.py b/ddportfolioservice/controllers/template.py deleted file mode 100644 index ce5352c..0000000 --- a/ddportfolioservice/controllers/template.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service TemplateController -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -from ddportfolioservice.lib.base import BaseController - - -class TemplateController(BaseController): - - def view(self, url): - """By default, the final controller tried to fulfill the request - when no other routes match. It may be used to display a template - when all else fails, e.g.:: - - def view(self, url): - return render('/%s' % url) - - Or if you're using Mako and want to explicitly send a 404 (Not - Found) response code when the requested template doesn't exist:: - - import mako.exceptions - - def view(self, url): - try: - return render('/%s' % url) - except mako.exceptions.TopLevelLookupException: - abort(404) - - By default this controller aborts the request with a 404 (Not - Found) - """ - abort(404) diff --git a/ddportfolioservice/i18n/ddportfolioservice.pot b/ddportfolioservice/i18n/ddportfolioservice.pot deleted file mode 100644 index e639a2b..0000000 --- a/ddportfolioservice/i18n/ddportfolioservice.pot +++ /dev/null @@ -1,364 +0,0 @@ -# Translations template for ddportfolioservice. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the ddportfolioservice -# project. -# FIRST AUTHOR , 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: ddportfolioservice 0.2.7\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-05-18 16:10+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" - -#: ddportfolioservice/controllers/ddportfolio.py:42 -msgid "Overview" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:43 -msgid "Debian Member's Package Overview" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:44 -msgid "" -"Debian Member's Package Overview\n" -"... showing all email addresses" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:48 -msgid "Bugs" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:49 -msgid "" -"bugs received\n" -"(note: co-maintainers not listed, see #430986)" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:53 -msgid "bugs reported" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:54 -msgid "user tags" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:55 -msgid "all messages (i.e., full text search for developer name on all bug logs)" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:57 -msgid "WNPP" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:58 -msgid "correspondent for bugs" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:59 -msgid "one year open bug history graph" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:62 -msgid "Build" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:63 -msgid "buildd.d.o" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:64 -msgid "igloo" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:67 -msgid "Quality Assurance" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:68 -msgid "lintian reports" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:69 -msgid "full lintian reports (i.e. including \"info\"-level messages)" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:71 -msgid "piuparts" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:72 -msgid "Debian patch tracking system" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:75 -msgid "Mailing Lists" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:76 -msgid "lists.d.o" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:77 -msgid "lists.a.d.o" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:78 -msgid "gmane" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:81 -msgid "Files" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:82 -msgid "people.d.o" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:83 -msgid "oldpeople" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:84 -#: ddportfolioservice/controllers/ddportfolio.py:91 -msgid "Alioth" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:87 -msgid "Membership" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:88 -msgid "NM" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:89 -msgid "DB information via finger" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:90 -msgid "DB information via HTTP" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:92 -msgid "Wiki" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:93 -msgid "Forum" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:96 -msgid "Miscellaneous" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:97 -msgid "debtags" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:98 -msgid "links" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:99 -msgid "Debian website" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:100 -msgid "Debian search" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:101 -msgid "GPG public key via finger" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:102 -msgid "GPG public key via HTTP" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:103 -msgid "NM, AM participation" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:106 -msgid "Information reachable via ssh (for Debian Members)" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:107 -msgid "owned debian.net domains" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:108 -msgid "" -"MIA database " -"information" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:110 -msgid "Group membership information" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:113 -msgid "Ubuntu" -msgstr "" - -#: ddportfolioservice/controllers/ddportfolio.py:114 -msgid "Available patches from Ubuntu" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:40 -msgid "Email address" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:41 -msgid "Name" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:42 -msgid "GPG fingerprint" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:43 -msgid "Debian user name" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:44 -msgid "Non Debian email address" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:45 -msgid "Alioth user name" -msgstr "" - -#: ddportfolioservice/model/urlbuilder.py:97 -#: ddportfolioservice/model/urlbuilder.py:101 -#, python-format -msgid "Missing input: %s" -msgstr "" - -#: ddportfolioservice/templates/base.mako:26 -#: ddportfolioservice/templates/base.mako:34 -msgid "Debian Member Portfolio Service" -msgstr "" - -#: ddportfolioservice/templates/base.mako:32 -msgid "Debian Logo" -msgstr "" - -#: ddportfolioservice/templates/base.mako:35 -msgid "" -"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the Debian " -"Wiki. You can create a set of customized links leading to a Debian " -"Member's or package maintainer's information regarding Debian." -msgstr "" - -#: ddportfolioservice/templates/base.mako:46 -msgid "AGPL - Free Software" -msgstr "" - -#: ddportfolioservice/templates/base.mako:48 -#, python-format -msgid "" -"The service is available under the terms of the GNU Affero General Public " -"License as published by the Free Software Foundation, either version 3 of" -" the License, or (at your option) any later version. You can browse the " -"source code or clone it from %(cloneurl)s using git." -msgstr "" - -#: ddportfolioservice/templates/base.mako:49 -msgid "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:24 -msgid "Enter your personal information" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:30 -#: ddportfolioservice/templates/showurls.mako:28 -msgid "Debian Member Portfolio" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:36 -msgid "Email address:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:47 -msgid "Show all form fields" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:54 -msgid "Name:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:64 -msgid "GPG fingerprint:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:79 -msgid "Debian user name:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:94 -msgid "Non Debian email address:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:109 -msgid "Alioth user name:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:125 -msgid "Wiki user name:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:140 -msgid "Forum user id:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:151 -msgid "Output format:" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:157 -msgid "HTML" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:159 -msgid "JSON" -msgstr "" - -#: ddportfolioservice/templates/showform.mako:161 -msgid "Build Debian Member Portfolio URLs" -msgstr "" - -#: ddportfolioservice/templates/showurls.mako:24 -msgid "Your personal links" -msgstr "" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "Usage" -msgstr "" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "URL" -msgstr "" - -#: ddportfolioservice/templates/showurls.mako:41 -msgid "Error during URL creation:" -msgstr "" - -#: ddportfolioservice/templates/showurls.mako:68 -msgid "Restart" -msgstr "" - diff --git a/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.mo b/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.mo deleted file mode 100644 index d5e060d..0000000 Binary files a/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.mo and /dev/null differ diff --git a/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.po b/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.po deleted file mode 100644 index 56e4bf6..0000000 --- a/ddportfolioservice/i18n/de/LC_MESSAGES/ddportfolioservice.po +++ /dev/null @@ -1,391 +0,0 @@ -# German translations for ddportfolioservice. -# Copyright (C) 2009, 2010, 2011 Jan Dittberner -# This file is distributed under the same license as the ddportfolioservice -# project. -# Jan Dittberner , 2009, 2010, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: ddportfolioservice 0.2.1\n" -"Report-Msgid-Bugs-To: jan@dittberner.info\n" -"POT-Creation-Date: 2009-01-20 23:13+0100\n" -"PO-Revision-Date: 2012-05-18 16:12+0200\n" -"Last-Translator: Jan Dittberner \n" -"Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" - -#: ddportfolioservice/controllers/ddportfolio.py:42 -msgid "Overview" -msgstr "Überblick" - -#: ddportfolioservice/controllers/ddportfolio.py:43 -msgid "Debian Member's Package Overview" -msgstr "Paketübersicht des Debian-Mitglieds" - -#: ddportfolioservice/controllers/ddportfolio.py:44 -msgid "" -"Debian Member's Package Overview\n" -"... showing all email addresses" -msgstr "" -"Paketübersicht des Debian-Mitglieds\n" -"... mit allen E-Mailadressen" - -#: ddportfolioservice/controllers/ddportfolio.py:48 -msgid "Bugs" -msgstr "Fehler" - -#: ddportfolioservice/controllers/ddportfolio.py:49 -msgid "" -"bugs received\n" -"(note: co-maintainers not listed, see #430986)" -msgstr "" -"Erhaltene Fehlerberichte\n" -"(Anmerkung: Co-Maintainer werden nicht aufgeführt, siehe #430986)" - -#: ddportfolioservice/controllers/ddportfolio.py:53 -msgid "bugs reported" -msgstr "Berichtete Fehler" - -#: ddportfolioservice/controllers/ddportfolio.py:54 -msgid "user tags" -msgstr "User Tags" - -#: ddportfolioservice/controllers/ddportfolio.py:55 -msgid "all messages (i.e., full text search for developer name on all bug logs)" -msgstr "" -"Alle Nachrichten (d.h. Volltextsuche nach dem Entwicklernamen in allen " -"Fehlerlogs)" - -#: ddportfolioservice/controllers/ddportfolio.py:57 -msgid "WNPP" -msgstr "WNPP" - -#: ddportfolioservice/controllers/ddportfolio.py:58 -msgid "correspondent for bugs" -msgstr "Beitragender zu Fehlern" - -#: ddportfolioservice/controllers/ddportfolio.py:59 -msgid "one year open bug history graph" -msgstr "Graph der Entwicklung offener Fehlerberichte über ein Jahr" - -#: ddportfolioservice/controllers/ddportfolio.py:62 -msgid "Build" -msgstr "Build" - -#: ddportfolioservice/controllers/ddportfolio.py:63 -msgid "buildd.d.o" -msgstr "buildd.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:64 -msgid "igloo" -msgstr "Igloo" - -#: ddportfolioservice/controllers/ddportfolio.py:67 -msgid "Quality Assurance" -msgstr "Qualitätssicherung" - -#: ddportfolioservice/controllers/ddportfolio.py:68 -msgid "lintian reports" -msgstr "Lintian-Berichte" - -#: ddportfolioservice/controllers/ddportfolio.py:69 -msgid "full lintian reports (i.e. including \"info\"-level messages)" -msgstr "" -"vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe " -"\"info\")" - -#: ddportfolioservice/controllers/ddportfolio.py:71 -msgid "piuparts" -msgstr "piuparts" - -#: ddportfolioservice/controllers/ddportfolio.py:72 -msgid "Debian patch tracking system" -msgstr "Debian Nachverfolgungssystem für Patches" - -#: ddportfolioservice/controllers/ddportfolio.py:75 -msgid "Mailing Lists" -msgstr "Mailinglisten" - -#: ddportfolioservice/controllers/ddportfolio.py:76 -msgid "lists.d.o" -msgstr "lists.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:77 -msgid "lists.a.d.o" -msgstr "lists.a.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:78 -msgid "gmane" -msgstr "Gmane" - -#: ddportfolioservice/controllers/ddportfolio.py:81 -msgid "Files" -msgstr "Dateien" - -#: ddportfolioservice/controllers/ddportfolio.py:82 -msgid "people.d.o" -msgstr "people.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:83 -msgid "oldpeople" -msgstr "oldpeople" - -#: ddportfolioservice/controllers/ddportfolio.py:84 -#: ddportfolioservice/controllers/ddportfolio.py:91 -msgid "Alioth" -msgstr "Alioth" - -#: ddportfolioservice/controllers/ddportfolio.py:87 -msgid "Membership" -msgstr "Mitgliedschaft" - -#: ddportfolioservice/controllers/ddportfolio.py:88 -msgid "NM" -msgstr "NM" - -#: ddportfolioservice/controllers/ddportfolio.py:89 -msgid "DB information via finger" -msgstr "DB-Informationen per finger" - -#: ddportfolioservice/controllers/ddportfolio.py:90 -msgid "DB information via HTTP" -msgstr "DB-Informationen per HTTP" - -#: ddportfolioservice/controllers/ddportfolio.py:92 -msgid "Wiki" -msgstr "Wiki" - -#: ddportfolioservice/controllers/ddportfolio.py:93 -msgid "Forum" -msgstr "Forum" - -#: ddportfolioservice/controllers/ddportfolio.py:96 -msgid "Miscellaneous" -msgstr "Sonstiges" - -#: ddportfolioservice/controllers/ddportfolio.py:97 -msgid "debtags" -msgstr "debtags" - -#: ddportfolioservice/controllers/ddportfolio.py:98 -msgid "links" -msgstr "Links" - -#: ddportfolioservice/controllers/ddportfolio.py:99 -msgid "Debian website" -msgstr "Debian Webseite" - -#: ddportfolioservice/controllers/ddportfolio.py:100 -msgid "Debian search" -msgstr "Debian-Suche" - -#: ddportfolioservice/controllers/ddportfolio.py:101 -msgid "GPG public key via finger" -msgstr "öffentlicher GPG-Schlüssel per finger" - -#: ddportfolioservice/controllers/ddportfolio.py:102 -msgid "GPG public key via HTTP" -msgstr "öffentlicher GPG-Schlüssel per HTTP" - -#: ddportfolioservice/controllers/ddportfolio.py:103 -msgid "NM, AM participation" -msgstr "NM-, AM-Mitwirkung" - -#: ddportfolioservice/controllers/ddportfolio.py:106 -msgid "Information reachable via ssh (for Debian Members)" -msgstr "Per ssh erreichbare Informationen (für Debian Mitglieder)" - -#: ddportfolioservice/controllers/ddportfolio.py:107 -msgid "owned debian.net domains" -msgstr "Besitz von debian.net-Domains" - -#: ddportfolioservice/controllers/ddportfolio.py:108 -msgid "" -"MIA database" -" information" -msgstr "" -"Informationen in der MIA-Datenbank" - -#: ddportfolioservice/controllers/ddportfolio.py:110 -msgid "Group membership information" -msgstr "Information über Gruppenmitgliedschaften" - -#: ddportfolioservice/controllers/ddportfolio.py:113 -msgid "Ubuntu" -msgstr "Ubuntu" - -#: ddportfolioservice/controllers/ddportfolio.py:114 -msgid "Available patches from Ubuntu" -msgstr "Verfügbare Patches aus Ubuntu" - -#: ddportfolioservice/model/urlbuilder.py:40 -msgid "Email address" -msgstr "E-Mailadresse" - -#: ddportfolioservice/model/urlbuilder.py:41 -msgid "Name" -msgstr "Name" - -#: ddportfolioservice/model/urlbuilder.py:42 -msgid "GPG fingerprint" -msgstr "GPG-Fingerabdruck" - -#: ddportfolioservice/model/urlbuilder.py:43 -msgid "Debian user name" -msgstr "Debian-Benutzername" - -#: ddportfolioservice/model/urlbuilder.py:44 -msgid "Non Debian email address" -msgstr "Nicht-Debian-E-Mailadresse" - -#: ddportfolioservice/model/urlbuilder.py:45 -msgid "Alioth user name" -msgstr "Alioth-Benutzername" - -#: ddportfolioservice/model/urlbuilder.py:97 -#: ddportfolioservice/model/urlbuilder.py:101 -#, python-format -msgid "Missing input: %s" -msgstr "Fehlende Eingabe: %s" - -#: ddportfolioservice/templates/base.mako:26 -#: ddportfolioservice/templates/base.mako:34 -msgid "Debian Member Portfolio Service" -msgstr "Debian-Mitglieder-Portfolioservice" - -#: ddportfolioservice/templates/base.mako:32 -msgid "Debian Logo" -msgstr "Debian-Logo" - -#: ddportfolioservice/templates/base.mako:35 -msgid "" -"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " -"Debian Wiki. You can create a set of customized links leading to a " -"Debian Member's or package maintainer's information regarding Debian." -msgstr "" -"Dieser Dienst wurde durch Stefano Zacchirolis DDPortfolio-Seite im Debian " -"Wiki inspiriert. Mit dem Dienst können personalisierte Links zu " -"Informationen im Bezug auf Debian für Debian-Mitglieder und Paketbetreuer" -" erzeugt werden." - -#: ddportfolioservice/templates/base.mako:46 -msgid "AGPL - Free Software" -msgstr "AGPL - Freie Software" - -#: ddportfolioservice/templates/base.mako:48 -#, python-format -msgid "" -"The service is available under the terms of the GNU Affero General Public " -"License as published by the Free Software Foundation, either version " -"3 of the License, or (at your option) any later version. You can browse the" -" source code or clone it from %(cloneurl)s using git." -msgstr "" -"Dieser Dienst wird unter den Bedingungen der GNU Affero General Public " -"License, so wie sie von der Free Software Foundation veröffentlicht " -"ist, bereitgestellt. Sie können entweder Version 3 oder (auf Ihren Wunsch" -" hin) jede spätere Version der Lizenz verwenden. Sie können sich den " -"Quelltext ansehen oder mit git von" -" %(cloneurl)s " -"klonen." - -#: ddportfolioservice/templates/base.mako:49 -msgid "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner" -msgstr "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner" - -#: ddportfolioservice/templates/showform.mako:24 -msgid "Enter your personal information" -msgstr "Eingabe der persönlichen Informationen" - -#: ddportfolioservice/templates/showform.mako:30 -#: ddportfolioservice/templates/showurls.mako:28 -msgid "Debian Member Portfolio" -msgstr "Debian-Mitgliedererportfolio" - -#: ddportfolioservice/templates/showform.mako:36 -msgid "Email address:" -msgstr "E-Mailadresse:" - -#: ddportfolioservice/templates/showform.mako:47 -msgid "Show all form fields" -msgstr "Alle Formularfelder anzeigen" - -#: ddportfolioservice/templates/showform.mako:54 -msgid "Name:" -msgstr "Name:" - -#: ddportfolioservice/templates/showform.mako:64 -msgid "GPG fingerprint:" -msgstr "GPG-Fingerabdruck:" - -#: ddportfolioservice/templates/showform.mako:79 -msgid "Debian user name:" -msgstr "Debian-Benutzername:" - -#: ddportfolioservice/templates/showform.mako:94 -msgid "Non Debian email address:" -msgstr "Nicht-Debian-E-Mailadresse" - -#: ddportfolioservice/templates/showform.mako:109 -msgid "Alioth user name:" -msgstr "Alioth-Benutzername:" - -#: ddportfolioservice/templates/showform.mako:125 -msgid "Wiki user name:" -msgstr "Wiki-Benutzername:" - -#: ddportfolioservice/templates/showform.mako:140 -msgid "Forum user id:" -msgstr "Forumsbenutzernummer:" - -#: ddportfolioservice/templates/showform.mako:151 -msgid "Output format:" -msgstr "Ausgabeformat:" - -#: ddportfolioservice/templates/showform.mako:157 -msgid "HTML" -msgstr "HTML" - -#: ddportfolioservice/templates/showform.mako:159 -msgid "JSON" -msgstr "JSON" - -#: ddportfolioservice/templates/showform.mako:161 -msgid "Build Debian Member Portfolio URLs" -msgstr "Debian-Mitgliedsportfolio-URLs bauen" - -#: ddportfolioservice/templates/showurls.mako:24 -msgid "Your personal links" -msgstr "Ihre personalisierten Links" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "Usage" -msgstr "Verwendung" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "URL" -msgstr "URL" - -#: ddportfolioservice/templates/showurls.mako:41 -msgid "Error during URL creation:" -msgstr "Fehler bei der URL-Erzeugung:" - -#: ddportfolioservice/templates/showurls.mako:68 -msgid "Restart" -msgstr "Neu beginnen" - diff --git a/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.mo b/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.mo deleted file mode 100644 index 50b31c3..0000000 Binary files a/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.mo and /dev/null differ diff --git a/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.po b/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.po deleted file mode 100644 index ec79142..0000000 --- a/ddportfolioservice/i18n/fr/LC_MESSAGES/ddportfolioservice.po +++ /dev/null @@ -1,390 +0,0 @@ -# French translations for ddportfolioservice. -# This file is distributed under the same license as the ddportfolioservice -# project. -# -# Translators: -# Stéphane Aulery , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Debian Member Portfolio Service\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-03-26 17:56+0200\n" -"PO-Revision-Date: 2012-05-18 16:10+0200\n" -"Last-Translator: Stéphane Aulery \n" -"Language-Team: French " -"(http://www.transifex.net/projects/p/debportfolioservice/language/fr/)\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" - -#: ddportfolioservice/controllers/ddportfolio.py:42 -msgid "Overview" -msgstr "Vue d'ensemble" - -#: ddportfolioservice/controllers/ddportfolio.py:43 -msgid "Debian Member's Package Overview" -msgstr "Vue d'ensemble des paquets de membre Debian" - -#: ddportfolioservice/controllers/ddportfolio.py:44 -msgid "" -"Debian Member's Package Overview\n" -"... showing all email addresses" -msgstr "" -"Vue d'ensemble des paquets de membre Debian\n" -"... affichage de tous les courriels" - -#: ddportfolioservice/controllers/ddportfolio.py:48 -msgid "Bugs" -msgstr "Bogues" - -#: ddportfolioservice/controllers/ddportfolio.py:49 -msgid "" -"bugs received\n" -"(note: co-maintainers not listed, see #430986)" -msgstr "" -"bogues reçus\n" -"(note : co-responsables non listés, voir #430986)" - -#: ddportfolioservice/controllers/ddportfolio.py:53 -msgid "bugs reported" -msgstr "bogues reportés" - -#: ddportfolioservice/controllers/ddportfolio.py:54 -msgid "user tags" -msgstr "tags utilisateur" - -#: ddportfolioservice/controllers/ddportfolio.py:55 -msgid "all messages (i.e., full text search for developer name on all bug logs)" -msgstr "" -"tous les messages (c-à-d, recherche plein texte sur le nom du développeur" -" dans tous les journaux de bogues)" - -#: ddportfolioservice/controllers/ddportfolio.py:57 -msgid "WNPP" -msgstr "WNPP" - -#: ddportfolioservice/controllers/ddportfolio.py:58 -msgid "correspondent for bugs" -msgstr "correspondant pour les bogues" - -#: ddportfolioservice/controllers/ddportfolio.py:59 -msgid "one year open bug history graph" -msgstr "" -"Graphique de l'évolution des rapports de bogues ouverts depuis plus d'un " -"an" - -#: ddportfolioservice/controllers/ddportfolio.py:62 -msgid "Build" -msgstr "Build" - -#: ddportfolioservice/controllers/ddportfolio.py:63 -msgid "buildd.d.o" -msgstr "buildd.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:64 -msgid "igloo" -msgstr "igloo" - -#: ddportfolioservice/controllers/ddportfolio.py:67 -msgid "Quality Assurance" -msgstr "Assurance qualité" - -#: ddportfolioservice/controllers/ddportfolio.py:68 -msgid "lintian reports" -msgstr "rapports lintian" - -#: ddportfolioservice/controllers/ddportfolio.py:69 -msgid "full lintian reports (i.e. including \"info\"-level messages)" -msgstr "rapports lintian complets (c-à-d incluant les messages de niveau \"info\")" - -#: ddportfolioservice/controllers/ddportfolio.py:71 -msgid "piuparts" -msgstr "piuparts" - -#: ddportfolioservice/controllers/ddportfolio.py:72 -msgid "Debian patch tracking system" -msgstr "Système de suivi des patchs de Debian" - -#: ddportfolioservice/controllers/ddportfolio.py:75 -msgid "Mailing Lists" -msgstr "Listes de diffusion" - -#: ddportfolioservice/controllers/ddportfolio.py:76 -msgid "lists.d.o" -msgstr "lists.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:77 -msgid "lists.a.d.o" -msgstr "lists.a.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:78 -msgid "gmane" -msgstr "gmane" - -#: ddportfolioservice/controllers/ddportfolio.py:81 -msgid "Files" -msgstr "Fichiers" - -#: ddportfolioservice/controllers/ddportfolio.py:82 -msgid "people.d.o" -msgstr "people.d.o" - -#: ddportfolioservice/controllers/ddportfolio.py:83 -msgid "oldpeople" -msgstr "oldpeople" - -#: ddportfolioservice/controllers/ddportfolio.py:84 -#: ddportfolioservice/controllers/ddportfolio.py:91 -msgid "Alioth" -msgstr "Alioth" - -#: ddportfolioservice/controllers/ddportfolio.py:87 -msgid "Membership" -msgstr "Adhésion" - -#: ddportfolioservice/controllers/ddportfolio.py:88 -msgid "NM" -msgstr "NM" - -#: ddportfolioservice/controllers/ddportfolio.py:89 -msgid "DB information via finger" -msgstr "Informations sur les DB via finger" - -#: ddportfolioservice/controllers/ddportfolio.py:90 -msgid "DB information via HTTP" -msgstr "Informations sur les DB via HTTP" - -#: ddportfolioservice/controllers/ddportfolio.py:92 -msgid "Wiki" -msgstr "Wiki" - -#: ddportfolioservice/controllers/ddportfolio.py:93 -msgid "Forum" -msgstr "Forum" - -#: ddportfolioservice/controllers/ddportfolio.py:96 -msgid "Miscellaneous" -msgstr "Divers" - -#: ddportfolioservice/controllers/ddportfolio.py:97 -msgid "debtags" -msgstr "debtags" - -#: ddportfolioservice/controllers/ddportfolio.py:98 -msgid "links" -msgstr "liens" - -#: ddportfolioservice/controllers/ddportfolio.py:99 -msgid "Debian website" -msgstr "Debian site web" - -#: ddportfolioservice/controllers/ddportfolio.py:100 -msgid "Debian search" -msgstr "Debian recherche" - -#: ddportfolioservice/controllers/ddportfolio.py:101 -msgid "GPG public key via finger" -msgstr "Clef publique GPG via finger" - -#: ddportfolioservice/controllers/ddportfolio.py:102 -msgid "GPG public key via HTTP" -msgstr "Clef publique GPG via HTTP" - -#: ddportfolioservice/controllers/ddportfolio.py:103 -msgid "NM, AM participation" -msgstr "NM, AM participation" - -#: ddportfolioservice/controllers/ddportfolio.py:106 -msgid "Information reachable via ssh (for Debian Members)" -msgstr "Informations accéssibles via ssh (pour les membres de Debian)" - -#: ddportfolioservice/controllers/ddportfolio.py:107 -msgid "owned debian.net domains" -msgstr "propriété des domaines debian.net" - -#: ddportfolioservice/controllers/ddportfolio.py:108 -msgid "" -"MIA database" -" information" -msgstr "" -"Informations de la base de données MIA" - -#: ddportfolioservice/controllers/ddportfolio.py:110 -msgid "Group membership information" -msgstr "Information sur l'adhésion de qroupe" - -#: ddportfolioservice/controllers/ddportfolio.py:113 -msgid "Ubuntu" -msgstr "Ubuntu" - -#: ddportfolioservice/controllers/ddportfolio.py:114 -msgid "Available patches from Ubuntu" -msgstr "Patchs disponibles pour Ubuntu" - -#: ddportfolioservice/model/urlbuilder.py:40 -msgid "Email address" -msgstr "Courriel" - -#: ddportfolioservice/model/urlbuilder.py:41 -msgid "Name" -msgstr "Nom" - -#: ddportfolioservice/model/urlbuilder.py:42 -msgid "GPG fingerprint" -msgstr "Empreinte GPG" - -#: ddportfolioservice/model/urlbuilder.py:43 -msgid "Debian user name" -msgstr "Nom d'utilisateur Debian" - -#: ddportfolioservice/model/urlbuilder.py:44 -msgid "Non Debian email address" -msgstr "Courriel hors Debian" - -#: ddportfolioservice/model/urlbuilder.py:45 -msgid "Alioth user name" -msgstr "Nom d'utilisateur Alioth" - -#: ddportfolioservice/model/urlbuilder.py:97 -#: ddportfolioservice/model/urlbuilder.py:101 -#, python-format -msgid "Missing input: %s" -msgstr "Entrée manquante : %s" - -#: ddportfolioservice/templates/base.mako:26 -#: ddportfolioservice/templates/base.mako:34 -msgid "Debian Member Portfolio Service" -msgstr "Service de portefeuille des des membres de Debian" - -#: ddportfolioservice/templates/base.mako:32 -msgid "Debian Logo" -msgstr "Logo Debian" - -#: ddportfolioservice/templates/base.mako:35 -msgid "" -"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " -"Debian Wiki. You can create a set of customized links leading to a " -"Debian Member's or package maintainer's information regarding Debian." -msgstr "" -"Ce service a été inspiré par la page DDPortfolio du Wiki " -"Debian de Stefano Zacchiroli. Vous pouvez créer un ensemble " -"personnalisé de liens fournisseur des informations sur un membre de " -"Debian ou un mainteneur de paquet Debian." - -#: ddportfolioservice/templates/base.mako:46 -msgid "AGPL - Free Software" -msgstr "AGPL - Logiciel libre" - -#: ddportfolioservice/templates/base.mako:48 -#, python-format -msgid "" -"The service is available under the terms of the GNU Affero General Public " -"License as published by the Free Software Foundation, either version " -"3 of the License, or (at your option) any later version. You can browse the" -" source code or clone it from %(cloneurl)s using git." -msgstr "" -"Ce service est disponible sous les termes de la licence GNU Affero General Public " -"License telle que publiée par la Free Software Foundation, soit la " -"version 3 de la licence, ou (à votre choix) toute version ultérieure. " -"Vous pouvez parcourir le code source ou le cloner depuis %(cloneurl)s en " -"utilisant git." - -#: ddportfolioservice/templates/base.mako:49 -msgid "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner" -msgstr "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner" - -#: ddportfolioservice/templates/showform.mako:24 -msgid "Enter your personal information" -msgstr "Saisissez vos informations personnelles" - -#: ddportfolioservice/templates/showform.mako:30 -#: ddportfolioservice/templates/showurls.mako:28 -msgid "Debian Member Portfolio" -msgstr "Portefeuille de membre Debian" - -#: ddportfolioservice/templates/showform.mako:36 -msgid "Email address:" -msgstr "Courriel :" - -#: ddportfolioservice/templates/showform.mako:47 -msgid "Show all form fields" -msgstr "Afficher tous les champs du formulaire" - -#: ddportfolioservice/templates/showform.mako:54 -msgid "Name:" -msgstr "Nom :" - -#: ddportfolioservice/templates/showform.mako:64 -msgid "GPG fingerprint:" -msgstr "Empreinte GPG :" - -#: ddportfolioservice/templates/showform.mako:79 -msgid "Debian user name:" -msgstr "Nom d'utilisateur Debian :" - -#: ddportfolioservice/templates/showform.mako:94 -msgid "Non Debian email address:" -msgstr "Courriel hors Debian :" - -#: ddportfolioservice/templates/showform.mako:109 -msgid "Alioth user name:" -msgstr "Nom d'utilisateur Alioth :" - -#: ddportfolioservice/templates/showform.mako:125 -msgid "Wiki user name:" -msgstr "Nom d'utilisateur Wiki :" - -#: ddportfolioservice/templates/showform.mako:140 -msgid "Forum user id:" -msgstr "Numéro d'utilisateur du Forum :" - -#: ddportfolioservice/templates/showform.mako:151 -msgid "Output format:" -msgstr "Format de sortie :" - -#: ddportfolioservice/templates/showform.mako:157 -msgid "HTML" -msgstr "HTML" - -#: ddportfolioservice/templates/showform.mako:159 -msgid "JSON" -msgstr "JSON" - -#: ddportfolioservice/templates/showform.mako:161 -msgid "Build Debian Member Portfolio URLs" -msgstr "Construire les URLs des portefeuilles des membres de Debian" - -#: ddportfolioservice/templates/showurls.mako:24 -msgid "Your personal links" -msgstr "Vos liens personnels" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "Usage" -msgstr "Utilisation" - -#: ddportfolioservice/templates/showurls.mako:31 -msgid "URL" -msgstr "URL" - -#: ddportfolioservice/templates/showurls.mako:41 -msgid "Error during URL creation:" -msgstr "Erreur durant la création de l'URL :" - -#: ddportfolioservice/templates/showurls.mako:68 -msgid "Restart" -msgstr "Redémarrer" - diff --git a/ddportfolioservice/lib/__init__.py b/ddportfolioservice/lib/__init__.py deleted file mode 100644 index ac207b6..0000000 --- a/ddportfolioservice/lib/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service lib package -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/lib/app_globals.py b/ddportfolioservice/lib/app_globals.py deleted file mode 100644 index e39071d..0000000 --- a/ddportfolioservice/lib/app_globals.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service application Globals -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""The application's Globals object""" - -from beaker.cache import CacheManager -from beaker.util import parse_cache_config_options - - -class Globals(object): - """ - Globals acts as a container for objects available throughout the - life of the application - """ - - def __init__(self, config): - """ - One instance of Globals is created during application - initialization and is available during requests via the - 'app_globals' variable - """ - self.cache = CacheManager(**parse_cache_config_options(config)) diff --git a/ddportfolioservice/lib/base.py b/ddportfolioservice/lib/base.py deleted file mode 100644 index 4a93095..0000000 --- a/ddportfolioservice/lib/base.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service base controller -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""The base Controller API - -Provides the BaseController class for subclassing. -""" -from pylons import tmpl_context as c, request -from pylons.controllers import WSGIController -from pylons.i18n import add_fallback -from pylons.templating import render_mako as render - - -class BaseController(WSGIController): - - def __call__(self, environ, start_response): - """Invoke the Controller""" - # WSGIController.__call__ dispatches to the Controller method - # the request is routed to. This routing information is - # available in environ['pylons.routes_dict'] - # set language environment - for lang in request.languages: - try: - add_fallback(lang) - except: - pass - c.messages = {'errors': [], 'messages': []} - return WSGIController.__call__(self, environ, start_response) diff --git a/ddportfolioservice/lib/helpers.py b/ddportfolioservice/lib/helpers.py deleted file mode 100644 index 683686d..0000000 --- a/ddportfolioservice/lib/helpers.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service webhelpers -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Helper functions - -Consists of functions to typically be used within templates, but also -available to Controllers. This module is available to templates as 'h'. -""" -from webhelpers.html.builder import escape, literal -from webhelpers.html.tags import stylesheet_link, javascript_link, image, \ - form, text, radio, submit, end_form, link_to, checkbox -from webhelpers.text import truncate -from webhelpers.textile import textile -from pylons import url diff --git a/ddportfolioservice/model/__init__.py b/ddportfolioservice/model/__init__.py deleted file mode 100644 index f5029b6..0000000 --- a/ddportfolioservice/model/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service model package -# Copyright (c) 2009 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/model/dddatabuilder.py b/ddportfolioservice/model/dddatabuilder.py deleted file mode 100644 index 8d26d5a..0000000 --- a/ddportfolioservice/model/dddatabuilder.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service DD data builder -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""This file contains code to build a representation of a person based -on keyring data associated to a given email address.""" -import logging -from ddportfolioservice.model import keyfinder - -TYPE_NO = 0 -TYPE_DM = 1 -TYPE_DD = 2 - -log = logging.getLogger(__name__) - - -def build_data(email_address): - """Build a DD data structure from a given email address.""" - fields = dict([(field, func(str(email_address))) \ - for (field, func) in \ - [('gpgfp', keyfinder.getFingerprintByEmail), - ('name', keyfinder.getRealnameByEmail), - ('username', keyfinder.getLoginByEmail)]]) - fields['email'] = email_address - if fields['username'] and fields['gpgfp'] and fields['name']: - fields['type'] = TYPE_DD - elif fields['name'] and fields['gpgfp']: - fields['type'] = TYPE_DM - else: - fields['type'] = TYPE_NO - if fields['name']: - log.debug('generate wikihomepage from name') - fields['wikihomepage'] = "".join( - [part.capitalize() for part in fields['name'].split()]) - - return fields diff --git a/ddportfolioservice/model/ddportfolio.ini b/ddportfolioservice/model/ddportfolio.ini deleted file mode 100644 index b7df712..0000000 --- a/ddportfolioservice/model/ddportfolio.ini +++ /dev/null @@ -1,114 +0,0 @@ -# -# Configuration for DDPortfolio service -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -[DEFAULT] -keyring.dir=~/debian/keyring.debian.org/keyrings -urlbuilder.sections=overview,bugs,build,qa,lists,files,membership, - miscellaneous,ssh,ubuntu - -[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,usertags,searchall,wnpp,correspondent,graph -received.pattern=http://bugs.debian.org/%(email)s -reported.pattern=http://bugs.debian.org/from:%(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 -correspondent.pattern=http://bugs.debian.org/cgi-bin/pkgreport.cgi?correspondent=%(email)s -graph.pattern=http://qa.debian.org/data/bts/graphs/by-maint/%(email)s.png - -[build] -urls=buildd -buildd.pattern=https://buildd.debian.org/status/package.php?p=%(email)s&compact=compact&comaint=yes - -[qa] -urls=lintian,lintianfull,piuparts,patchtracker -lintian.pattern=http://lintian.debian.org/maintainer/%(email)s.html -lintianfull.pattern=http://lintian.debian.org/full/%(email)s.html -piuparts.pattern=http://piuparts.debian.org/sid/maintainer/%(firstchar)s/%(email)s.html -patchtracker.pattern=http://patch-tracker.debian.org/email/%(email)s - -[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.* -# debconf list search has a tricky URL format -# http://lists.debconf.org/lurker/search \ -# /20100510.202949.00000000@au:%(firstname)s,au:%(lastname)s.en.html -# /YYYYMMDD.HHmmss.hashcode@au:%(firstname)s,au:%(lastname)s.en.html -# maybe this could be implemented using some custom formatter function - -[files] -urls=people,alioth -people.pattern=http://people.debian.org/~%(username)s/ -people.optional=true -alioth.pattern=http://alioth.debian.org/~%(aliothusername)s/ -alioth.optional=true - -[membership] -urls=nm,dbfinger,db,alioth,wiki,forum -nm.pattern=https://nm.debian.org/public/nmstatus/%(username)s -dbfinger.pattern=finger %(username)s@db.debian.org -dbfinger.type=finger -dbfinger.optional=true -db.pattern=http://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search -db.optional=true -alioth.pattern=http://alioth.debian.org/users/%(aliothusername)s/ -alioth.optional=true -wiki.pattern=http://wiki.debian.org/%(wikihomepage)s -forum.pattern=http://forums.debian.net/memberlist.php?mode=viewprofile&u=%(forumsid)d -forum.optional=true - -[miscellaneous] -urls=debtags,links,website,search,gpgfinger,gpgweb -debtags.pattern=http://debtags.debian.net/reports/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 -website.pattern=http://www.google.com/search?q=site:www.debian.org+%(name)s -search.pattern=http://search.debian.org/?q=%%22%(name)s%%22 -gpgfinger.pattern=finger %(username)s/key@db.debian.org -gpgfinger.type=finger -gpgfinger.optional=true -gpgweb.pattern=http://db.debian.org/fetchkey.cgi?fingerprint=%(gpgfp)s -gpgweb.optional=true -nm.pattern=https://nm.debian.org/public/person/%(username)s - -[ssh] -# SSH functions -urls=owndndoms,miainfo,groupinfo -# owned *.debian.net domains -owndndoms.pattern=ssh master.debian.org ldapsearch -u -x -H ldap://db.debian.org -b dc=debian,dc=org uid=%(username)s dnsZoneEntry -owndndoms.type=ssh -owndndoms.optional=true -# MIA information -miainfo.pattern=ssh qa.debian.org /srv/qa.debian.org/mia/mia-query %(emailnoq)s -miainfo.type=ssh -# Group information -groupinfo.pattern=ssh master.debian.org id %(username)s -groupinfo.type=ssh -groupinfo.optional=true - -[ubuntu] -urls=ubuntudiff -ubuntudiff.pattern=http://ubuntudiff.debian.net/q/uploaders/%(email)s diff --git a/ddportfolioservice/model/form.py b/ddportfolioservice/model/form.py deleted file mode 100644 index fb9e2dc..0000000 --- a/ddportfolioservice/model/form.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service form handling model -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -import formencode - - -class DeveloperData(formencode.Schema): - """Validation schema for DeveloperData.""" - allow_extra_fields = True - filter_extra_fields = True - email = formencode.validators.Email(not_empty=True) - name = formencode.validators.String(not_empty=True) - gpgfp = formencode.All(formencode.validators.PlainText(), - formencode.validators.MinLength(32), - formencode.validators.MaxLength(40)) - username = formencode.validators.PlainText() - nonddemail = formencode.validators.Email() - aliothusername = formencode.validators.PlainText() - mode = formencode.validators.OneOf([u'json', u'html'], if_missing=u'html') - forumsid = formencode.validators.Int(if_missing=None) - wikihomepage = formencode.validators.String(if_missing=None) - - -class DDDataRequest(formencode.Schema): - """Validation schema for DDData request.""" - allow_extra_fields = True - filter_extra_fields = False - email = formencode.validators.Email(not_empty=True) diff --git a/ddportfolioservice/model/keyfinder.py b/ddportfolioservice/model/keyfinder.py deleted file mode 100644 index d857f4d..0000000 --- a/ddportfolioservice/model/keyfinder.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service key finder module -# Copyright (c) 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -""" -This module provides tools for finding PGP key information from a -given keyring. -""" -import logging -import time - -db = None -cachetimestamp = 0 - - -def _get_keyring_cache(): - global db, cachetimestamp - if db is None or (time.time() - cachetimestamp) > 86300: - import anydbm - import pkg_resources - import os.path - filename = pkg_resources.resource_filename(__name__, - 'keyringcache') - logging.debug('reading cache data from %s', filename) - assert os.path.exists(filename) and os.path.isfile(filename) - db = anydbm.open(filename, 'r') - cachetimestamp = time.time() - return db - - -def _get_cached(cachekey): - cache = _get_keyring_cache() - logging.debug('cache lookup for %s', cachekey) - if cachekey in cache: - logging.debug('found entry %s', cache[cachekey]) - return cache[cachekey] - return None - - -def getFingerprintByEmail(email): - """ - Gets the fingerprints associated with the given email address if - available. - """ - return _get_cached('fpr:email:%s' % email) - - -def getRealnameByEmail(email): - """ - Gets the real names associated with the given email address if - available. - """ - return _get_cached('name:email:%s' % email) - - -def getLoginByEmail(email): - """ - Gets the logins associated with the given email address if - available. - """ - return _get_cached('login:email:%s' % email) - - -def getLoginByFingerprint(fpr): - """ - Gets the login associated with the given fingerprint if available. - """ - return _get_cached('login:fpr:%s' % fpr) diff --git a/ddportfolioservice/model/keyringanalyzer.py b/ddportfolioservice/model/keyringanalyzer.py deleted file mode 100644 index cc501c6..0000000 --- a/ddportfolioservice/model/keyringanalyzer.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service application key ring analyzer tool -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -""" -This is a tool that analyzes GPG and PGP keyrings and stores the -retrieved data in a file database. The tool was inspired by Debian -qa's carnivore. -""" - -import anydbm -import pkg_resources -import glob -import ConfigParser -import os -import os.path -import logging -import subprocess -import sys - - -def _get_keyrings(): - """ - Gets the available keyring files from the keyring directory - configured in ddportfolio.ini. - """ - my_config = ConfigParser.ConfigParser() - my_config.readfp(pkg_resources.resource_stream( - __name__, 'ddportfolio.ini')) - keyringdir = os.path.expanduser(my_config.get('DEFAULT', 'keyring.dir')) - logging.debug("keyring dir is %s", keyringdir) - keyrings = glob.glob(os.path.join(keyringdir, '*.gpg')) - keyrings.extend(glob.glob(os.path.join(keyringdir, '*.pgp'))) - keyrings.sort() - return keyrings - - -def _parse_uid(uid): - """ - Parse a uid of the form 'Real Name ' into email - and realname parts. - """ - uid = uid.strip() - # First, strip comment - s = uid.find('(') - e = uid.find(')') - if s >= 0 and e >= 0: - uid = uid[:s] + uid[e + 1:] - s = uid.find('<') - e = uid.find('>') - email = None - if s >= 0 and e >= 0: - email = uid[s + 1:e] - uid = uid[:s] + uid[e + 1:] - uid = uid.strip() - if not email and uid.find('@') >= 0: - email, uid = uid, email - return (uid, email) - -resultdict = {} - - -def _get_canonical(key): - if not key in resultdict: - resultdict[key] = [] - return key - - -def _add_to_result(key, newvalue): - thekey = _get_canonical(key) - if newvalue not in resultdict[thekey]: - resultdict[thekey].append(newvalue) - - -def process_keyrings(): - """Process the keyrings and store the extracted data in an anydbm - file.""" - for keyring in _get_keyrings(): - logging.debug("get data from %s", keyring) - proc = subprocess.Popen(["gpg", "--no-default-keyring", - "--no-expensive-trust-checks", - "--keyring", keyring, "--list-keys", - "--with-colons", "--fingerprint"], - stdout=subprocess.PIPE) - fpr = None - entry = None - lastpub = None - for line in proc.stdout.readlines(): - items = line.split(':') - uid = None - if items[0] == 'pub': - fpr = entry = None - lastpub = items[9].strip() - continue - elif items[0] == 'fpr': - fpr = items[9].strip() - uid = lastpub - elif items[0] == 'uid': - uid = items[9].strip() - else: - continue - # Do stuff with 'uid' - uid, email = _parse_uid(uid) - if email: - if email.endswith('@debian.org'): - login = email[0:-len('@debian.org')] - _add_to_result('login:email:%s' % email, login) - _add_to_result('login:fpr:%s' % fpr, login) - _add_to_result('fpr:login:%s' % login, fpr) - _add_to_result('fpr:email:%s' % email, fpr) - _add_to_result('email:fpr:%s' % fpr, email) - if uid: - _add_to_result('name:fpr:%s' % fpr, uid) - if email: - _add_to_result('name:email:%s' % email, uid) - retcode = proc.wait() - if retcode != 0: - logging.error("subprocess ended with return code %d", retcode) - db = anydbm.open(pkg_resources.resource_filename(__name__, - 'keyringcache'), 'c') - for key in resultdict: - db[key] = ":".join(resultdict[key]) - db.close() - - -if __name__ == '__main__': - logging.basicConfig(stream=sys.stderr, level=logging.WARNING) - process_keyrings() diff --git a/ddportfolioservice/model/urlbuilder.py b/ddportfolioservice/model/urlbuilder.py deleted file mode 100644 index 966ebed..0000000 --- a/ddportfolioservice/model/urlbuilder.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- python -*- -# -*- coding: utf8 -*- -# -# DDPortfolio service url builder -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -""" -This module provides the function build_urls to build personalized -URLs using the given information and the URL patterns defined in -ddportfolio.ini. -""" - -from ConfigParser import ConfigParser, InterpolationMissingOptionError -import pkg_resources -from ddportfolioservice.model import keyfinder -from urllib import quote_plus -from pylons.i18n.translation import _, N_ - - -my_config = ConfigParser() -my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) - -_FIELDNAMES_MAP = { - 'email': N_('Email address'), - 'name': N_('Name'), - 'gpgfp': N_('GPG fingerprint'), - 'username': N_('Debian user name'), - 'nonddemail': N_('Non Debian email address'), - 'aliothusername': N_('Alioth user name'), - } - - -class DDPortfolioEntry(object): - def __init__(self, config, section, key): - self.name = key - self.optional = config.has_option(section, key + '.optional') and \ - config.getboolean(section, key + '.optional') or False - if config.has_option(section, key + '.type'): - self.type = config.get(section, key + '.type') - else: - self.type = 'url' - - -def build_urls(fields): - """Build personalized URLs using the developer information in - fields.""" - data = [] - qfields = {} - for key, value in fields.iteritems(): - if value is not None: - if isinstance(value, unicode): - qfields[key] = quote_plus(value.encode('utf8')) - elif isinstance(value, str): - qfields[key] = quote_plus(value) - else: - qfields[key] = value - - if 'gpgfp' not in qfields: - fpr = keyfinder.getFingerprintByEmail(fields['email'].encode('utf8')) - if fpr: - qfields['gpgfp'] = fpr[0] - qfields['firstchar'] = fields['email'][0].encode('utf8') - qfields['emailnoq'] = fields['email'].encode('utf8') - for section in [section.strip() for section in \ - my_config.get('DEFAULT', - 'urlbuilder.sections').split(',')]: - data.append(['section', section]) - if my_config.has_option(section, 'urls'): - for entry in ([ - DDPortfolioEntry(my_config, section, url) for url in \ - my_config.get(section, 'urls').split(',')]): - try: - data.append( - ['url', section, entry, - my_config.get(section, entry.name + '.pattern', - False, qfields)]) - except InterpolationMissingOptionError, e: - if not entry.optional: - if e.reference in _FIELDNAMES_MAP: - data.append(['error', section, entry, - _('Missing input: %s') % \ - _(_FIELDNAMES_MAP[e.reference])]) - else: - data.append(['error', section, entry, - _('Missing input: %s') % e.reference]) - return data diff --git a/ddportfolioservice/templates/base.mako b/ddportfolioservice/templates/base.mako deleted file mode 100644 index f9f9293..0000000 --- a/ddportfolioservice/templates/base.mako +++ /dev/null @@ -1,53 +0,0 @@ -## -*- coding: utf-8 -*- \ - -<%doc> -Base template for XHTML templates. -Copyright © 2009, 2010 Jan Dittberner - -This file is part of DDPortfolio service. - -DDPortfolio service is free software: you can redistribute it and/or -modify it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -DDPortfolio service is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public -License along with this program. If not, see -. - - - - ${_('Debian Member Portfolio Service')}${self.titleaddon()} - ${h.stylesheet_link(h.url('/stylesheets/style.css'))} - ${self.extrahead()} - - - -
- ${self.body()} -
- - - -<%def name="extrahead()"> diff --git a/ddportfolioservice/templates/showform.mako b/ddportfolioservice/templates/showform.mako deleted file mode 100644 index 6ee353a..0000000 --- a/ddportfolioservice/templates/showform.mako +++ /dev/null @@ -1,164 +0,0 @@ -## -- coding: utf-8 -- \ -<%inherit file="base.mako" /> -<%doc> -Template for the data input form. -Copyright © 2009, 2010 Jan Dittberner - -This file is part of DDPortfolio service. - -DDPortfolio service is free software: you can redistribute it and/or -modify it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -DDPortfolio service is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public -License along with this program. If not, see -. - -<%def name="titleaddon()"> - - ${_('Enter your personal information')} - -<%def name="extrahead()">${h.javascript_link('/javascript/jquery/jquery.js', -h.url(controller='showformscripts', action='index'))} -${h.form(h.url(action='urllist', controller='ddportfolio'), method='get')} -
- ${_('Debian Member Portfolio')} -
-
- ${h.text('email', - h.escape(request.params.get('email', None), True), id='email')}
-
- -
-
- ${h.text('name', - h.escape(request.params.get('name', None)), id='name')}
-
-
-
- ${h.text('gpgfp', - h.escape(request.params.get('gpgfp', None)), - id='gpgfp')}
-
-
-
- ${h.text('username', - h.escape(request.params.get('username', None)), - id='username')}
-
-
-
- ${h.text('nonddemail', - h.escape(request.params.get('nonddemail', None)), - id='nonddemail')}
-
-
-
- ${h.text('aliothusername', - h.escape(request.params.get('username', None)), - id='aliothusername')}
-
-
-
- ${h.text('wikihomepage', - h.escape(request.params.get('wikihomepage', None)), - id='wikihomepage')}
-
-
-
- ${h.text('forumsid', - h.escape(request.params.get('forumsid', None)), - id='forumsid')}
-
-
-
- ${_('HTML')} ${h.radio('mode', 'html', - checked=(request.params.get('mode', - 'html') == 'html'))} ${_('JSON')} ${h.radio('mode', - 'json', checked=(request.params.get('mode', 'html') == 'json'))}
- ${h.submit('submit', value=_('Build Debian Member Portfolio URLs'))} -
-
-${h.end_form()} diff --git a/ddportfolioservice/templates/showformscript.mako b/ddportfolioservice/templates/showformscript.mako deleted file mode 100644 index feacc8b..0000000 --- a/ddportfolioservice/templates/showformscript.mako +++ /dev/null @@ -1,122 +0,0 @@ -## -*- coding: utf-8 -*- \ -<%doc> -Helper JavaScript for the data input form. -Copyright © 2009, 2010 Jan Dittberner - -This file is part of DDPortfolio service. - -DDPortfolio service is free software: you can redistribute it and/or -modify it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -DDPortfolio service is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public -License along with this program. If not, see -. -\ - -var defaulthiddendivs = new Array( - '#namefield', '#gpgfpfield', '#usernamefield', '#nonddemailfield', - '#aliothusernamefield', '#wikihomepagefield', '#forumsidfield'); -var maskedfielddivs = new Array( - '#namefield', '#gpgfpfield', '#usernamefield', '#nonddemailfield', - '#aliothusernamefield', '#wikihomepagefield', '#forumsidfield'); -var allfielddivs = new Array( - '#namefield', '#gpgfpfield', '#usernamefield', '#nonddemailfield', - '#aliothusernamefield', '#wikihomepagefield', '#forumsidfield'); - -function updateFields(data, textStatus) { - if (data.type == 2) { // DD - $('#name').attr('value', data.name).attr('readonly', 'readonly'); - $('#gpgfp').attr('value', data.gpgfp); - $('#username').attr('value', data.username).attr( - 'readonly', 'readonly'); - $('#nonddemail').attr('value', data.email).focus(); - $('#aliothusername').attr('value', data.username); - $('#wikihomepage').attr('value', data.wikihomepage); - - $('#namefield').show(); - $('#gpgfpfield').show(); - $('#usernamefield').show(); - $('#nonddemailfield').show(); - $('#aliothusernamefield').show(); - $('#wikihomepagefield').show(); - $('#forumsidfield').show(); - - $('#nonddemail').focus().select(); - } else if (data.type == 1) { // DM - $('#name').attr('value', data.name).attr('readonly', 'readonly'); - $('#gpgfp').attr('value', data.gpgfp); - $('#username').attr('value', ''); - $('#nonddemail').attr('value', data.email).focus(); - $('#wikihomepage').attr('value', data.wikihomepage); - - $('#namefield').show(); - $('#gpgfpfield').show(); - $('#usernamefield').hide(); - $('#nonddemailfield').hide(); - $('#aliothusernamefield').show(); - $('#wikihomepagefield').show(); - $('#forumsidfield').show(); - - $('#aliothusername').focus().select(); - } else { - $('#nonddemail').attr('value', data.email); - $('#name').removeAttr('readonly'); - $('#username').removeAttr('readonly').attr('value', ''); - $('#gpgfp').attr('value', ''); - - $('#usernamefield').hide(); - $('#gpgfpfield').hide(); - $('#nonddemailfield').hide(); - $('#namefield').show(); - $('#aliothusernamefield').show(); - $('#wikihomepagefield').show(); - $('#forumsidfield').show(); - - $('#name').focus().select(); - } -} - -function onChangeShowAll(event) { - if ($('#showall').attr('checked')) { - for (var fielddiv in allfielddivs) { - $(allfielddivs[fielddiv]).show(); - } - } else { - for (var fielddiv in maskedfielddivs) { - $(maskedfielddivs[fielddiv]).hide(); - } - } -} - -function onBlurEmail() { - if ($.trim($('#email').attr('value')).length > 0) { - $.ajax({ - 'url' : '${h.url(controller="showformscripts", action="fetchdddata")}', - 'data' : {'email' : $('#email').attr('value')}, - 'dataType' : 'json', - 'success' : updateFields, - 'error' : function(request, textStatus, errorThrown) { - $('#email').focus(); - } - }); - } -} - -$(document).ready(function() { - for (var index in defaulthiddendivs) { - if (!$(defaulthiddendivs[index]).hasClass('witherrors')) { - $(defaulthiddendivs[index]).hide(); - } - } - - $('#showall').attr('checked', false).change(onChangeShowAll); - $('#showallfield').show(); - $('#email').blur(onBlurEmail).focus(); -}); diff --git a/ddportfolioservice/templates/showurls.mako b/ddportfolioservice/templates/showurls.mako deleted file mode 100644 index 2aea190..0000000 --- a/ddportfolioservice/templates/showurls.mako +++ /dev/null @@ -1,68 +0,0 @@ -## -*- coding: utf-8 -*- -<%inherit file="base.mako" />\ -<%doc> -Template for the url output page. -Copyright © 2009, 2010 Jan Dittberner - -This file is part of DDPortfolio service. - -DDPortfolio service is free software: you can redistribute it and/or -modify it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -DDPortfolio service is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public -License along with this program. If not, see -. -\ -<%def name="titleaddon()"> - - ${_('Your personal links')} - -% if c.urldata: -
- ${_('Debian Member Portfolio')} - - - - - - % for row in c.urldata: - % if row[0] == 'section': - - <% urlclass = 'odd' %> - % elif row[0] == 'error': - - - - - % else: - - - - - <% - if urlclass == 'odd': - urlclass = 'even' - else: - urlclass = 'odd' - %> - % endif - % endfor - -
${_('Usage')}${_('URL')}
${h.literal(h.textile(row[4]))}${_('Error during URL creation:')} - ${row[3].replace("\n", - '
')}
${h.literal(h.textile(row[4]))} - % if row[2].type == 'url': - ${h.link_to(h.truncate(row[3], length=120), row[3])} - % else: - ${row[3]} - % endif -
-
-% endif -

${h.link_to(_('Restart'), h.url(controller='ddportfolio', action='index'))}

diff --git a/ddportfolioservice/tests/__init__.py b/ddportfolioservice/tests/__init__.py deleted file mode 100644 index 0e1d22f..0000000 --- a/ddportfolioservice/tests/__init__.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service tests package -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Pylons application test package - -When the test runner finds and executes tests within this directory, -this file will be loaded to setup the test environment. - -It registers the root directory of the project in sys.path and -pkg_resources, in case the project hasn't been installed with -setuptools. It also initializes the application via websetup (paster -setup-app) with the project's test.ini configuration file. -""" -import os -import sys -from unittest import TestCase - -from paste.deploy import loadapp -from paste.script.appinstall import SetupCommand -from pylons import url -from routes.util import URLGenerator -from webtest import TestApp - -import pylons.test - -__all__ = ['environ', 'url', 'TestController'] - -# Invoke websetup with the current config file -SetupCommand('setup-app').run([pylons.test.pylonsapp.config['__file__']]) - -environ = {} - - -class TestController(TestCase): - - def __init__(self, *args, **kwargs): - wsgiapp = pylons.test.pylonsapp - config = wsgiapp.config - self.app = TestApp(wsgiapp) - url._push_object(URLGenerator(config['routes.map'], environ)) - TestCase.__init__(self, *args, **kwargs) diff --git a/ddportfolioservice/tests/functional/__init__.py b/ddportfolioservice/tests/functional/__init__.py deleted file mode 100644 index 528ca53..0000000 --- a/ddportfolioservice/tests/functional/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service functional tests package -# Copyright (c) 2009 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/tests/functional/test_ddportfolio.py b/ddportfolioservice/tests/functional/test_ddportfolio.py deleted file mode 100644 index 2a8a6ed..0000000 --- a/ddportfolioservice/tests/functional/test_ddportfolio.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service DdportfolioController test -# Copyright © 2009, 2010 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -from ddportfolioservice.tests import TestController, url - - -class TestDdportfolioController(TestController): - - def test_index(self): - response = self.app.get(url(controller='ddportfolio', action='index')) - # Test response... diff --git a/ddportfolioservice/tests/functional/test_showformscripts.py b/ddportfolioservice/tests/functional/test_showformscripts.py deleted file mode 100644 index b8b3347..0000000 --- a/ddportfolioservice/tests/functional/test_showformscripts.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service DdportfolioController test -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -from ddportfolioservice.tests import TestController, url - - -class TestShowformscriptsController(TestController): - - def test_index(self): - response = self.app.get( - url(controller='showformscripts', action='index')) - # Test response... diff --git a/ddportfolioservice/tests/test_models.py b/ddportfolioservice/tests/test_models.py deleted file mode 100644 index 1bd689b..0000000 --- a/ddportfolioservice/tests/test_models.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service model tests -# Copyright (c) 2009 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# diff --git a/ddportfolioservice/websetup.py b/ddportfolioservice/websetup.py deleted file mode 100644 index 355544e..0000000 --- a/ddportfolioservice/websetup.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service websetup -# Copyright (c) 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -"""Setup the ddportfolioservice application""" -import logging - -from paste.deploy import appconfig -from pylons import config -import pylons.test - -from ddportfolioservice.config.environment import load_environment - -log = logging.getLogger(__name__) - - -def setup_config(command, filename, section, vars): - """Place any commands to setup ddportfolioservice here""" - conf = appconfig('config:' + filename) - - if not pylons.test.pylonsapp: - load_environment(conf.global_conf, conf.local_conf) diff --git a/debianmemberportfolio/__init__.py b/debianmemberportfolio/__init__.py new file mode 100644 index 0000000..1667908 --- /dev/null +++ b/debianmemberportfolio/__init__.py @@ -0,0 +1,31 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service package +# +# Copyright © 2009-2015 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +from flask import Flask +from flask_babel import Babel + +app = Flask(__name__) +babel = Babel(app) +app.config.from_object('config') + +from debianmemberportfolio import views diff --git a/debianmemberportfolio/forms.py b/debianmemberportfolio/forms.py new file mode 100644 index 0000000..fc3d132 --- /dev/null +++ b/debianmemberportfolio/forms.py @@ -0,0 +1,73 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service views +# +# Copyright © 2015-2022 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +from __future__ import unicode_literals + +from flask_babel import gettext as _ +from flask_wtf import FlaskForm +from wtforms import IntegerField, StringField, RadioField +from wtforms.validators import ( + AnyOf, DataRequired, Email, Length, Optional, Regexp +) +from string import hexdigits + + +class FingerPrint(Regexp): + def __init__(self, **kwargs): + super(FingerPrint, self).__init__(r'^[a-fA-F0-9]*$', **kwargs) + + +class PlainText(Regexp): + def __init__(self): + super(PlainText, self).__init__(r'^[a-zA-Z\-0-9]*$') + + +def gpg_fingerprint(data): + if data is not None: + return "".join([ + char for char in str(data) if char.lower() in hexdigits]) + return data + + +class DeveloperData(FlaskForm): + email = StringField('email', validators=[DataRequired(), Email()]) + name = StringField('name', validators=[Optional(), DataRequired()]) + openpgpfp = StringField('openpgpfp', filters=[gpg_fingerprint], validators=[ + Optional(), FingerPrint(), Length(min=32, max=40) + ]) + username = StringField('username', validators=[Optional(), PlainText()]) + nonddemail = StringField('nonddemail', validators=[Optional(), Email()]) + salsausername = StringField('salsausername', validators=[ + Optional(), PlainText() + ]) + mode = RadioField( + 'mode', default='html', choices=[ + ('json', _('JSON')), ('html', _('HTML')) + ], validators=[AnyOf(['json', 'html'])] + ) + forumsid = IntegerField('forumsid', default=None, validators=[Optional()]) + wikihomepage = StringField('wikihomepage', default=None, validators=[ + Optional()]) + + +class DeveloperDataRequest(FlaskForm): + email = StringField('email', validators=[DataRequired(), Email()]) diff --git a/ddportfolioservice/model/.gitignore b/debianmemberportfolio/model/.gitignore similarity index 100% rename from ddportfolioservice/model/.gitignore rename to debianmemberportfolio/model/.gitignore diff --git a/debianmemberportfolio/model/__init__.py b/debianmemberportfolio/model/__init__.py new file mode 100644 index 0000000..3f73c88 --- /dev/null +++ b/debianmemberportfolio/model/__init__.py @@ -0,0 +1,26 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service model package +# +# Copyright © 2009-2014 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +Model classes and model related utilities for the Debian Member Portfolio +service. +""" diff --git a/debianmemberportfolio/model/dddatabuilder.py b/debianmemberportfolio/model/dddatabuilder.py new file mode 100644 index 0000000..1fa5be1 --- /dev/null +++ b/debianmemberportfolio/model/dddatabuilder.py @@ -0,0 +1,57 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service data builder +# +# Copyright © 2009-2022 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +This file contains code to build a representation of a person based on keyring +data associated to a given email address. +""" + +import logging +from debianmemberportfolio.model import keyfinder + +TYPE_NO = 0 +TYPE_DM = 1 +TYPE_DD = 2 + +log = logging.getLogger(__name__) + + +def build_data(email_address): + """Build a DD data structure from a given email address.""" + fields = dict([(field, func(str(email_address))) + for (field, func) in + [('openpgpfp', keyfinder.getFingerprintByEmail), + ('name', keyfinder.getRealnameByEmail), + ('username', keyfinder.getLoginByEmail)]]) + fields['email'] = email_address + if fields['username'] and fields['openpgpfp'] and fields['name']: + fields['type'] = TYPE_DD + elif fields['name'] and fields['openpgpfp']: + fields['type'] = TYPE_DM + else: + fields['type'] = TYPE_NO + if fields['name']: + log.debug('generate wikihomepage from name') + fields['wikihomepage'] = "".join( + [part.capitalize() for part in fields['name'].split()]) + + return fields diff --git a/debianmemberportfolio/model/keyfinder.py b/debianmemberportfolio/model/keyfinder.py new file mode 100644 index 0000000..044648a --- /dev/null +++ b/debianmemberportfolio/model/keyfinder.py @@ -0,0 +1,111 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service key finder module +# +# Copyright © 2009-2023 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +This module provides tools for finding OpenPGP key information from a +given keyring. +""" + +import logging +import sys +import time +from importlib import resources + +db = None +cache_timestamp = 0 + + +def _get_keyring_cache(): + global db, cache_timestamp + if db is None or (time.time() - cache_timestamp) > 86300: + import dbm + import os.path + + dbm_filename = str(resources.files(__package__).joinpath("keyringcache.db")) + logging.debug("reading cache data from %s", dbm_filename) + assert os.path.exists(dbm_filename) and os.path.isfile(dbm_filename) + db = dbm.open(dbm_filename[: -len(".db")], "r") + cache_timestamp = time.time() + return db + + +def _get_cached(cachekey): + cache = _get_keyring_cache() + logging.debug("cache lookup for %s", cachekey) + if cachekey in cache: + logging.debug("found entry %s", cache[cachekey]) + return cache[cachekey].decode("utf8") + return None + + +def getFingerprintByEmail(email): + """ + Gets the fingerprints associated with the given email address if + available. + """ + return _get_cached("fpr:email:%s" % email) + + +def getRealnameByEmail(email): + """ + Gets the real names associated with the given email address if + available. + """ + return _get_cached("name:email:%s" % email) + + +def getLoginByEmail(email): + """ + Gets the logins associated with the given email address if + available. + """ + return _get_cached("login:email:%s" % email) + + +def getLoginByFingerprint(fpr): + """ + Gets the login associated with the given fingerprint if available. + """ + return _get_cached("login:fpr:%s" % fpr) + + +def _dump_cache(): + cache = _get_keyring_cache() + fprs = [] + for key in [key.decode("utf8") for key in list(cache.keys())]: + if key.startswith("email:fpr:"): + fpr = key.replace("email:fpr:", "") + if not fpr in fprs: + fprs.append(fpr) + + for fpr in fprs: + login = getLoginByFingerprint(fpr) + email = _get_cached("email:fpr:%s" % fpr) + name = _get_cached("name:fpr:%s" % fpr) + + print(fpr, login, ":") + print(" ", name, email) + + +if __name__ == "__main__": + logging.basicConfig(stream=sys.stderr, level=logging.WARNING) + _dump_cache() diff --git a/debianmemberportfolio/model/keyringanalyzer.py b/debianmemberportfolio/model/keyringanalyzer.py new file mode 100644 index 0000000..0a007b8 --- /dev/null +++ b/debianmemberportfolio/model/keyringanalyzer.py @@ -0,0 +1,199 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service application key ring analyzer tool +# +# Copyright © 2009-2023 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +This is a tool that analyzes GPG and PGP key rings and stores the +retrieved data in a file database. The tool was inspired by Debian +qa's carnivore. +""" + +import configparser +import dbm +import email.utils +import glob +import logging +import os +import os.path +import subprocess +import sys +from importlib import resources + +CONFIG = configparser.ConfigParser() + + +def _get_keyrings(): + """ + Gets the available keyring files from the keyring directory + configured in portfolio.ini. + """ + keyring_dir = os.path.expanduser(CONFIG.get("DEFAULT", "keyring.dir")) + logging.debug("keyring dir is %s", keyring_dir) + keyrings = glob.glob(os.path.join(keyring_dir, "*.gpg")) + keyrings.extend(glob.glob(os.path.join(keyring_dir, "*.pgp"))) + keyrings.sort() + return keyrings + + +def _parse_uid(uid): + """ + Parse an uid of the form 'Real Name ' into email + and real name parts. + """ + + # First try with the Python library, but it doesn't always catch everything + (name, mail) = email.utils.parseaddr(uid) + if (not name) and (not mail): + logging.warning("malformed uid %s", uid) + if (not name) or (not mail): + logging.debug("strange uid %s: '%s' - <%s>", uid, name, mail) + # Try and do better than the python library + if "@" not in mail: + uid = uid.strip() + # First, strip comment + s = uid.find("(") + e = uid.find(")") + if s >= 0 and e >= 0: + uid = uid[:s] + uid[e + 1 :] + s = uid.find("<") + e = uid.find(">") + mail = None + if s >= 0 and e >= 0: + mail = uid[s + 1 : e] + uid = uid[:s] + uid[e + 1 :] + uid = uid.strip() + if not mail and uid.find("@") >= 0: + mail, uid = uid, mail + + name = uid + logging.debug("corrected: '%s' - <%s>", name, mail) + return name, mail + + +result_dict = {} + + +def _get_canonical(key): + if key not in result_dict: + result_dict[key] = [] + return key + + +def _add_to_result(key, new_value): + logging.debug("adding %s: %s", key, new_value) + the_key = _get_canonical(key) + if new_value not in result_dict[the_key]: + result_dict[the_key].append(new_value) + + +def _handle_mail(mail, fpr): + if mail.endswith("@debian.org"): + login = mail[0 : -len("@debian.org")] + _add_to_result("login:email:%s" % mail, login) + _add_to_result("login:fpr:%s" % fpr, login) + _add_to_result("fpr:login:%s" % login, fpr) + _add_to_result("fpr:email:%s" % mail, fpr) + _add_to_result("email:fpr:%s" % fpr, mail) + + +def _handle_uid(uid, fpr): + mail = None + # Do stuff with 'uid' + if uid: + (uid, mail) = _parse_uid(uid) + if mail: + _handle_mail(mail, fpr) + if uid: + _add_to_result("name:fpr:%s" % fpr, uid) + if mail: + _add_to_result("name:email:%s" % mail, uid) + return fpr + + +def process_gpg_list_keys_line(line, fpr): + """ + Process a line of gpg --list-keys --with-colon output. + """ + items = line.split(":") + if items[0] == "pub": + return None + if items[0] == "fpr": + return items[9].strip() + if items[0] == "uid": + if items[1] == "r": + return fpr + return _handle_uid(items[9].strip(), fpr) + else: + return fpr + + +def process_keyrings(): + """Process the keyrings and store the extracted data in an anydbm file.""" + for keyring in _get_keyrings(): + logging.debug("get data from %s", keyring) + proc = subprocess.Popen( + [ + "gpg", + "--no-options", + "--no-default-keyring", + "--homedir", + os.path.expanduser(CONFIG.get("DEFAULT", "gnupghome")), + "--no-expensive-trust-checks", + "--keyring", + keyring, + "--list-keys", + "--with-colons", + "--fixed-list-mode", + "--with-fingerprint", + "--with-fingerprint", + ], + stdout=subprocess.PIPE, + ) + fpr = None + for line in proc.stdout.readlines(): + try: + line = line.decode("utf8") + except UnicodeDecodeError: + line = line.decode("iso8859-1") + fpr = process_gpg_list_keys_line(line, fpr) + ret_code = proc.wait() + if ret_code != 0: + logging.error("subprocess ended with return code %d", ret_code) + dbm_filename = str( + resources.files("debianmemberportfolio.model").joinpath("keyringcache") + ) + db = dbm.open(dbm_filename, "c") + for key in result_dict: + db[key] = ":".join(result_dict[key]) + db.close() + + +if __name__ == "__main__": + logging.basicConfig(stream=sys.stderr, level=logging.WARNING) + CONFIG.read_string( + resources.files("debianmemberportfolio.model") + .joinpath("portfolio.ini") + .read_text("utf8") + ) + gpg_home = os.path.expanduser(CONFIG.get("DEFAULT", "gnupghome")) + if not os.path.isdir(gpg_home): + os.makedirs(gpg_home, 0o700) + process_keyrings() diff --git a/debianmemberportfolio/model/portfolio.ini b/debianmemberportfolio/model/portfolio.ini new file mode 100644 index 0000000..6baedad --- /dev/null +++ b/debianmemberportfolio/model/portfolio.ini @@ -0,0 +1,124 @@ +# +# Configuration for Debian Member Portfolio Service +# +# Copyright © 2009-2022 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +[DEFAULT] +gnupghome=~/debian/gnupghome +keyring.dir=~/debian/keyring.debian.org/keyrings +urlbuilder.sections=overview,bugs,build,qa,lists,files,membership, + miscellaneous,ssh,ubuntu + +[overview] +urls=ddpo,alladdresses +ddpo.pattern=https://qa.debian.org/developer.php?login=%(email)s +alladdresses.pattern=https://qa.debian.org/developer.php?login=%(name)s + +[bugs] +urls=received,reported,usertags,searchall,wnpp,correspondent,graph +received.pattern=https://bugs.debian.org/%(email)s +reported.pattern=https://bugs.debian.org/from:%(email)s +usertags.pattern=https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=%(email)s +searchall.pattern=http://bugs-search.debian.org/cgi-bin/search.cgi?phrase=%(name)s;search=search +wnpp.pattern=https://qa.debian.org/developer.php?wnpp=%(email)s +correspondent.pattern=https://bugs.debian.org/cgi-bin/pkgreport.cgi?correspondent=%(email)s +graph.pattern=https://qa.debian.org/data/bts/graphs/by-maint/%(email)s.png + +[build] +urls=buildd +buildd.pattern=https://buildd.debian.org/status/package.php?p=%(email)s&compact=compact&comaint=yes + +[qa] +urls=lintian,lintianfull,piuparts,dmd,janitor +dmd.pattern=https://udd.debian.org/dmd.cgi?email1=%(email)s +lintian.pattern=https://lintian.debian.org/maintainer/%(email)s.html +lintianfull.pattern=https://lintian.debian.org/full/%(email)s.html +piuparts.pattern=https://piuparts.debian.org/sid/maintainer/%(firstchar)s/%(email)s.html +#patchtracker.pattern=http://patch-tracker.debian.org/email/%(email)s +#duck.pattern=http://duck.debian.net/persons/%(email)s.html +janitor.pattern=https://janitor.debian.net/m/%(email)s + +[lists] +urls=dolists,adolists +dolists.pattern=https://lists.debian.org/cgi-bin/search?P="%%22%(name)s%%22&SORT=0 +adolists.pattern=https://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22 +# debconf list search has a tricky URL format +# http://lists.debconf.org/lurker/search \ +# /20100510.202949.00000000@au:%(firstname)s,au:%(lastname)s.en.html +# /YYYYMMDD.HHmmss.hashcode@au:%(firstname)s,au:%(lastname)s.en.html +# maybe this could be implemented using some custom formatter function + +[files] +urls=people +people.pattern=https://people.debian.org/~%(username)s/ +people.optional=true + +[membership] +urls=nm,dbfinger,db,salsa,wiki,forum +nm.pattern=https://nm.debian.org/person/%(username)s +dbfinger.pattern=finger %(username)s@db.debian.org +dbfinger.type=finger +dbfinger.optional=true +db.pattern=https://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search +db.optional=true +#webid.pattern=http://webid.debian.net/maintainers/%(username)s +#webid.optional=true +salsa.pattern=https://salsa.debian.org/%(salsausername)s +salsa.optional=true +wiki.pattern=https://wiki.debian.org/%(wikihomepage)s +forum.pattern=http://forums.debian.net/memberlist.php?mode=viewprofile&u=%(forumsid)s +forum.optional=true + +[miscellaneous] +urls=debtags,links,planetname,planetuser,website,search,gpgfinger,gpgweb,contrib,repology +debtags.pattern=https://debtags.debian.org/reports/maint/%(email)s +planetname.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(name)s%%22 +planetuser.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(username)s%%22 +planetuser.optional=true +links.pattern=https://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 +website.pattern=https://www.google.com/search?q=site:www.debian.org+%(name)s +search.pattern=https://search.debian.org/cgi-bin/omega?P=%%22%(name)s%%22 +gpgfinger.pattern=finger %(username)s/key@db.debian.org +gpgfinger.type=finger +gpgfinger.optional=true +gpgweb.pattern=https://db.debian.org/fetchkey.cgi?fingerprint=%(openpgpfp)s +gpgweb.optional=true +nm.pattern=https://nm.debian.org/public/person/%(username)s +contrib.pattern=https://contributors.debian.org/contributor/%(email)s +contrib.optional=true +repology.pattern=https://repology.org/maintainer/%(email)s +repology.optional=true + +[ssh] +# SSH functions +urls=owndndoms,miainfo,groupinfo +# owned *.debian.net domains +owndndoms.pattern=ldapsearch -u -x -H ldaps://db.debian.org -b dc=debian,dc=org uid=%(username)s dnsZoneEntry +owndndoms.type=ldapsearch +owndndoms.optional=true +# MIA information +miainfo.pattern=ssh qa.debian.org /srv/qa.debian.org/mia/mia-query %(emailnoq)s +miainfo.type=ssh +# Group information +groupinfo.pattern=ssh master.debian.org id %(username)s +groupinfo.type=ssh +groupinfo.optional=true + +#[ubuntu] +#urls=ubuntudiff +#ubuntudiff.pattern=http://ubuntudiff.debian.net/q/uploaders/%(email)s diff --git a/debianmemberportfolio/model/urlbuilder.py b/debianmemberportfolio/model/urlbuilder.py new file mode 100644 index 0000000..0f180ab --- /dev/null +++ b/debianmemberportfolio/model/urlbuilder.py @@ -0,0 +1,141 @@ +# -*- python -*- +# -*- coding: utf8 -*- +# +# Debian Member Portfolio Service url builder +# +# Copyright © 2009-2023 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +This module provides the function build_urls to build personalized +URLs using the given information and the URL patterns defined in +portfolio.ini. +""" + +from configparser import ConfigParser, InterpolationMissingOptionError +from encodings.utf_8 import StreamReader as UTF8StreamReader +from importlib import resources +from urllib.parse import quote_plus + +from debianmemberportfolio.model import keyfinder +from flask_babel import gettext as _ +from flask_babel import lazy_gettext as N_ + +my_config = ConfigParser() +ref = resources.files("debianmemberportfolio.model").joinpath("portfolio.ini") +with ref.open("rb") as fp: + my_config.read_file(UTF8StreamReader(fp)) + +_FIELDNAMES_MAP = { + "email": N_("Email address"), + "name": N_("Name"), + "openpgpfp": N_("OpenPGP fingerprint"), + "username": N_("Debian user name"), + "nonddemail": N_("Non Debian email address"), + "salsausername": N_("Salsa user name"), +} + + +class DDPortfolioEntry(object): + def __init__(self, config, section, key): + self.name = key + self.optional = ( + config.has_option(section, key + ".optional") + and config.getboolean(section, key + ".optional") + or False + ) + if config.has_option(section, key + ".type"): + self.type = config.get(section, key + ".type") + else: + self.type = "url" + + +def _build_quoted_fields(fields): + """ + Take a dictionary of raw field values and quote the values if required. + """ + qfields = {} + for key, value in fields.items(): + if value is not None: + if isinstance(value, str): + qfields[key] = quote_plus(value.encode("utf8")) + elif isinstance(value, str): + qfields[key] = quote_plus(value) + else: + qfields[key] = value + qfields[key] = str(qfields[key]).replace("%", "%%") + + if "openpgpfp" not in qfields: + fpr = keyfinder.getFingerprintByEmail(fields["email"]) + if fpr: + qfields["openpgpfp"] = fpr[0] + qfields["firstchar"] = fields["email"][0] + qfields["emailnoq"] = fields["email"] + return qfields + + +def build_urls(fields): + """Build personalized URLs using the developer information in + fields.""" + data = [] + quoted_fields = _build_quoted_fields(fields) + for section in [ + section.strip() + for section in my_config.get("DEFAULT", "urlbuilder.sections").split(",") + ]: + data.append(["section", section]) + if my_config.has_option(section, "urls"): + for entry in [ + DDPortfolioEntry(my_config, section, url) + for url in my_config.get(section, "urls").split(",") + ]: + try: + data.append( + [ + "url", + section, + entry, + my_config.get( + section, + entry.name + ".pattern", + raw=False, + vars=quoted_fields, + ), + ] + ) + except InterpolationMissingOptionError as e: + if not entry.optional: + if e.reference in _FIELDNAMES_MAP: + data.append( + [ + "error", + section, + entry, + _("Missing input: %s") + % _(_FIELDNAMES_MAP[e.reference]), + ] + ) + else: + data.append( + [ + "error", + section, + entry, + _("Missing input: %s") % e.reference, + ] + ) + return data diff --git a/ddportfolioservice/public/.gitignore b/debianmemberportfolio/static/.gitignore similarity index 100% rename from ddportfolioservice/public/.gitignore rename to debianmemberportfolio/static/.gitignore diff --git a/ddportfolioservice/public/images/agplv3-88x31.png b/debianmemberportfolio/static/images/agplv3-88x31.png similarity index 100% rename from ddportfolioservice/public/images/agplv3-88x31.png rename to debianmemberportfolio/static/images/agplv3-88x31.png diff --git a/ddportfolioservice/public/images/openlogo-100.jpg b/debianmemberportfolio/static/images/openlogo-100.jpg similarity index 100% rename from ddportfolioservice/public/images/openlogo-100.jpg rename to debianmemberportfolio/static/images/openlogo-100.jpg diff --git a/ddportfolioservice/public/robots.txt b/debianmemberportfolio/static/robots.txt similarity index 100% rename from ddportfolioservice/public/robots.txt rename to debianmemberportfolio/static/robots.txt diff --git a/ddportfolioservice/public/stylesheets/style.css b/debianmemberportfolio/static/stylesheets/style.css similarity index 100% rename from ddportfolioservice/public/stylesheets/style.css rename to debianmemberportfolio/static/stylesheets/style.css diff --git a/debianmemberportfolio/templates/base.html b/debianmemberportfolio/templates/base.html new file mode 100644 index 0000000..5409df8 --- /dev/null +++ b/debianmemberportfolio/templates/base.html @@ -0,0 +1,44 @@ + +{# vim: ft=jinja +Base template for XHTML templates. +Copyright © 2009-2022 Jan Dittberner + +This file is part of the Debian Member Portfolio service. + +Debian Member Portfolio service is free software: you can redistribute it +and/or modify it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Debian Member Portfolio service is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . +#} + + + {% block title %}{{ _('Debian Member Portfolio Service') }}{% endblock %} + + {% block extrahead %}{% endblock %} + + + +
+ {% block body %}{% endblock %} +
+ + + diff --git a/debianmemberportfolio/templates/showform.html b/debianmemberportfolio/templates/showform.html new file mode 100644 index 0000000..6bc3191 --- /dev/null +++ b/debianmemberportfolio/templates/showform.html @@ -0,0 +1,103 @@ +{% extends "base.html" %} +{# +Template for the data input form. + +Copyright © 2009-2022 Jan Dittberner + +This file is part of the Debian Member Portfolio service. + +Debian Member Portfolio service is free software: you can redistribute it +and/or modify it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Debian Member Portfolio service is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . +#} +{% block title %}{{ super()}} - {{ _('Enter your personal information') }}{% endblock %} +{% block extrahead %}{{ super() }} + +{% endblock %} +{% block body %}{{ super() }} +
+
+ {{ _('Debian Member Portfolio') }} +
+
+ {{ form.email }}
+
+ +
+
+ {{ form.name }} +
+
+
+ {{ form.openpgpfp }} +
+
+
+ {{ form.username }} +
+
+
+ {{ form.nonddemail }} +
+
+
+ {{ form.salsausername }} +
+
+
+ {{ form.wikihomepage }} +
+
+
+ {{ form.forumsid }} +
+
+
+ {% for subfield in form.mode %} + {{ subfield.label }} {{ subfield }} + {% endfor %}
+ +
+
+
+{% endblock %} diff --git a/debianmemberportfolio/templates/showformscript.js b/debianmemberportfolio/templates/showformscript.js new file mode 100644 index 0000000..32dde31 --- /dev/null +++ b/debianmemberportfolio/templates/showformscript.js @@ -0,0 +1,119 @@ +{# vim: ft=jinja +Helper JavaScript for the data input form. +Copyright © 2009-2022, Jan Dittberner + +This file is part of the Debian Member Portfolio service. + +Debian Member Portfolio service is free software: you can redistribute it +and/or modify it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Debian Member Portfolio service is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . +#} +var defaulthiddendivs = new Array( + '#namefield', '#openpgpfpfield', '#usernamefield', '#nonddemailfield', + '#salsausernamefield', '#wikihomepagefield', '#forumsidfield'); +var maskedfielddivs = new Array( + '#namefield', '#openpgpfpfield', '#usernamefield', '#nonddemailfield', + '#salsausernamefield', '#wikihomepagefield', '#forumsidfield'); +var allfielddivs = new Array( + '#namefield', '#openpgpfpfield', '#usernamefield', '#nonddemailfield', + '#salsausernamefield', '#wikihomepagefield', '#forumsidfield'); + +function updateFields(data, textStatus) { + if (data.type == 2) { // DD + $('#name').prop('value', data.name).prop('readonly', 'readonly'); + $('#openpgpfp').prop('value', data.openpgpfp); + $('#username').prop('value', data.username).prop( + 'readonly', 'readonly'); + $('#nonddemail').prop('value', data.email).focus(); + $('#salsausername').prop('value', data.username); + $('#wikihomepage').prop('value', data.wikihomepage); + + $('#namefield').show(); + $('#openpgpfpfield').show(); + $('#usernamefield').show(); + $('#nonddemailfield').show(); + $('#salsausernamefield').show(); + $('#wikihomepagefield').show(); + $('#forumsidfield').show(); + + $('#nonddemail').focus().select(); + } else if (data.type == 1) { // DM + $('#name').prop('value', data.name).prop('readonly', 'readonly'); + $('#openpgpfp').prop('value', data.openpgpfp); + $('#username').prop('value', ''); + $('#nonddemail').prop('value', data.email).focus(); + $('#wikihomepage').prop('value', data.wikihomepage); + + $('#namefield').show(); + $('#openpgpfpfield').show(); + $('#usernamefield').hide(); + $('#nonddemailfield').hide(); + $('#salsausernamefield').show(); + $('#wikihomepagefield').show(); + $('#forumsidfield').show(); + + $('#salsausername').focus().select(); + } else { + $('#nonddemail').prop('value', data.email); + $('#name').removeAttr('readonly'); + $('#username').removeAttr('readonly').prop('value', ''); + $('#openpgpfp').prop('value', ''); + + $('#usernamefield').hide(); + $('#openpgpfpfield').hide(); + $('#nonddemailfield').hide(); + $('#namefield').show(); + $('#salsausernamefield').show(); + $('#wikihomepagefield').show(); + $('#forumsidfield').show(); + + $('#name').focus().select(); + } +} + +function onChangeShowAll(event) { + if ($('#showall').prop('checked')) { + for (var fielddiv in allfielddivs) { + $(allfielddivs[fielddiv]).show(); + } + } else { + for (var fielddiv in maskedfielddivs) { + $(maskedfielddivs[fielddiv]).hide(); + } + } +} + +function onBlurEmail() { + if ($.trim($('#email').prop('value')).length > 0) { + $.ajax({ + 'url' : '{{ url_for("fetchdddata") }}', + 'data' : {'email' : $('#email').prop('value')}, + 'dataType' : 'json', + 'success' : updateFields, + 'error' : function(request, textStatus, errorThrown) { + $('#email').focus(); + } + }); + } +} + +$(document).ready(function() { + for (var index in defaulthiddendivs) { + if (!$(defaulthiddendivs[index]).hasClass('witherrors')) { + $(defaulthiddendivs[index]).hide(); + } + } + + $('#showall').prop('checked', false).change(onChangeShowAll); + $('#showallfield').show(); + $('#email').blur(onBlurEmail).focus(); +}); diff --git a/debianmemberportfolio/templates/showurls.html b/debianmemberportfolio/templates/showurls.html new file mode 100644 index 0000000..4b5165b --- /dev/null +++ b/debianmemberportfolio/templates/showurls.html @@ -0,0 +1,61 @@ +{% extends "base.html" %} +{# +Template for the url output page. +Copyright © 2009-2015 Jan Dittberner + +This file is part of Debian Member Portfolio Service. + +Debian Member Portfolio Service is free software: you can redistribute it +and/or modify it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Debian Member Portfolio Service is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . +#} +{% block title %}{{ super() }} - {{ _('Your personal links') }}{% endblock %} +{% block body %}{{ super() }} +{% if urldata %} +
+ {{ _('Debian Member Porfolio') }} + + + + + + {% for row in urldata %} + {% if row[0] == 'section' %} + + {% set urlclass = 'odd' %} + {% elif row[0] == 'error' %} + + + + + {% else %} + + + + + {% if urlclass == "odd" %}{% set urlclass = "even" %}{% else %}{% set urlclass = "odd" %}{% endif %} + {% endif %} + {% endfor %} + +
{{ _('Usage') }}{{ _('URL') }}
{{ row[4] }}{{ _('Error during URL creation:') }} + {{ row[3]|replace("\n", "
") }}
{{ row[4]|safe }} + {% if row[2].type == 'url' %} + {{ row[3]|truncate(120) }} + {% else %} + {{ row[3] }} + {% endif %} +
+
+{% endif %} +

{{ _('Restart') }}

+{% endblock body %} + diff --git a/debianmemberportfolio/translations/ar/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/ar/LC_MESSAGES/messages.po new file mode 100644 index 0000000..15bebb0 --- /dev/null +++ b/debianmemberportfolio/translations/ar/LC_MESSAGES/messages.po @@ -0,0 +1,379 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.6.4\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2021-07-03 11:15+0200\n" +"Last-Translator: Automatically generated\n" +"Language: ar\n" +"Language-Team: none\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : " +"n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/translations/de/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/de/LC_MESSAGES/messages.po new file mode 100644 index 0000000..89fc1fd --- /dev/null +++ b/debianmemberportfolio/translations/de/LC_MESSAGES/messages.po @@ -0,0 +1,402 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.6.4\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-09-25 17:18+0000\n" +"Last-Translator: gallegonovato \n" +"Language: de\n" +"Language-Team: German \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Überblick" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Paketübersicht des Debian-Mitglieds" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Paketübersicht des Debian-Mitglieds\n" +"... mit allen E-Mailadressen" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Fehler" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Erhaltene Fehlerberichte\n" +"(Anmerkung: Co-Maintainer werden nicht aufgeführt, siehe #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Berichtete Fehler" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "User Tags" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "Beitragender zu Fehlern" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Graph der Entwicklung offener Fehlerberichte über ein Jahr" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Bauen" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "Igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Qualitätssicherung" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "Maintainer Dashboard" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Lintian-Berichte" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" +"vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe " +"\"info\")" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian Janitor" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Mailinglisten" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Dateien" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Mitgliedschaft" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "DB-Informationen per finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "DB-Informationen per HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Sonstiges" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (Name)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (Benutzername)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "Links" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian Webseite" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian-Suche" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "öffentlicher OpenPGP-Schlüssel per finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "öffentlicher OpenPGP-Schlüssel per HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM-, AM-Mitwirkung" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Debian Contributor-Informationen" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Repology-Informationen" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Per ssh erreichbare Informationen (für Debian Mitglieder)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "Besitz von debian.net-Domains" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Informationen in der MIA-Datenbank" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Information über Gruppenmitgliedschaften" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "E-Mailadresse" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Name" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP-Fingerabdruck" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian-Benutzername" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Nicht-Debian-E-Mailadresse" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsa-Benutzername" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Fehlende Eingabe: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Debian-Mitglieder-Portfolioservice" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debian-Logo" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Dieser Dienst wurde durch Stefano Zacchirolis DDPortfolio-Seite im Debian " +"Wiki inspiriert. Mit dem Dienst können personalisierte Links zu " +"Informationen im Bezug auf Debian für Debian-Mitglieder und Paketbetreuer" +" erzeugt werden." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Freie Software" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Dieser Dienst wird unter den Bedingungen der GNU Affero General Public " +"License, so wie sie von der Free Software Foundation veröffentlicht " +"ist, bereitgestellt. Sie können entweder Version 3 oder (auf Ihren Wunsch" +" hin) jede spätere Version der Lizenz verwenden. Sie können sich den " +"Quelltext ansehen oder mit git von" +" %(cloneurl)s " +"klonen. Wenn Sie diesen Service in Ihre Sprache übersetzen möchten, " +"können Sie auf Weblate dazu beitragen." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Eingabe der persönlichen Informationen" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Debian-Mitglieder-Portfolioservice" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "E-Mailadresse:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Alle Formularfelder anzeigen" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Name:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "OpenPGP-Fingerabdruck:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debian-Benutzername:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Nicht-Debian-E-Mailadresse:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsa-Benutzername:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wiki-Benutzername:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Forumsbenutzernummer:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Ausgabeformat:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Debian-Mitgliedsportfolio-URLs bauen" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Ihre personalisierten Links" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Debian-Mitgliederportfolio" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Verwendung" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Fehler bei der URL-Erzeugung:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Neu beginnen" + diff --git a/debianmemberportfolio/translations/el/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/el/LC_MESSAGES/messages.po new file mode 100644 index 0000000..55d8b80 --- /dev/null +++ b/debianmemberportfolio/translations/el/LC_MESSAGES/messages.po @@ -0,0 +1,382 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-12-11 12:51+0000\n" +"Last-Translator: george kitsoukakis \n" +"Language: el\n" +"Language-Team: Greek \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Επισκόπηση" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Σφάλματα" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"ληφθέντα σφάλματα\n" +"(σημείωση: οι συντηρητές δε συμπεριλαμβάνονται, δείτε #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "σφάλματα που αναφέρθηκαν" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "ετικέτες χρηστών" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Διασφάλιση ποιότητας" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "πίνακας ελέγχου συντηρητή" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Λίστες αλληλογραφίας" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Αρχεία" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Μέλη" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "ΝΜ" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Πληροφορίες DB μέσω HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Φόρουμ" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Διάφορα" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (όνομα)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (όνομα χρήστη)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "σύνδεσμοι" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Ιστότοπος του Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Αναζήτηση στο Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Δημόσιο κλειδί OpenPGP μέσω HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Συμμετοχή NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA " +"πληροφορίες βάσης δεδομένων" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Διεύθυνση email" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Όνομα" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Ψηφιακό αποτύπωμα OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Όνομα χρήστη Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Όνομα χρήστη salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Λογότυπο Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Ελεύθερο Λογισμικό" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Πνευματικά δικαιώματα © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Εισαγάγετε τα προσωπικά σας στοιχεία" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Διεύθυνση email:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Εμφάνιση όλων των πεδίων της φόρμας" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Ονομα:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Ψηφιακό αποτύπωμα OpenPGP:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Όνομα χρήστη Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Όνομα χρήστη salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Όνομα χρήστη Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Οι προσωπικοί σας σύνδεσμοι" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Χρήση" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Σφάλμα κατά τη δημιουργία URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Επανεκκίνηση" + diff --git a/debianmemberportfolio/translations/eo/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/eo/LC_MESSAGES/messages.po new file mode 100644 index 0000000..8f7fe5a --- /dev/null +++ b/debianmemberportfolio/translations/eo/LC_MESSAGES/messages.po @@ -0,0 +1,376 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.6.4\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-11-06 14:08+0000\n" +"Last-Translator: phlostically \n" +"Language: eo\n" +"Language-Team: Esperanto \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Superrigardo" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Cimoj" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "cimoj raportitaj" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "etikedoj de uzanto" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Dissendolistoj" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Dosieroj" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Aneco" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Vikio" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forumo" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "ligiloj" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Retejo de Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Serĉi ĉe Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "Posedataj subretejoj de debian.net" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Retpoŝta adreso" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nomo" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP-fingrospuro" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Salutnomo ĉe Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Retpoŝta adreso ekster Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salutnomo ĉe Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Kopirajtoj © 2009–2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Tajpu viajn personajn informojn" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Paperujo de Debian-ano" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Retpoŝta adreso:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nomo:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salutnomo ĉe salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Salutnomo ĉe vikio:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Salutidentigilo ĉe Forumo:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Paperujo de Debian-ano" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Uzado" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + diff --git a/debianmemberportfolio/translations/es/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/es/LC_MESSAGES/messages.po new file mode 100644 index 0000000..1849589 --- /dev/null +++ b/debianmemberportfolio/translations/es/LC_MESSAGES/messages.po @@ -0,0 +1,401 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-10-10 18:04+0000\n" +"Last-Translator: gallegonovato \n" +"Language: es\n" +"Language-Team: Spanish \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Visión general" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Visión general de paquetes del miembro de Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Visión general de paquetes del miembro de Debian\n" +"… se muestran todas las direcciones de correo" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Fallos" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"fallos recibidos\n" +"(nota: no se muestran los corresponsables; véase el informe n.º " +"430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "fallos informados" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "etiquetas de usuario" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "contacto para fallos" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "gráfico de histórico anual de informes de error abiertos" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Generación de paquetes" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "build ddo" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "iglú" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Control de calidad" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "tablero de responsable" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "informes de lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "informes íntegros de lintian (es decir, incluyen mensajes de nivel «info»)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts (Debian)" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Conserje de Debian" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Listas de correo" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "listas.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "listas.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Archivos" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "gente.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "personasmayores" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Membresía" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "Nanómetro" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Información de BD a través de Finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Información de BD a través de HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Foro" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Varios" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags (Debian)" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nombre)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (nombre de usuario)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "enlaces" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Sitio web de Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Búsqueda en Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Clave pública de OpenPGP a través de Finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Clave pública de OpenPGP a través de HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Participación en NM y AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Información de contribución" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Información de Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Información accesible a través de SSH (para miembros de Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "titularidad de dominios debian.net" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Información de la base de datos MIA" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Información de membresía a grupos" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Dirección de correo" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nombre" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Huella OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Nombre de usuario de Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Direcciones de correo no de Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Nombre de usuario de Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Falta la entrada: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Servicio de portafolios para miembros de Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logotipo de Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"La inspiración para este servicio provino de la página «DDPortfolio» del " +"wiki de Debian, ideada por Stefano Zacchiroli. Puede crear un juego " +"de enlaces personalizados que apunten a la información relacionada con " +"Debian sobre un/a miembro del proyecto o responsable de paquete." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL: «software» libre" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"El servicio se pone a su disposición en virtud de los términos de la Licencia Pública General " +"Affero de GNU, tal como la publica al Free Software Foundation, sea " +"bien la versión 3 de la Licencia o bien cualquier otra versión posterior " +"de su preferencia. Puede explorar el código fuente o " +"clonarlo desde %(cloneurl)s sirviéndose de git. Si quiere contribuir traduciendo este servicio a su " +"lengua, puede hacerlo a través de Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Derechos de autor © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Proporcione su información personal" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portafolio de miembro de Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Dirección de correo:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Mostrar todos los campos del formulario" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nombre:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Huella digital OpenPGP:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nombre de usuario de Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Dirección de correo no de Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Nombre de usuario de Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nombre de usuario del wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Identificador de usuario del foro:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Formato de salida:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Crear los URL para portafolio de miembro de Debian" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Sus enlaces personales" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portafolio de miembro de Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Uso" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Se produjo un error al crear el URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Reiniciar" + diff --git a/debianmemberportfolio/translations/fr/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/fr/LC_MESSAGES/messages.po new file mode 100644 index 0000000..89bf07a --- /dev/null +++ b/debianmemberportfolio/translations/fr/LC_MESSAGES/messages.po @@ -0,0 +1,400 @@ +# French translations for the Debian Member Portfolio Service +# +# Copyright (C) 2012 Stéphane Aulery +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Stéphane Aulery , 2012. +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-10-17 08:01+0000\n" +"Last-Translator: Olivier Humbert \n" +"Language: fr\n" +"Language-Team: French \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Vue d'ensemble" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Vue d'ensemble des paquets du membre Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Vue d'ensemble des paquets du membre Debian\n" +"... affichage de tous les courriels" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Bogues" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Bogues reçus\n" +"(note : co-responsables non listés, voir #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Bogues rapportés" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "Tags utilisateur" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "Correspondant pour les bogues" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Graphique de l'évolution des bogues ouverts sur l'année écoulée" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Construire" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Assurance qualité" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "tableau de bord du mainteneur" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Rapports lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "Rapports lintian complets (c-à-d incluant les messages de niveau \"info\")" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "Piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian Janitor" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Listes de diffusion" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Fichiers" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "anciens" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Adhésion" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "BD d’informations via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "BD d’informations via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Divers" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "Debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nom)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (nom d’utilisateur)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "Liens" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Site web de Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Recherche Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Clef OpenPGP publique via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Clef OpenPGP publique via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "participation NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Informations de contribution" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informations de Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informations accessibles via ssh (pour les membres de Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "Propriété des domaines debian.net" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Informations de la base de données MIA" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Information sur l’adhésion de groupe" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Courriel" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nom" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Empreinte OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Nom d’utilisateur Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Courriel hors Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Nom d’utilisateur Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Entrée manquante : %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Service de portefeuille des membres de Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Ce service a été inspiré par la page DDPortfolio du Wiki " +"de Debian de Stefano Zacchiroli. Vous pouvez créer un ensemble " +"personnalisé de liens fournissant des informations sur un membre ou un " +"mainteneur de paquet de Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Logiciel libre" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Ce service est disponible sous les termes de la licence GNU Affero General Public" +" License telle que publiée par la Free Software Foundation, soit la " +"version 3 de la licence, ou (à votre choix) toute version ultérieure. " +"Vous pouvez parcourir le code source ou le cloner depuis %(cloneurl)s en " +"utilisant git. Si vous voulez " +"traduire ce service dans votre langage, vous pouvez contribuer chez Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Saisissez vos informations personnelles" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portefeuille d’un Membre de Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Courriel :" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Afficher tous les champs du formulaire" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nom :" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Empreinte OpenPGP :" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nom d’utilisateur Debian :" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Courriel hors Debian :" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Nom d’utilisateur Salsa :" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nom d’utilisateur Wiki :" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Numéro d’utilisateur Forum :" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Format de sortie :" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Construire les URLs du portefeuille du membre de Debian" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Vos liens personnels" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portefeuille d’un membre de Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Utilisation" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Erreur durant la création de l’URL :" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Recommencer" + diff --git a/debianmemberportfolio/translations/hi/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/hi/LC_MESSAGES/messages.po new file mode 100644 index 0000000..1aaa308 --- /dev/null +++ b/debianmemberportfolio/translations/hi/LC_MESSAGES/messages.po @@ -0,0 +1,385 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.6.4\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2021-11-12 17:50+0000\n" +"Last-Translator: KushagraKarira \n" +"Language: hi\n" +"Language-Team: Hindi \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "जैसन" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "एचटीएमएल" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "अवलोकन" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "डेबियन सदस्य का पैकेज अवलोकन" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"डेबियन सदस्य का पैकेज अवलोकन\n" +"... सभी ईमेल पते दिखा रहा है" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "बग" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"बग प्राप्त \n" +"(नोट: सह-रखरखाव सूचीबद्ध नहीं हैं, देखें #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "बग की सूचना दी" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "उपयोगकर्ता टैग" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr " WNPP " + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "बग के लिए संवाददाता" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "एक साल का खुला बग इतिहास ग्राफ" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "बिल्ड" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "इग्लू" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "गुणवत्ता आश्वासन" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "अनुरक्षक डैशबोर्ड" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "लिंटियन रिपोर्ट" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "पूर्ण लिंटियन रिपोर्ट (यानी \"जानकारी\" स्तर के संदेशों सहित)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "पियुपार्ट्स" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "डेबियन चौकीदार" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "ईमेल की सूची" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "फ़ाइलें" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "वृध्द लोग" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "सदस्यता" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "एनएम" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "उंगली के माध्यम से डीबी जानकारी" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "HTTP के माध्यम से डीबी जानकारी" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "सालसा" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "विकि" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "फ़ोरम" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "विविध" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "देनदारी" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "प्लेनेट डेबियन (नाम)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "प्लैनेट डेबियन (उपयोगकर्ता नाम)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "लिंक्स" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "डेबियन वेबसाइट" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "डेबियन खोज" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/translations/id/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/id/LC_MESSAGES/messages.po new file mode 100644 index 0000000..fc3207f --- /dev/null +++ b/debianmemberportfolio/translations/id/LC_MESSAGES/messages.po @@ -0,0 +1,400 @@ +# Indonesian translations for Debian Member Portfolio Service. +# +# Copyright (C) 2012 Izharul Haq +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Izharul Haq , 2012. +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service\n" +"Report-Msgid-Bugs-To: atoz.chevara@yahoo.com\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2021-07-12 01:32+0000\n" +"Last-Translator: Reza Almanda \n" +"Language: id\n" +"Language-Team: Indonesian \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Gambaran Umum" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Gambaran Umum Paket Anggota Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Gambaran Umum Paket Anggota Debian\n" +"... tampilkan semua alamat email" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Kutu" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"bugs diterima\n" +"(catatan: co-maintainers tidak tercantum, lihat #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "melaporkan bug" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "label pengguna" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "koresponden untuk bug" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "grafik perkembangan laporan bug terbuka lebih dari setahun" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Bangun" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Jaminan Mutu" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "dasbor maintainer" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "laporan lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "seluruh pesan lintian (i.e. termasuk pesan \"info\"-level)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Petugas Kebersihan Debian" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Milis" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Berkas-berkas" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Keanggotaan" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "informasi DB melalui finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "informasi DB melalui HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Lain-Lain" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nama)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (nama pengguna)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "tautan" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "website Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "pencarian Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "kunci publik OpenPGP melalui finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "kunci publik OpenPGP melalui HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "partisipasi NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Informasi kontribusi" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informasi repologi" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informasi dicapai melalui ssh (untuk Anggota Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "domain debian.net sendiri" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"informasi database MIA" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informasi keanggotaan kelompok" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Alamat Email" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nama" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "sidik jari OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "nama pengguna Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Selain alamat email Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "nama pengguna Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Tidak ada masukan: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Layanan Portfolio Anggota Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Layanan ini terinspirasi dari halaman DDPortfolio Stefano " +"Zacchiroli di Wiki Debian. Anda dapat membuat sebuah link kustom yang" +" mengarah ke Anggota Debian atau informasi mengenai pengelola paket " +"Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Free Software" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Layanan ini tersedia di bawah persyaratan GNU Affero General Public" +" License seperti yang diterbitkan oleh Free Software Foundation, baik" +" versi 3 dari Lisensi, atau (dengan pilihan Anda) versi lainnya. Anda " +"dapat menelusuri kode sumber atau klon dari %(cloneurl)s menggunakan git.\n" +"Jika anda ingin menerjemahkan layanan ini ke dalam bahasa anda, anda " +"dapat berkontribusi di Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Hak Cipta © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Masukkan informasi data pribadi anda" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portfolio Anggota Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Alamat surel:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Tampilkan semua bagian formulir" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nama:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "sidik jari OpenPGP" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nama pengguna Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Selain alamat email Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Nama pengguna Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nama pengguna Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "ID pengguna Forum:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Format Keluaran:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Membangun URL Portfolio Anggota Debian" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Tautan pribadi anda" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portfolio Anggota Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Penggunaan" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Kesalahan selama pembuatan URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Mulai ulang" + diff --git a/debianmemberportfolio/translations/ja/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/ja/LC_MESSAGES/messages.po new file mode 100644 index 0000000..40e30e4 --- /dev/null +++ b/debianmemberportfolio/translations/ja/LC_MESSAGES/messages.po @@ -0,0 +1,388 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2020-09-27 13:40+0000\n" +"Last-Translator: Shuji Sado \n" +"Language: ja\n" +"Language-Team: Japanese \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "概要" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Debianメンバーのパッケージ概要" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Debianメンバーのパッケージ概要\n" +"... 全メールアドレス表示" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "バグ" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"受領したバグ\n" +"(注: 共同メンテナーはリストされていません。#430986を参照)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "報告したバグ" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "ユーザータグ" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "1年間にオープンしたバグの履歴グラフ" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "ビルド" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "品質保証" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "メンテナダッシュボード" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Lintianレポート" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "メーリングリスト" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "ファイル" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "メンバーシップ" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "フォーラム" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "その他" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (名前)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (ユーザー名)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "リンク" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian webサイト" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian検索" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "finger経由のOpenPGP公開鍵" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "HTTP経由のOpenPGP公開鍵" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "貢献情報" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Repology情報" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "MIA データベース情報" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Emailアドレス" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "名前" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian ユーザー名" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Debian以外のメールアドレス" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsaユーザー名" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Debianメンバー・ポートフォリオ・サービス" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debianロゴ" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"このサービスは、Debian Wiki の Stefano Zacchiroli さんによる DDPortfolio " +"ページにヒントを得ています。 Debian メンバーやパッケージメンテナの Debian " +"に関する情報につながるカスタマイズされたリンクのセットを作成することができます。" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - フリーソフトウェア" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Debianメンバーポートフォリオ" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Emailアドレス:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "名前:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debianユーザー名:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Debian以外のメールアドレス:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsaユーザー名:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wikiユーザー名:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "フォーラムのユーザーID:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "あなたの個人的なリンク" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Debianメンバーポートフォリオ" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/translations/mr/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/mr/LC_MESSAGES/messages.po new file mode 100644 index 0000000..51f12f0 --- /dev/null +++ b/debianmemberportfolio/translations/mr/LC_MESSAGES/messages.po @@ -0,0 +1,381 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2019-12-14 20:21+0000\n" +"Last-Translator: Prachi Joshi \n" +"Language: mr\n" +"Language-Team: Marathi \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "एचटीएमएल" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "आढावा" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "डेबियन सदस्याचे पॅकेज विहंगावलोकन" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"डेबियन सदस्याचे पॅकेज विहंगावलोकन\n" +"... सर्व ईमेल पत्ते दर्शवित आहे" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "बग" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "बग नोंदवले" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "वापरकर्ता टॅग" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "बग साठी संवाददाता" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "एक वर्षाचा ओपन बग हिस्ट्री ग्राफ" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "बांधा" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "इग्लू" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "गुणवत्ता हमी" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "देखभालकर्ता डॅशबोर्ड" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/translations/nb/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/nb/LC_MESSAGES/messages.po new file mode 100644 index 0000000..abef016 --- /dev/null +++ b/debianmemberportfolio/translations/nb/LC_MESSAGES/messages.po @@ -0,0 +1,397 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2023-02-05 05:38+0000\n" +"Last-Translator: Allan Nordhøy \n" +"Language: nb\n" +"Language-Team: Norwegian Bokmål \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Oversikt" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Debian-medlemmers pakkeoversikt" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Debianmedlemmers pakkeoversikt\n" +"… viser alle e-postadresser" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Feil" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"feilrapporter mottatt\n" +"(merk: med-vedlikeholdere er ikke listet opp, se #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "feil rapportert" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "brukermerker" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "korrespondent for feilrapporter" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Graf over feilrapporter som har vært åpen mer enn et år" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Bygg" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "iglo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Kvalitetssikring" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "Vedlikeholdersoversikt" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "lintian-rapporter" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "Komplette lintian-rapporter (dvs. også meldinger med nivå «info»)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian-vaktmester" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "E-postlister" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Filer" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Medlemskap" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "DB-informasjon via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "DB-informasjon via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Diverse" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (navn)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (brukernavn)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "lenker" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian-nettsiden" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian-søk" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Offentlig OpenPGP-nøkkel via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Offentlig OpenPGP-nøkkel via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM-, AM-deltagelse" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Bidragsinformasjon" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Depotologiinformasjon" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informasjon tilgjengelig via ssh (for Debian-medlemmer)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "eide debian.net -domener" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Informasjon i MIA-databasen" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Gruppemedlemskapsinformasjon" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "E-postadresse" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Navn" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP-fingeravtrykk" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian-brukernavn" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "E-postadresser utenom Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsa-brukernavn" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Manglende inndata: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Debian-medlems portfoliotjeneste" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debian-logo" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Denne tjenesten er inspirert av Stefano Zacchiroli sin DDPortfolio-side i Debian-" +"wikien. Du kan lage et sett med tilpassede lenker som leder til et " +"Debian-medlems eller -pakkevedlikeholders informasjon om Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Fri programvare" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Tjenesten er tilgjengelig i tråd med vilkårene i GNU Affero General Public" +" License som publisert av Free Software Foundation, enten versjon 3 " +"av lisensen eller (etter ditt valg) enhver senere versjon. Du kan se gjennom" +" kildekoden eller lage en klone av det fra %(cloneurl)s ved å bruke git. Hvis du ønsker å oversette denne tjenesten til" +" ditt språk kan du bidra ved å bruke Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Opphavsrett © 2009–2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Skriv inn informasjon om deg selv" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Debian-medlems portfolio" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "E-postadresse:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Vis alle felt i skjema" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Navn:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "OpenPGP-fingeravtrykk" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debian-brukernavn:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "E-postadresse utenom Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsa-brukernavn:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wiki-brukernavn:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Forum-brukerid:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Fremvisningsformat:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Bygg Debian-medlemsportfolio-URLer" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Dine personlige lenker" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Debian-medlems portfolio" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Bruk" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Feil under oppretting av URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Start om igjen" + diff --git a/debianmemberportfolio/translations/nl/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/nl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..b1d4017 --- /dev/null +++ b/debianmemberportfolio/translations/nl/LC_MESSAGES/messages.po @@ -0,0 +1,401 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2021-07-03 10:30+0000\n" +"Last-Translator: Heimen Stoffels \n" +"Language: nl\n" +"Language-Team: Dutch \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Overzicht" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Pakketoverzicht van Debian-leden" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Pakketoverzicht van Debian-leden\n" +"... alle e-mailadressen worden weergegeven" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Bugs" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"ontvangen bugs\n" +"(let op: mede-beheerders staan niet op de lijst, zie #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "gemelde bugs" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "gebruikerslabels" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "correspondent voor bugs" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "grafiek van de evolutie van bugs die één jaar openstaan" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Bouwen" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Kwaliteitsverzekering" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "beheerpaneel" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "lintian-rapporten" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" +"volledige lintian-rapporten (d.w.z. inclusief berichten van het niveau " +"‘info’)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian-conciërge" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Mailinglijsten" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Bestanden" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oud-medewerkers" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Lidmaatschap" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "DB-informatie via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "DB-informatie via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Diversen" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (naam)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (gebruikersnaam)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "links" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian-website" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian-zoeken" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "OpenPGP openbare sleutel via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "OpenPGP openbare sleutel via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM, AM-deelname" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Bijdrage-informatie" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Repology-informatie" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Via ssh toegankelijke informatie (voor Debian-leden)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "debian.net-domeinnamen in eigendom" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA-databankinformatie" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informatie over groepslidmaatschap" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "E-mailadres" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Naam" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP-vingerafdruk" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian-gebruikersnaam" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "E-mailadres buiten Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsa-gebruikersnaam" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Ontbrekende invoer: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Portfolio met Debian-leden" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debian-logo" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Deze dienst is geïnspireerd op Stefano Zacchiroli's DDPortfolio-pagina op de " +"Debian-wiki. U kunt een set aangepaste links creëren die leiden naar " +"Debian-gerelateerde informatie over een lid of pakketbeheerder van " +"Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Vrije software" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Deze dienst is beschikbaar onder de voorwaarden van de GNU Affero General Public" +" License, zoals gepubliceerd door de Free Software Foundation, zowel " +"versie 3, als (optioneel) een hogere versie. U kunt door de " +"broncode bladeren of deze klonen van %(cloneurl)s m.b.v. git. Als u deze dienst wilt vertalen naar uw eigen taal, " +"dan kunt u bijdragen op Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Voer uw persoonlijke informatie in" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portfolio van een Debian-lid" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "E-mailadres:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Alle formuliervelden tonen" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Naam:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "OpenPGP-vingerafdruk" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debian-gebruikersnaam:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "E-mailadres buiten Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsa-gebruikersnaam:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wiki-gebruikersnaam:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Forum-gebruikersid:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Uitvoerformaat:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "URL's samenstellen voor het Debian-lid" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Mijn persoonlijke links" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portfolio van een Debian-lid" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Gebruik" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Er is een fout opgetreden tijdens het samenstellen van de url:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Opnieuw beginnen" + diff --git a/debianmemberportfolio/translations/pl/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/pl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..067ed0c --- /dev/null +++ b/debianmemberportfolio/translations/pl/LC_MESSAGES/messages.po @@ -0,0 +1,380 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2020-10-27 06:59+0000\n" +"Last-Translator: Jan Dittberner \n" +"Language: pl\n" +"Language-Team: Polish \n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " +"(n%100<10 || n%100>=20) ? 1 : 2;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Przegląd" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Bugi" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Pliki" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/translations/pt/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/pt/LC_MESSAGES/messages.po new file mode 100644 index 0000000..749303a --- /dev/null +++ b/debianmemberportfolio/translations/pt/LC_MESSAGES/messages.po @@ -0,0 +1,400 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2021-07-03 11:15+0200\n" +"Last-Translator: ssantos \n" +"Language: pt\n" +"Language-Team: Portuguese \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Visão Geral" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Visão geral dos Pacotes dos Membros do Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Visão geral dos Pacote dos Membros do Debian\n" +"... exibindo todos os endereços de email" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Bugs" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Bugs recebidos\n" +"(nota: co-mantenedores não listados, veja #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Bugs reportados" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "Tags de utilizador" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "correspondente para bugs" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Histórico gráfico de bugs abertos há um ano" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Construção" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "Iglu" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Garantia de Qualidade" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "painel do mantenedor" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "relatórios lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "todos os relatórios lintian (Ex. incluindo mensagens \"info\"-level)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Listas de Discussão" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Ficheiros" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Associação" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Infomações DB via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Informações DB via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Fórum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Miscelânea" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nome)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Nome de utilizador Debian" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "ligações" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Site do Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Pesquisa Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Chave pública OpenPGP via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Chave pública OpenPGP via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Participação NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Insira as suas informações pessoais" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informação sobre Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informação alcançável via ssh (para membros Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "domínios debian.net adquiridos" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA " +"informações de banco de dados" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informações de Grupos associados" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Endereços de email" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nome" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Fingerprint OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Nome de utilizador Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Endereço de email não Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Nome de utilizador Debian" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Entrada ausente: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Serviço de Portfolio dos Membros do Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Este serviço tem sido inspirado por Stefano Zacchiroli's Página DDPortfolio na Debian" +" Wiki. Pode criar um conjunto de ligações customizados apontando para" +" informações, ou de membro Debian, ou de mantenedor de pacotes a respeito" +" de Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Sofware Livre" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"O serviço está disponível sob os termos da Licença Pública Geral " +"Affero GNU conforme publicado pela the Free Software Foundation, " +"tanto na versão 3 da licença, como (a seu critério) qualquer versão mais " +"recente. Pode visualizar o código fonte ou cloná-lo%(cloneurl)s " +"usando git. Se quiser traduzir este " +"serviço para o seu idioma pode contribuir em Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Direitos Autorais © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Insira as suas informações pessoais" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Endereço de email:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Mostrar todos os campos" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nome:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Fingerprint OpenPGP" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nome de utilizador Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Endereço de email não Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "nome de utilizador Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nome de utilizador Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Id de utilizador do fórum:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Formato de saída:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "URLs de Portfolio dos Membros Debian em Construção" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "As suas ligações pessoais" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Modo de uso" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Erro durante a criação da URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Reiniciar" + diff --git a/debianmemberportfolio/translations/pt_BR/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/pt_BR/LC_MESSAGES/messages.po new file mode 100644 index 0000000..2f9257d --- /dev/null +++ b/debianmemberportfolio/translations/pt_BR/LC_MESSAGES/messages.po @@ -0,0 +1,400 @@ +# Portuguese (Brazil) translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2012 Daniel Manzano +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Daniel Manzano , 2012. +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-10-10 18:04+0000\n" +"Last-Translator: Ricardo Berlim Fonseca \n" +"Language: pt_BR\n" +"Language-Team: Portuguese (Brazil) \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Visão Geral" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Visão geral dos Pacotes dos Membros do Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Visão geral dos Pacote dos Membros do Debian\n" +"... exibindo todos os endereços de email" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Bugs" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Bugs recebidos\n" +"(nota: co-mantenedores não listados, veja #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Bugs reportados" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "Tags de usuário" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "correspondente para bugs" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Histórico gráfico de bugs abertos há um ano" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Construção" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "Iglu" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Garantia de Qualidade" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "painel do mantenedor" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "relatórios lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "todos os relatórios lintian (Ex. incluindo mensagens \"info\"-level)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Zelador Debian" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Listas de Discussão" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Arquivos" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "idosos" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Associação" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Infomações DB via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Informações DB via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Fórum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Miscelânea" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nome)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Nome de usuário Debian" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "links" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Site do Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Pesquisa Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Chave pública OpenPGP via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Chave pública OpenPGP via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Participação NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Insira as suas informações pessoais" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informação sobre Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informação alcançável via ssh (para membros Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "domínios debian.net adquiridos" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA " +"informações de banco de dados" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informações de Grupos associados" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Endereços de email" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nome" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Fingerprint OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Nome de usuário Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Endereço de email não Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Nome de usuário Debian" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Entrada ausente: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Serviço de Portfolio dos Membros do Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Este serviço tem sido inspirado por Stefano Zacchiroli's Página DDPortfolio na Debian" +" Wiki. Você pode criar um conjunto de links customizados apontando " +"para informações, ou de membro Debian, ou de mantenedor de pacotes a " +"respeito de Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Sofware Livre" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"O serviço está disponível sob os termos da Licença Pública Geral " +"Affero GNU conforme publicado pela the Free Software Foundation, " +"tanto na versão 3 da licença, como (a seu critério) qualquer versão mais " +"recente. Você pode visualizar o código fonte ou cloná-lo%(cloneurl)s " +"usando git. Se você quiser traduzir " +"este serviço para o seu idioma você pode contribuir em Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Direitos Autorais © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Insira as suas informações pessoais" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Endereço de email:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Mostrar todos os campos" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nome:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Fingerprint OpenPGP:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nome de usuário Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Endereço de email não Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "nome de utilizador Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nome de usuário Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Id de usuário do fórum:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Formato de saída:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "URLs de Portfolio dos Membros Debian em Construção" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Os seus links pessoais" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Modo de uso" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Erro durante a criação da URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Reiniciar" + diff --git a/debianmemberportfolio/translations/pt_PT/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/pt_PT/LC_MESSAGES/messages.po new file mode 100644 index 0000000..718e8e7 --- /dev/null +++ b/debianmemberportfolio/translations/pt_PT/LC_MESSAGES/messages.po @@ -0,0 +1,400 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-09-21 16:19+0000\n" +"Last-Translator: Manuela Silva \n" +"Language: pt_PT\n" +"Language-Team: Portuguese (Portugal) \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Visão Geral" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Visão geral dos Pacotes dos Membros do Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Visão geral dos Pacote dos Membros do Debian\n" +"... exibindo todos os endereços de correio eletrónico" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Erros" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Erros recebidos\n" +"(nota: co-administradores não listados, consulte #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Erros reportados" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "Etiquetas de utilizador" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "correspondente para erros" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "Gráfico do histórico de erros abertos há um ano" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Criação" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "Iglu" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Garantia de Qualidade" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "painel do mantenedor" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Relatórios lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "todos os relatórios lintian (Ex. incluindo mensagens \"info\"-level)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Zelador Debian" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Listas de Discussão" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Ficheiros" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "pessoasidosas" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Associação" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Informação DB via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Informação DB via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Fórum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Diversos" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nome)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (nome de utilizador)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "hiperligações" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Site da Web Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Pesquisa Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Chave pública OpenPGP via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Chave pública OpenPGP via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Participação NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Informação de contribuição" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informação sobre Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informação alcançável via ssh (para membros Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "domínios debian.net adquiridos" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA " +"informação da base de dados" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informação dos membros do grupo" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Endereços de correio eletrónico" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nome" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Fingerprint OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Nome de utilizador Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Endereço de email não Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Nome de utilizador Debian" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Entrada ausente: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Serviço de Portfolio dos Membros do Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Este serviço tem sido inspirado por Stefano Zacchiroli's Página DDPortfolio na Debian" +" Wiki. Pode criar um conjunto de ligações customizados apontando para" +" informações, ou de membro Debian, ou de mantenedor de pacotes a respeito" +" de Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Sofware Livre" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"O serviço está disponível sob os termos da Licença Pública Geral " +"Affero GNU conforme publicado pela the Free Software Foundation, " +"tanto na versão 3 da licença, como (a seu critério) qualquer versão mais " +"recente. Pode visualizar o código fonte ou cloná-lo%(cloneurl)s " +"usando git. Se quiser traduzir este " +"serviço para o seu idioma pode contribuir em Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Direitos Autorais © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Insira as suas informações pessoais" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Endereço de email:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Mostrar todos os campos" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nome:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Fingerprint OpenPGP" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nome de utilizador Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Endereço de email não Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "nome de utilizador Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Nome de utilizador Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Id de utilizador do fórum:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Formato de saída:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "URLs de Portfolio dos Membros Debian em Construção" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "As suas ligações pessoais" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portfolio de Membro Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Modo de uso" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Erro durante a criação da URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Reiniciar" + diff --git a/debianmemberportfolio/translations/ro/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/ro/LC_MESSAGES/messages.po new file mode 100644 index 0000000..580212b --- /dev/null +++ b/debianmemberportfolio/translations/ro/LC_MESSAGES/messages.po @@ -0,0 +1,401 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.6.4\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2023-03-30 22:37+0000\n" +"Last-Translator: Remus-Gabriel Chelu \n" +"Language: ro\n" +"Language-Team: Romanian \n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 " +"< 20)) ? 1 : 2;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Prezentare generală" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Prezentare generală a pachetului membrului Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Prezentare generală a pachetului membrului Debian\n" +"... se afișează toate adresele de poștă electronică" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Erori" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"Erori \n" +"(notă: co-responsabilii nu sunt listați, consultați #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "Erori raportate" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "etichete puse de utilizator" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "corespondent (persoana de contact) pentru erori" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "grafic al istoricului anual de rapoarte de erori deschise" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Construire" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "build d.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "Iglu" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Asigurarea calității" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "tabloul de bord al responsabilului" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "rapoarte lintian" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "rapoarte complete lintian (adică, inclusiv mesaje la nivel de „info”)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "părticele (piuparts)" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Recepționist Debian" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Liste de corespondență" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "liste d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "liste a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Fișiere" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "persoane.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "persoane în vârstă" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Membru" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Informații din BD via Finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Informații din BD via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Diverse" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags (etichete-debian)" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (nume)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (nume de utilizator)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "legături" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Situl web Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Căutare în Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Cheie publică OpenPGP via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Cheie publică OpenPGP via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "Participare NM, AM" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Informații privind contribuția" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Informații despre Repology" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Informații accesibile prin ssh (pentru membrii Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "domeniile debian.net deținute" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Informații ale bazei de date MIA" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Informații despre apartenența la grup" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Adresa de e-mail" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Nume" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Amprentă digitală OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Numele de utilizator Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Adresa de e-mail non Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Numele de utilizator Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Lipsește intrarea: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Serviciul de portofoliu al membrilor Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Logo Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Acest serviciu a fost inspirat de pagina DDPortfolio a lui " +"Stefano Zacchiroli din Debian Wiki. Puteți crea un set de trimiteri " +"personalizate care să conducă la informații despre Debian ale unui membru" +" Debian sau ale responsabilului pachetului." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Software liber" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Serviciul este disponibil în conformitate cu termenii Licența publică generală " +"GNU Affero publicată de Free Software Foundation, fie versiunea 3 a " +"licenței, fie (la alegerea dvs.) orice versiune ulterioară. Puteți să răsfoiți codul sursă sau să-l clonați din %(cloneurl)s folosind " +"git. Dacă doriți să traduceți acest " +"serviciu în limba dvs., puteți contribui la Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Drepturi de autor © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Introduceți informațiile dvs. personale" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Portofoliu de Membru Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Adresa de e-mail:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Afișează toate câmpurile formularului" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Nume:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Amprentă digitală OpenPGP:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Nume utilizator Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Adresa de e-mail non Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Numele de utilizator Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Numele de utilizator Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "ID utilizator forum:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Format de ieșire:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Creează adresele URL pentru portofoliul de membru al Debian" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Legăturile dvs. personale" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Portofoliu de membru al Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Utilizare" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "adresa URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Eroare în timpul creării adresei URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Reîncepe" + diff --git a/debianmemberportfolio/translations/ru/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/ru/LC_MESSAGES/messages.po new file mode 100644 index 0000000..8741787 --- /dev/null +++ b/debianmemberportfolio/translations/ru/LC_MESSAGES/messages.po @@ -0,0 +1,401 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-01-11 15:52+0000\n" +"Last-Translator: Nikita Epifanov \n" +"Language: ru\n" +"Language-Team: Russian \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Обзор" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Обзор пакетов участников Debian" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Обзор пакетов участников Debian\n" +"... отображение всех адресов электронной почты" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Ошибки" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"полученные ошибки\n" +"(примечание: со-сопровождающие не указаны, см. #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "сообщения об ошибках" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "теги пользователей" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "корреспондент по вопросам ошибок" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "график истории открытых ошибок за один год" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Сборка" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "иглу" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Гарантия качества" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "панель мониторинга" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Lintian отчеты" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "полные отчеты Lintian (т. е. включая сообщения уровня \"информация\")" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian Janitor" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Списки рассылки" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Файлы" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Членство" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "Информация о ДБ по отпечатку" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "Информация о ДБ по HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Форум" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Разное" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Планета Debian (имя)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Планета Debian (имя пользователя)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "ссылки" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Сайт Debian" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Поиск Debian" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "Открытый ключ OpenPGP через отпечаток" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "Открытый ключ OpenPGP через HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM, AM участие" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Информация о вкладе" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Информация о репологии" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Информация доступна по ssh (для членов Debian)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "собственные домены debian.net" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"Информация из базы данных MIA" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Информация о членстве в группе" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "Адрес электронной почты" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Имя" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "Отпечаток OpenPGP" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Имя пользователя Debian" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Электронный адрес, отличный от Debian" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Имя пользователя Salsa" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Пропущенный ввод: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Служба портфолио участников Debian" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Логотип Debian" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Этот сервис был вдохновлен страницей Стефано Заккироли DDPortfolio в Debian " +"Wiki. Вы можете создать набор настраиваемых ссылок, ведущих к " +"информации участника Debian или сопровождающего пакета относительно " +"Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - Свободное программное обеспечение" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Служба доступна на условиях Стандартной общественной " +"лицензии GNU опубликованной Фондом свободного программного " +"обеспечения, либо 3 версии Лицензии, либо (по вашему выбору) любой более " +"поздней версии. Вы можете просмотреть исходный код или клонировать его" +" из %(cloneurl)s " +"используя git. Если вы хотите " +"перевести эту услугу на свой язык, вы можете внести свой вклад по ссылке " +"Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Введите вашу личную информацию" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Портфолио участников Debian" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "Адрес электронной почты:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Показать все поля формы" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Имя:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "Отпечаток OpenPGP" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Имя пользователя Debian:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Электронный адрес, отличный от Debian:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Имя пользователя Salsa:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Имя пользователя Wiki:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "ID пользователя форума:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Формат вывода:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Создание URL-адресов портфолио участников Debian" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Ваши личные ссылки" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Портфолио участников Debian" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Использование" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Ошибка при создании URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Перезапустить" + diff --git a/debianmemberportfolio/translations/sv/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/sv/LC_MESSAGES/messages.po new file mode 100644 index 0000000..b5c3a1e --- /dev/null +++ b/debianmemberportfolio/translations/sv/LC_MESSAGES/messages.po @@ -0,0 +1,398 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2023-02-01 11:00+0000\n" +"Last-Translator: tygyh \n" +"Language: sv\n" +"Language-Team: Swedish \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "Översikt" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Debian-medlemspaketets översikt" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Debian-medlemspaketets översikt\n" +"... visar alla e-postadresser" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "Buggar" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"buggar mottagna\n" +"(Obs: medansvariga som inte finns listade, se #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "buggar rapporterade" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "användartaggar" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "korrespondent för buggar" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "ett års öppen bugghistorik diagram" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "Bygge" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "bygged.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "Kvalitetssäkring" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "instrumentpanel för underhållare" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "lintian rapporter" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "fullständiga lintianrapporter (dvs. inklusive \"info\" -nivåmeddelanden)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian Vaktmästare" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "Sändlistor" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "Filer" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "oldpeople" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "Medlemskap" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "DB-information via finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "DB-information via HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "Forum" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "Diverse" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "debtags" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (namn)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (användarnamn)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "länkar" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian webbplats" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian sökning" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "OpenPGP offentlig nyckel via finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "OpenPGP offentlig nyckel via HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM, AM deltagande" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "Information om bidrag" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Information om repologi" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "Information som kan nås via SSH (för Debianmedlemmar)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "ägda debian.net domäner" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" +"MIA " +"databasinformation" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "Information om gruppmedlemskap" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "E-postadress" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "Namn" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP-fingeravtryck" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian användarnamn" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "Icke Debian e-postadress" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsa användarnamn" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "Saknad inmatning: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Debian medlemsportföljtjänst" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debian logotyp" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"Den här tjänsten har inspirerats av Stefano Zacchirolis DDPortfolio-sida i Debian " +"Wiki. Du kan skapa en uppsättning anpassade länkar som leder till " +"information om en Debian-medlem eller paketunderhållare om Debian." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - fri programvara" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"Tjänsten är tillgänglig under villkoren i GNU Affero General Public" +" License som publiceras av Free Software Foundation, antingen version" +" 3 i licensen, eller (efter eget val) någon senare version. Du kan bläddra i " +"källkoden eller klona den från %(cloneurl)s med git. Om du vill översätta den här tjänsten till ditt språk" +" kan du bidra till Weblate." + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "Ange din personliga information" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Debian medlemsportfölj" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "E-postadress:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "Visa alla formulärfält" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "Namn:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "OpenPGP-fingeravtryck:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debian användarnamn:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "Icke Debian e-postadress:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsa användarnamn:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wiki användarnamn:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "Forum användar-id:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "Utdataformat:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "Bygg webbadresser till Debian medlemsportfölj" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "Dina personliga länkar" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Debian medlemsportfölj" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "Användning" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "Fel under skapandet av URL:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "Starta om" + diff --git a/debianmemberportfolio/translations/zh_CN/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/zh_CN/LC_MESSAGES/messages.po new file mode 100644 index 0000000..967e2d8 --- /dev/null +++ b/debianmemberportfolio/translations/zh_CN/LC_MESSAGES/messages.po @@ -0,0 +1,391 @@ +# German translations for the Debian Member Portfolio Service. +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2022-11-26 21:48+0000\n" +"Last-Translator: billchenchina \n" +"Language: zh_CN\n" +"Language-Team: Chinese (Simplified) \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "概述" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Debian 成员的软件包概览" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Debian 成员的软件包概览\n" +"... 显示所有邮件地址" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "缺陷" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" +"bugs 接收\n" +"(注意: 合作维护者未列入, 详见 #430986)" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "bugs 报告" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "用户标签" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "需要支持的和未来应有的包(WNPP)" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "bug的通信者" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "一年处理Bug历史图表" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "构建" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "buildd.d.o" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "冰屋(igloo)" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "质量保证" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "维护者面板" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "Lintian报告" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "全部Lintian报告(即包括\"info\"级信息)" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "piuparts" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "Debian 守门人" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "邮件列表" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "lists.d.o" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "lists.a.d.o" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "文件" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "people.d.o" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "老人" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "成员关系" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "NM" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "DB信息,通过finger" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "DB信息,通过HTTP" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "Salsa" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "Wiki" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "论坛" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "杂项" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "包标签" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "Planet Debian (名字)" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "Planet Debian (用户名)" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "链接" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "Debian网站" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "Debian搜索" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "OpenPGP公钥,通过finger" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "OpenPGP公钥,通过HTTP" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "NM, AM 参加" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "贡献信息" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "Repology信息" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "信息可获取,通过ssh(DM专用)" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "拥有 debian.net 领域" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "MIA 数据库信息" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "群组会员信息" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "邮件地址" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "姓名" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "OpenPGP指纹" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "Debian用户名" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "非Debian邮件地址" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "Salsa用户名" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "缺少输入: %s" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "Debian 成员职责目录(Member Portfolio)服务" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "Debian Logo" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" +"这个服务由 Stefano Zacchiroli的 DDPortfolio 的 Debian " +"Wiki页面 得到灵感. 你可以创建一个指向 Debian Member 的或包维护者的关于Debian的信息的定制链接集合." + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "AGPL - 自由软件" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" +"这个服务在由自由软件基金会(FSF)发布的 GNU Affero General Public" +" License 第三版或(可选)更高版本协议下可用,可以点击 查看源代码,或从 %(cloneurl)s 使用 git 来克隆。如果想将这个服务翻译为你的语言,可以在这里投稿 Weblate。" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "Copyright © 2009-2023 Jan Dittberner" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "输入你的个人信息" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "Debian Member Portfolio" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "邮件地址:" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "显示所有字段" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "姓名:" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "OpenPGP指纹:" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "Debian用户名:" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "非Debian邮件地址:" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "Salsa用户名:" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "Wiki用户名:" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "论坛用户id:" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "输出格式:" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "构建Debian Member Prortfolio链接" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "你的个人链接" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "Debian 成员职责目录" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "使用" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "URL" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "在 URL 创建过程中的错误:" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "重启" + diff --git a/debianmemberportfolio/translations/zh_Hant/LC_MESSAGES/messages.po b/debianmemberportfolio/translations/zh_Hant/LC_MESSAGES/messages.po new file mode 100644 index 0000000..f9fdce4 --- /dev/null +++ b/debianmemberportfolio/translations/zh_Hant/LC_MESSAGES/messages.po @@ -0,0 +1,381 @@ +# German translations for the Debian Member Portfolio Service. +# +# Copyright (C) 2009-2014 Jan Dittberner +# This file is distributed under the same license as the Debian Member +# Portfolio Service project. +# Translators: +# Jan Dittberner , 2009-2014 +msgid "" +msgstr "" +"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" +"Report-Msgid-Bugs-To: jan@dittberner.info\n" +"POT-Creation-Date: 2023-06-03 18:22+0200\n" +"PO-Revision-Date: 2019-01-20 15:12+0000\n" +"Last-Translator: Louies \n" +"Language: zh_Hant\n" +"Language-Team: Chinese (Traditional) \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: debianmemberportfolio/forms.py:64 +msgid "JSON" +msgstr "JSON" + +#: debianmemberportfolio/forms.py:64 +msgid "HTML" +msgstr "HTML" + +#: debianmemberportfolio/views.py:42 +msgid "Overview" +msgstr "總覽" + +#: debianmemberportfolio/views.py:43 +msgid "Debian Member's Package Overview" +msgstr "Debian 會員的套餐總覽" + +#: debianmemberportfolio/views.py:44 +msgid "" +"Debian Member's Package Overview\n" +"... showing all email addresses" +msgstr "" +"Debian 會員套件概述\n" +"...顯示所有電子郵件地址" + +#: debianmemberportfolio/views.py:50 +msgid "Bugs" +msgstr "錯誤" + +#: debianmemberportfolio/views.py:51 +msgid "" +"bugs received\n" +"(note: co-maintainers not listed, see #430986)" +msgstr "" + +#: debianmemberportfolio/views.py:57 +msgid "bugs reported" +msgstr "錯誤回報" + +#: debianmemberportfolio/views.py:58 +msgid "user tags" +msgstr "用戶標籤" + +#: debianmemberportfolio/views.py:59 +msgid "WNPP" +msgstr "WNPP" + +#: debianmemberportfolio/views.py:60 +msgid "correspondent for bugs" +msgstr "" + +#: debianmemberportfolio/views.py:61 +msgid "one year open bug history graph" +msgstr "" + +#: debianmemberportfolio/views.py:64 +msgid "Build" +msgstr "建構" + +#: debianmemberportfolio/views.py:65 +msgid "buildd.d.o" +msgstr "建構公司" + +#: debianmemberportfolio/views.py:66 +msgid "igloo" +msgstr "igloo" + +#: debianmemberportfolio/views.py:69 +msgid "Quality Assurance" +msgstr "品質保證" + +#: debianmemberportfolio/views.py:70 +msgid "maintainer dashboard" +msgstr "維護人員儀錶板" + +#: debianmemberportfolio/views.py:71 +msgid "lintian reports" +msgstr "lintian 報導" + +#: debianmemberportfolio/views.py:72 +msgid "full lintian reports (i.e. including \"info\"-level messages)" +msgstr "" + +#: debianmemberportfolio/views.py:76 +msgid "piuparts" +msgstr "" + +#: debianmemberportfolio/views.py:77 +msgid "Debian Janitor" +msgstr "" + +#: debianmemberportfolio/views.py:80 +msgid "Mailing Lists" +msgstr "郵遞清單" + +#: debianmemberportfolio/views.py:81 +msgid "lists.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:82 +msgid "lists.a.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:85 +msgid "Files" +msgstr "檔案" + +#: debianmemberportfolio/views.py:86 +msgid "people.d.o" +msgstr "" + +#: debianmemberportfolio/views.py:87 +msgid "oldpeople" +msgstr "" + +#: debianmemberportfolio/views.py:90 +msgid "Membership" +msgstr "" + +#: debianmemberportfolio/views.py:91 +msgid "NM" +msgstr "" + +#: debianmemberportfolio/views.py:92 +msgid "DB information via finger" +msgstr "" + +#: debianmemberportfolio/views.py:93 +msgid "DB information via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:94 +msgid "Salsa" +msgstr "" + +#: debianmemberportfolio/views.py:95 +msgid "Wiki" +msgstr "" + +#: debianmemberportfolio/views.py:96 +msgid "Forum" +msgstr "" + +#: debianmemberportfolio/views.py:99 +msgid "Miscellaneous" +msgstr "" + +#: debianmemberportfolio/views.py:100 +msgid "debtags" +msgstr "" + +#: debianmemberportfolio/views.py:101 +msgid "Planet Debian (name)" +msgstr "" + +#: debianmemberportfolio/views.py:102 +msgid "Planet Debian (username)" +msgstr "" + +#: debianmemberportfolio/views.py:103 +msgid "links" +msgstr "" + +#: debianmemberportfolio/views.py:104 +msgid "Debian website" +msgstr "" + +#: debianmemberportfolio/views.py:105 +msgid "Debian search" +msgstr "" + +#: debianmemberportfolio/views.py:106 +msgid "OpenPGP public key via finger" +msgstr "" + +#: debianmemberportfolio/views.py:107 +msgid "OpenPGP public key via HTTP" +msgstr "" + +#: debianmemberportfolio/views.py:108 +msgid "NM, AM participation" +msgstr "" + +#: debianmemberportfolio/views.py:109 +msgid "Contribution information" +msgstr "" + +#: debianmemberportfolio/views.py:110 +msgid "Repology information" +msgstr "" + +#: debianmemberportfolio/views.py:113 +msgid "Information reachable via ssh (for Debian Members)" +msgstr "" + +#: debianmemberportfolio/views.py:114 +msgid "owned debian.net domains" +msgstr "" + +#: debianmemberportfolio/views.py:115 +msgid "" +"MIA " +"database information" +msgstr "" + +#: debianmemberportfolio/views.py:119 +msgid "Group membership information" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:44 +msgid "Email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:45 +msgid "Name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:46 +msgid "OpenPGP fingerprint" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:47 +msgid "Debian user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:48 +msgid "Non Debian email address" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:49 +msgid "Salsa user name" +msgstr "" + +#: debianmemberportfolio/model/urlbuilder.py:128 +#: debianmemberportfolio/model/urlbuilder.py:138 +#, python-format +msgid "Missing input: %s" +msgstr "" + +#: debianmemberportfolio/templates/base.html:24 +#: debianmemberportfolio/templates/base.html:31 +msgid "Debian Member Portfolio Service" +msgstr "" + +#: debianmemberportfolio/templates/base.html:30 +msgid "Debian Logo" +msgstr "" + +#: debianmemberportfolio/templates/base.html:32 +msgid "" +"This service has been inspired by Stefano Zacchiroli's DDPortfolio page in the " +"Debian Wiki. You can create a set of customized links leading to a " +"Debian Member's or package maintainer's information regarding Debian." +msgstr "" + +#: debianmemberportfolio/templates/base.html:39 +msgid "AGPL - Free Software" +msgstr "" + +#: debianmemberportfolio/templates/base.html:40 +#, python-format +msgid "" +"The service is available under the terms of the GNU Affero General Public" +" License as published by the Free Software Foundation, either version" +" 3 of the License, or (at your option) any later version. You can browse the" +" source code or clone it from %(cloneurl)s using git. If you want to translate this service to your " +"language you can contribute at Weblate." +msgstr "" + +#: debianmemberportfolio/templates/base.html:41 +msgid "Copyright © 2009-2023 Jan Dittberner" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:22 +msgid "Enter your personal information" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:29 +msgid "Debian Member Portfolio" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:31 +msgid "Email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:40 +msgid "Show all form fields" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:43 +msgid "Name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:50 +msgid "OpenPGP fingerprint:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:57 +msgid "Debian user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:64 +msgid "Non Debian email address:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:71 +msgid "Salsa user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:78 +msgid "Wiki user name:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:85 +msgid "Forum user id:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:92 +msgid "Output format:" +msgstr "" + +#: debianmemberportfolio/templates/showform.html:99 +msgid "Build Debian Member Portfolio URLs" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:21 +msgid "Your personal links" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:25 +msgid "Debian Member Porfolio" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "Usage" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:28 +msgid "URL" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:38 +msgid "Error during URL creation:" +msgstr "" + +#: debianmemberportfolio/templates/showurls.html:59 +msgid "Restart" +msgstr "" + +#~ msgid "Copyright © 2009-2022 Jan Dittberner" +#~ msgstr "" + diff --git a/debianmemberportfolio/views.py b/debianmemberportfolio/views.py new file mode 100644 index 0000000..49f44a1 --- /dev/null +++ b/debianmemberportfolio/views.py @@ -0,0 +1,223 @@ +# -*- python -*- +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service views +# +# Copyright © 2015-2023 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +import json +import logging + +from config import LANGUAGES +from debianmemberportfolio import app, babel +from flask import abort, g, make_response, render_template, request + +# noinspection PyPep8Naming +from flask_babel import lazy_gettext as N_ + +from .forms import DeveloperData, DeveloperDataRequest +from .model import dddatabuilder +from .model.urlbuilder import build_urls + +log = logging.getLogger(__name__) + +#: This dictionary defines groups of labeled portfolio items. +_LABELS = { + "overview": { + "label": N_("Overview"), + "ddpo": N_("Debian Member's Package Overview"), + "alladdresses": N_( + """Debian Member's Package Overview +... showing all email addresses""" + ), + }, + "bugs": { + "label": N_("Bugs"), + "received": N_( + """bugs received +(note: co-maintainers not listed, see \ +#430986)""" + ), + "reported": N_("bugs reported"), + "usertags": N_("user tags"), + "wnpp": N_('WNPP'), + "correspondent": N_("correspondent for bugs"), + "graph": N_("one year open bug history graph"), + }, + "build": { + "label": N_("Build"), + "buildd": N_("buildd.d.o"), + "igloo": N_("igloo"), + }, + "qa": { + "label": N_("Quality Assurance"), + "dmd": N_("maintainer dashboard"), + "lintian": N_("lintian reports"), + "lintianfull": N_( + 'full lintian reports (i.e. including \ +"info"-level messages)' + ), + "piuparts": N_("piuparts"), + "janitor": N_("Debian Janitor"), + }, + "lists": { + "label": N_("Mailing Lists"), + "dolists": N_("lists.d.o"), + "adolists": N_("lists.a.d.o"), + }, + "files": { + "label": N_("Files"), + "people": N_("people.d.o"), + "oldpeople": N_("oldpeople"), + }, + "membership": { + "label": N_("Membership"), + "nm": N_("NM"), + "dbfinger": N_("DB information via finger"), + "db": N_("DB information via HTTP"), + "salsa": N_("Salsa"), + "wiki": N_("Wiki"), + "forum": N_("Forum"), + }, + "miscellaneous": { + "label": N_("Miscellaneous"), + "debtags": N_("debtags"), + "planetname": N_("Planet Debian (name)"), + "planetuser": N_("Planet Debian (username)"), + "links": N_("links"), + "website": N_("Debian website"), + "search": N_("Debian search"), + "gpgfinger": N_("OpenPGP public key via finger"), + "gpgweb": N_("OpenPGP public key via HTTP"), + "nm": N_("NM, AM participation"), + "contrib": N_("Contribution information"), + "repology": N_("Repology information"), + }, + "ssh": { + "label": N_("Information reachable via ssh (for Debian Members)"), + "owndndoms": N_("owned debian.net domains"), + "miainfo": N_( + 'MIA database information' + ), + "groupinfo": N_("Group membership information"), + }, +} + +#: list of field name tuples for Debian Maintainers +DM_TUPLES = (("name", "name"), ("openpgpfp", "openpgpfp"), ("nonddemail", "email")) + +#: list of field name tuples for Debian Developers +DD_TUPLES = (("username", "username"), ("salsausername", "username")) + + +def _get_label(section, url=None): + if section in _LABELS: + if url: + if url in _LABELS[section]: + return _LABELS[section][url] + elif "label" in _LABELS[section]: + return _LABELS[section]["label"] + if url: + return "%s.%s" % (section, url) + return section + + +@babel.localeselector +def get_locale(): + return request.accept_languages.best_match(LANGUAGES.keys()) + + +@app.before_request +def before_request(): + g.locale = get_locale() + + +@app.route("/") +def index(): + form = DeveloperData() + return render_template("showform.html", form=form) + + +@app.route("/result") +def urllist(): + form = DeveloperData(request.values) + if form.validate(): + fields = dddatabuilder.build_data(form.data["email"]) + + form_data = form.data.copy() + + if fields["type"] in (dddatabuilder.TYPE_DD, dddatabuilder.TYPE_DM): + for dmtuple in DM_TUPLES: + if not form_data[dmtuple[0]]: + form_data[dmtuple[0]] = fields[dmtuple[1]] + if fields["type"] == dddatabuilder.TYPE_DD: + for ddtuple in DD_TUPLES: + if not form_data[ddtuple[0]]: + form_data[ddtuple[0]] = fields[ddtuple[1]] + if not form_data["wikihomepage"] and form_data["name"]: + log.debug("generate wikihomepage from name") + form_data["wikihomepage"] = "".join( + [part.capitalize() for part in form_data["name"].split()] + ) + + data = build_urls(form_data) + + if form_data["mode"] == "json": + response = make_response( + json.dumps( + dict( + [ + ("{}.{}".format(entry[1], entry[2].name), entry[3]) + for entry in data + if entry[0] == "url" + ] + ) + ) + ) + response.headers["Content-Type"] = "application/json" + return response + + for entry in data: + if entry[0] in ("url", "error"): + entry.append(_get_label(entry[1], entry[2].name)) + elif entry[0] == "section": + entry.append(_get_label(entry[1])) + + return render_template("showurls.html", urldata=data) + return render_template("showform.html", form=form) + + +@app.route("/htmlformhelper.js") +def formhelper_js(): + response = make_response(render_template("showformscript.js")) + response.headers["Content-Type"] = "text/javascript; charset=utf-8" + return response + + +@app.route("/showformscripts/fetchdddata/") +def fetchdddata(): + form = DeveloperDataRequest(request.values) + if form.validate(): + fields = dddatabuilder.build_data(form.data["email"]) + log.debug(fields) + response = make_response(json.dumps(fields)) + response.headers["Content-Type"] = "application/json" + return response + abort(400, "\n".join(["%s: %s" % (key, form.errors[key]) for key in form.errors])) diff --git a/development.ini b/development.ini deleted file mode 100644 index ffa4c63..0000000 --- a/development.ini +++ /dev/null @@ -1,72 +0,0 @@ -# -# ddportfolioservice - Pylons development environment configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = true -# Uncomment and replace with the address which should receive any error reports -#email_to = you@yourdomain.com -smtp_server = localhost -error_email_from = paste@localhost - -[server:main] -use = egg:Paste#http -host = 127.0.0.1 -port = 5000 - -[app:main] -use = egg:ddportfolioservice -full_stack = true -static_files = true - -cache_dir = %(here)s/data -beaker.session.key = ddportfolioservice -beaker.session.secret = somesecret - -# If you'd like to fine-tune the individual locations of the cache data dirs -# for the Cache data, or the Session saves, un-comment the desired settings -# here: -#beaker.cache.data_dir = %(here)s/data/cache -#beaker.session.data_dir = %(here)s/data/sessions - -# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* -# Debug mode will enable the interactive debugging tool, allowing ANYONE to -# execute malicious code after an exception is raised. -#set debug = false - - -# Logging configuration -[loggers] -keys = root, routes, ddportfolioservice - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = INFO -handlers = console - -[logger_routes] -level = INFO -handlers = -qualname = routes.middleware -# "level = DEBUG" logs the route matched and routing variables. - -[logger_ddportfolioservice] -level = DEBUG -handlers = -qualname = ddportfolioservice - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s -datefmt = %H:%M:%S diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index ce686a8..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Debian Developer Portfolio Service documentation build configuration file, created by -# sphinx-quickstart on Tue Jan 20 22:27:21 2009. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# The contents of this file are pickled, so don't put values in the namespace -# that aren't pickleable (module imports are okay, they're removed automatically). -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If your extensions are in another directory, add it here. If the directory -# is relative to the documentation root, use os.path.abspath to make it -# absolute, like shown here. -#sys.path.append(os.path.abspath('.')) - -# General configuration -# --------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['.templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Debian Developer Portfolio Service' -copyright = u'2009, Jan Dittberner' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1' -# The full version, including alpha/beta/rc tags. -release = '0.1dev' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - - -# Options for HTML output -# ----------------------- - -# The style sheet to use for HTML and HTML Help pages. A file of that name -# must exist either in Sphinx' static/ path, or in one of the custom paths -# given in html_static_path. -html_style = 'default.css' - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['.static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -html_use_modindex = False - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, the reST sources are included in the HTML build as _sources/. -#html_copy_source = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'DebianDeveloperPortfolioServicedoc' - - -# Options for LaTeX output -# ------------------------ - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, document class [howto/manual]). -latex_documents = [ - ('index', 'DebianDeveloperPortfolioService.tex', ur'Debian Developer Portfolio Service Documentation', - ur'Jan Dittberner', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_use_modindex = True diff --git a/docs/doc-requirements.txt b/docs/doc-requirements.txt new file mode 100644 index 0000000..e3e07ea --- /dev/null +++ b/docs/doc-requirements.txt @@ -0,0 +1,60 @@ +alabaster==0.7.13 ; python_version >= "3.8" and python_version < "4.0" +babel==2.12.1 ; python_version >= "3.8" and python_version < "4.0" +cachecontrol[filecache]==0.12.11 ; python_version >= "3.8" and python_version < "4.0" +cachy==0.3.0 ; python_version >= "3.8" and python_version < "4.0" +certifi==2023.5.7 ; python_version >= "3.8" and python_version < "4.0" +cffi==1.15.1 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" +charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "4.0" +cleo==1.0.0a5 ; python_version >= "3.8" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" +crashtest==0.3.1 ; python_version >= "3.8" and python_version < "4.0" +cryptography==41.0.1 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" +distlib==0.3.6 ; python_version >= "3.8" and python_version < "4.0" +docutils==0.17.1 ; python_version >= "3.8" and python_version < "4.0" +entrypoints==0.3 ; python_version >= "3.8" and python_version < "4.0" +filelock==3.12.0 ; python_version >= "3.8" and python_version < "4.0" +html5lib==1.1 ; python_version >= "3.8" and python_version < "4.0" +idna==3.4 ; python_version >= "3.8" and python_version < "4.0" +imagesize==1.4.1 ; python_version >= "3.8" and python_version < "4.0" +importlib-metadata==6.6.0 ; python_version >= "3.8" and python_version < "3.12" +importlib-resources==5.12.0 ; python_version >= "3.8" and python_version < "3.9" +jaraco-classes==3.2.3 ; python_version >= "3.8" and python_version < "4.0" +jeepney==0.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" +jinja2==3.1.2 ; python_version >= "3.8" and python_version < "4.0" +keyring==23.13.1 ; python_version >= "3.8" and python_version < "4.0" +lockfile==0.12.2 ; python_version >= "3.8" and python_version < "4.0" +markupsafe==2.1.3 ; python_version >= "3.8" and python_version < "4.0" +more-itertools==9.1.0 ; python_version >= "3.8" and python_version < "4.0" +msgpack==1.0.5 ; python_version >= "3.8" and python_version < "4.0" +packaging==20.9 ; python_version >= "3.8" and python_version < "4.0" +pexpect==4.8.0 ; python_version >= "3.8" and python_version < "4.0" +pkginfo==1.9.6 ; python_version >= "3.8" and python_version < "4.0" +platformdirs==3.5.1 ; python_version >= "3.8" and python_version < "4.0" +poetry-babel-plugin==0.1.0 ; python_version >= "3.8" and python_version < "4.0" +poetry-core==1.6.1 ; python_version >= "3.8" and python_version < "4.0" +poetry==1.2.0b1 ; python_version >= "3.8" and python_version < "4.0" +ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "4.0" +pycparser==2.21 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" +pygments==2.15.1 ; python_version >= "3.8" and python_version < "4.0" +pylev==1.4.0 ; python_version >= "3.8" and python_version < "4.0" +pyparsing==3.0.9 ; python_version >= "3.8" and python_version < "4.0" +pytz==2023.3 ; python_version >= "3.8" and python_version < "3.9" +pywin32-ctypes==0.2.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" +requests-toolbelt==0.9.1 ; python_version >= "3.8" and python_version < "4.0" +requests==2.31.0 ; python_version >= "3.8" and python_version < "4.0" +secretstorage==3.3.3 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" +shellingham==1.5.0.post1 ; python_version >= "3.8" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" +snowballstemmer==2.2.0 ; python_version >= "3.8" and python_version < "4.0" +sphinx==5.1.1 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.8" and python_version < "4.0" +sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.8" and python_version < "4.0" +tomlkit==0.11.8 ; python_version >= "3.8" and python_version < "4.0" +urllib3==1.26.16 ; python_version >= "3.8" and python_version < "4.0" +virtualenv==20.23.0 ; python_version >= "3.8" and python_version < "4.0" +webencodings==0.5.1 ; python_version >= "3.8" and python_version < "4.0" +zipp==3.15.0 ; python_version >= "3.8" and python_version < "3.12" diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 39a38d5..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. Debian Developer Portfolio Service documentation master file, created by sphinx-quickstart on Tue Jan 20 22:27:21 2009. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to Debian Developer Portfolio Service's documentation! -============================================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` - diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..35060fc --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# +# Debian Member Portfolio Service documentation build configuration file, +# created by sphinx-quickstart on Tue Jan 20 22:27:21 2009. +# +# This file is execfile()d with the current directory set to its containing +# dir. +# +# The contents of this file are pickled, so don't put values in the namespace +# that aren't pickleable (module imports are okay, they're removed +# automatically). +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If your extensions are in another directory, add it here. If the directory +# is relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) + +# General configuration +# --------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ["sphinx.ext.autodoc", "sphinx.ext.viewcode"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The encoding of source files. +# source_encoding = 'utf-8' + +# General information about the project. +project = "Debian Member Portfolio Service" +copyright = "2009-2023, Jan Dittberner" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = "0.8.0" +# The full version, including alpha/beta/rc tags. +release = version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +language = "en" + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + + +# ----------------------- + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# If false, no module index is generated. +html_use_modindex = False + +# If false, no index is generated. +# html_use_index = True +html_theme = "alabaster" + +# Output file base name for HTML help builder. +htmlhelp_basename = "DebianMemberPortfolioServicedoc" + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +# latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +# latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, document class +# [howto/manual]). +# latex_documents = [ +# ( +# "index", +# "DebianMemberPortfolioService.tex", +# "Debian Member Portfolio Service Documentation", +# "Jan Dittberner", +# "manual", +# ), +# ] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +# latex_preamble = '' + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_use_modindex = True + +master_doc = "index" diff --git a/docs/source/credits.rst b/docs/source/credits.rst new file mode 100644 index 0000000..25a9ea3 --- /dev/null +++ b/docs/source/credits.rst @@ -0,0 +1,45 @@ +Credits +======= + +The Debian Member Portfolio Service contains contributions from several people. + +Code +---- + + * Jan Dittberner + * Paul Wise + * Olivier Berger + * Juri Grabowski + +Translations +------------ + + * Adolfo Jayme Barrientos (Spanish, French, Portuguese (Brazil)) + * Allan Nordhøy (Norwegian Bokmål) + * Boyuan Yang (Chinese (simplified)) + * ButterflyOfFire (French, Portuguese (Brazil)) + * Daniel Manzano (Portugues (Brazil)) + * Frans Spiesschaert (Dutch) + * Heimen Stoffels (Dutch) + * Izharul Haq (Indonesian) + * Jan Dittberner (German, English) + * Manuela Silva (Portugues (Portugal)) + * Mattias Münster (Swedish) + * Michal Biesiada (Polish) + * Nikita Epifanov (Russian) + * Olivier Humbert (French) + * Petter Reinholdtsen (Norwegian Bokmål) + * Prachi Joshi (Marathi) + * Reza Almanda (Indonesian) + * Shuji Sado (Japanese) + * Stéphane Aulery (French) + * Tao Wang (Chinese (simplified)) + * Thanos Siourdakis (Greek) + * Tiago Naufragado (Portugues (Brazil)) + * Wellington Terumi Uemura (Portugues (Brazil)) + * chimez (Chinese (China)) + * ssantos (Portugues (Portugal)) + +If you think your name is missing please tell me (Jan Dittberner) about your +contribution and I'll add you. + diff --git a/docs/source/devdocs.rst b/docs/source/devdocs.rst new file mode 100644 index 0000000..cadbab0 --- /dev/null +++ b/docs/source/devdocs.rst @@ -0,0 +1,158 @@ +Development of Debian Member Portfolio Service +============================================== + +The Debian Member Portfolio Service is implemented in `Python 3 +`_ using the `Flask `_ web +application framework. + +The following sections describe how to setup a local development environment +for the Debian Member Portfolio Service. + +All instructions assume that you work on a Debian system. You should use Python +3 for development. + +Setup of a local development +---------------------------- + +To start working on the source code you need to have `git`_ installed:: + + sudo aptitude install git + +.. _git: http://www.git-scm.com/ + +The canonical git repository for the Debian Member Portfolio Service is +available at https://git.dittberner.info/jan/debianmemberportfolio +To get a clone of the source code you change to a directory of your choice and +invoke git clone:: + + cd ~/src + git clone https://git.dittberner.info/jan/debianmemberportfolio.git + +We use `Poetry `_ for dependency management. Run:: + + poetry install + +to install all required dependencies in a Poetry managed virtual environment. + +Debian Member Portfolio Service needs the JQuery JavaScript library to function +properly. The JQuery library is not included in the git clone and must be +copied into the subdirectory +:file:`debianmemberportfolio/static/javascript/jquery`. On Debian systems you +can install the package libjs-jquery and place a symlink to the directory +:file:`/usr/share/javascript` into :file:`debianmemberportfolio/static`: :: + + sudo aptitude install libjs-jquery + ln -s /usr/share/javascript debianmemberportfolio/static + +Prepare for first startup +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Debian Member Portfolio Service uses data from the Debian keyring to get +information regarding OpenPGP keys and names related to email addresses. Before you +can run the service you need to fetch a copy of the keyring and prepare it for +use by the code. + +.. note:: + + You need rsync and gnupg for these tasks:: + + sudo aptitude install rsync gnupg + +When you have both installed you can run:: + + ./synckeyrings.sh + poetry run python3 debianmemberportfolio/model/keyringanalyzer.py + +The first synchronizes the keyrings in :file:`$HOME/debian/keyring.debian.org` +with files on the `keyring.debian.org `_ host. And +the second generates a key/value database in +:file:`debianmemberportfolio/model/keyringcache.db` that is used by the code. + +Run a development server +~~~~~~~~~~~~~~~~~~~~~~~~ + +You can run a development server using:: + + poetry run python3 run.py + +The output of this command should look like the following:: + + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + * Restarting with stat + +You can now access your development server at the URL that is printed by the command. + +If you want to stop the development server press :kbd:`Ctrl + C`. + +Common development tasks +------------------------ + +Add new URL +~~~~~~~~~~~ + +Debian Member Portfolio Service uses a ini style configuration file +:file:`debianmemberportfolio/model/portfolio.ini` to configure the generated URL +patterns. The actual URL generation is done in +:py:func:`~debianmemberportfolio.views.urllist`. + +If you want to add a new URL type you have to add a line in +:file:`portfolio.ini` and an entry in :py:mod:`~debianmemberportfolio.views`'s +:py:attr:`~debianmemberportfolio.views._LABELS` dictionary. The top level +dictionary keys correspond to sections in the ini file. The dictionary values +are dictionaries themselves that contain a special key ``label`` that defines +the label of the section in the output and keys for each entry to be rendered +in that section. The values in these sub-dictionaries are strings marked for +translation using the :py:func:`~flask_babel.lazy_gettext` function from +:py:mod:`flask_babel`. + +The patterns in :file:`portfolio.ini` can contain the following placeholders +that are filled at runtime: + +================== ======================================== +Placeholder Replacement +================== ======================================== +%(salsausername)s user name on `salsa.debian.org`_ +%(email)s email address (URL encoded) +%(emailnoq)s email address +%(firstchar)s first character of the email address +%(forumsid)s forum user id +%(openpgpfp)s OpenPGP key fingerprint +%(name)s full name (i.e. John Smith) +%(username)s Debian user name +%(wikihomepage)s full name in camel case (i.e. JohnSmith) +================== ======================================== + +.. _salsa.debian.org: https://salsa.debian.org/ + +The replacement of placeholders is performed in the +:py:func:`~debianmemberportfolio.views.urllist` function. And uses data from +the Debian keyring. Access to the pre-parsed keyring data is performed using +the :py:func:`~debianmemberportfolio.model.dddatabuilder.build_data` function +of the module :py:mod:`debianmemberportfolio.model.dddatabuilder`, which uses +several helper functions from :py:mod:`debianmemberportfolio.model.keyfinder` +to access the key information. + +Update translations +~~~~~~~~~~~~~~~~~~~ + +To update the translations you need to include the weblate repository as git remote:: + + git remote add weblate https://hosted.weblate.org/git/debian-member-portfolio-service/translations/ + git fetch --all + +Run the following to merge the latest translations into your local branch:: + + git merge weblate main + + +To extract translations from source files use:: + + poetry run pybabel extract --mapping-file=mapping.cfg --output-file=messages.pot --input-dirs=. + +To merge translations with existing catalogs use:: + + poetry run pybabel update -i messages.pot -d debianmemberportfolio/translations + +Compile the translations to gettext's .mo format using:: + + poetry run pybabel compile -d debianmemberportfolio/translations diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..cfdc5d3 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,28 @@ +.. Debian Member Portfolio Service documentation master file, created by + sphinx-quickstart on Tue Jan 20 22:27:21 2009. You can adapt this file + completely to your liking, but it should at least contain the root `toctree` + directive. + +Debian Member Portfolio Service +=============================== + +The Debian Member Portfolio Service is a web application that provides links to +information regarding the activities of a person related to the `Debian Project +`_. + +The service was originally implemented and is hosted by Jan Dittberner at +http://portfolio.debian.net/. + +.. toctree:: + :maxdepth: 2 + + devdocs + sourcecode + credits + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + diff --git a/docs/source/sourcecode.rst b/docs/source/sourcecode.rst new file mode 100644 index 0000000..1c5dd88 --- /dev/null +++ b/docs/source/sourcecode.rst @@ -0,0 +1,47 @@ +Source documentation +==================== + +The sections below contain mostly autogenerated documentation of the source +code of the Debian Member Portfolio Service. + +Forms +----- + +.. automodule:: debianmemberportfolio.forms + :members: + +Views +----- + +.. automodule:: debianmemberportfolio.views + :members: + +Model +----- + +.. automodule:: debianmemberportfolio.model + :members: + +dddatabuilder +~~~~~~~~~~~~~ + +.. automodule:: debianmemberportfolio.model.dddatabuilder + :members: + +keyfinder +~~~~~~~~~ + +.. automodule:: debianmemberportfolio.model.keyfinder + :members: + +keyringanalyzer +~~~~~~~~~~~~~~~ + +.. automodule:: debianmemberportfolio.model.keyringanalyzer + :members: + +urlbuilder +~~~~~~~~~~ + +.. automodule:: debianmemberportfolio.model.urlbuilder + :members: diff --git a/mapping.cfg b/mapping.cfg new file mode 100644 index 0000000..4914cb0 --- /dev/null +++ b/mapping.cfg @@ -0,0 +1,7 @@ +[jinja2: debianmemberportfolio/templates/*.html] +encoding = utf-8 + +[jinja2: debianmemberportfolio/templates/*.js] +encoding = utf-8 + +[python: **.py] diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..53b1157 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1324 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + +[[package]] +name = "blinker" +version = "1.6.2" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.7" +files = [ + {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"}, + {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"}, +] + +[[package]] +name = "cachecontrol" +version = "0.12.11" +description = "httplib2 caching for requests" +optional = false +python-versions = ">=3.6" +files = [ + {file = "CacheControl-0.12.11-py2.py3-none-any.whl", hash = "sha256:2c75d6a8938cb1933c75c50184549ad42728a27e9f6b92fd677c3151aa72555b"}, + {file = "CacheControl-0.12.11.tar.gz", hash = "sha256:a5b9fcc986b184db101aa280b42ecdcdfc524892596f606858e0b7a8b4d9e144"}, +] + +[package.dependencies] +lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} +msgpack = ">=0.5.2" +requests = "*" + +[package.extras] +filecache = ["lockfile (>=0.9)"] +redis = ["redis (>=2.10.5)"] + +[[package]] +name = "cachy" +version = "0.3.0" +description = "Cachy provides a simple yet effective caching library." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, + {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, +] + +[package.extras] +memcached = ["python-memcached (>=1.59,<2.0)"] +msgpack = ["msgpack-python (>=0.5,<0.6)"] +redis = ["redis (>=3.3.6,<4.0.0)"] + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "cleo" +version = "1.0.0a5" +description = "Cleo allows you to create beautiful and testable command-line interfaces." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "cleo-1.0.0a5-py3-none-any.whl", hash = "sha256:ff53056589300976e960f75afb792dfbfc9c78dcbb5a448e207a17b643826360"}, + {file = "cleo-1.0.0a5.tar.gz", hash = "sha256:097c9d0e0332fd53cc89fc11eb0a6ba0309e6a3933c08f7b38558555486925d3"}, +] + +[package.dependencies] +crashtest = ">=0.3.1,<0.4.0" +pylev = ">=1.3.0,<2.0.0" + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "crashtest" +version = "0.3.1" +description = "Manage Python errors with ease" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, + {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, +] + +[[package]] +name = "cryptography" +version = "41.0.1" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699"}, + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31"}, + {file = "cryptography-41.0.1-cp37-abi3-win32.whl", hash = "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5"}, + {file = "cryptography-41.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5"}, + {file = "cryptography-41.0.1.tar.gz", hash = "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006"}, +] + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "dnspython" +version = "2.3.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, + {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, +] + +[package.extras] +curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] +dnssec = ["cryptography (>=2.6,<40.0)"] +doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] + +[[package]] +name = "email-validator" +version = "1.3.1" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.5" +files = [ + {file = "email_validator-1.3.1-py2.py3-none-any.whl", hash = "sha256:49a72f5fa6ed26be1c964f0567d931d10bf3fdeeacdf97bc26ef1cd2a44e0bda"}, + {file = "email_validator-1.3.1.tar.gz", hash = "sha256:d178c5c6fa6c6824e9b04f199cf23e79ac15756786573c190d2ad13089411ad2"}, +] + +[package.dependencies] +dnspython = ">=1.15.0" +idna = ">=2.0.0" + +[[package]] +name = "entrypoints" +version = "0.3" +description = "Discover and load entry points from installed packages." +optional = false +python-versions = ">=2.7" +files = [ + {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, + {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, +] + +[[package]] +name = "filelock" +version = "3.12.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, + {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, +] + +[package.extras] +docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flask" +version = "2.3.2" +description = "A simple framework for building complex web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, + {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, +] + +[package.dependencies] +blinker = ">=1.6.2" +click = ">=8.1.3" +importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} +itsdangerous = ">=2.1.2" +Jinja2 = ">=3.1.2" +Werkzeug = ">=2.3.3" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + +[[package]] +name = "flask-babel" +version = "2.0.0" +description = "Adds i18n/l10n support to Flask applications" +optional = false +python-versions = "*" +files = [ + {file = "Flask-Babel-2.0.0.tar.gz", hash = "sha256:f9faf45cdb2e1a32ea2ec14403587d4295108f35017a7821a2b1acb8cfd9257d"}, + {file = "Flask_Babel-2.0.0-py3-none-any.whl", hash = "sha256:e6820a052a8d344e178cdd36dd4bb8aea09b4bda3d5f9fa9f008df2c7f2f5468"}, +] + +[package.dependencies] +Babel = ">=2.3" +Flask = "*" +Jinja2 = ">=2.5" +pytz = "*" + +[package.extras] +dev = ["Pallets-Sphinx-Themes", "bumpversion", "ghp-import", "pytest", "pytest-mock", "sphinx"] + +[[package]] +name = "flask-wtf" +version = "1.1.1" +description = "Form rendering, validation, and CSRF protection for Flask with WTForms." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Flask-WTF-1.1.1.tar.gz", hash = "sha256:41c4244e9ae626d63bed42ae4785b90667b885b1535d5a4095e1f63060d12aa9"}, + {file = "Flask_WTF-1.1.1-py3-none-any.whl", hash = "sha256:7887d6f1ebb3e17bf648647422f0944c9a469d0fcf63e3b66fb9a83037e38b2c"}, +] + +[package.dependencies] +Flask = "*" +itsdangerous = "*" +WTForms = "*" + +[package.extras] +email = ["email-validator"] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.6.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, + {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] + +[[package]] +name = "importlib-resources" +version = "5.12.0" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + +[[package]] +name = "jaraco-classes" +version = "3.2.3" +description = "Utility functions for Python class constructs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jaraco.classes-3.2.3-py3-none-any.whl", hash = "sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158"}, + {file = "jaraco.classes-3.2.3.tar.gz", hash = "sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "jeepney" +version = "0.8.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] + +[package.extras] +test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["async_generator", "trio"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "keyring" +version = "23.13.1" +description = "Store and access your passwords safely." +optional = false +python-versions = ">=3.7" +files = [ + {file = "keyring-23.13.1-py3-none-any.whl", hash = "sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd"}, + {file = "keyring-23.13.1.tar.gz", hash = "sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} +importlib-resources = {version = "*", markers = "python_version < \"3.9\""} +"jaraco.classes" = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +completion = ["shtab"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "lockfile" +version = "0.12.2" +description = "Platform-independent file locking module" +optional = false +python-versions = "*" +files = [ + {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, + {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, +] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "more-itertools" +version = "9.1.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.7" +files = [ + {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, + {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, +] + +[[package]] +name = "msgpack" +version = "1.0.5" +description = "MessagePack serializer" +optional = false +python-versions = "*" +files = [ + {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, + {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, + {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, + {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, + {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, + {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, + {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, + {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, + {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, + {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, + {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, + {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, + {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, + {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, + {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, + {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, + {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, + {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, +] + +[[package]] +name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, +] + +[package.dependencies] +pyparsing = ">=2.0.2" + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pkginfo" +version = "1.9.6" +description = "Query metadata from sdists / bdists / installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkginfo-1.9.6-py3-none-any.whl", hash = "sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546"}, + {file = "pkginfo-1.9.6.tar.gz", hash = "sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046"}, +] + +[package.extras] +testing = ["pytest", "pytest-cov"] + +[[package]] +name = "platformdirs" +version = "3.5.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, + {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, +] + +[package.extras] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "poetry" +version = "1.2.0b1" +description = "Python dependency management and packaging made easy." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "poetry-1.2.0b1-py3-none-any.whl", hash = "sha256:e3d68c88492550c48df10c738e962f1f770ad71e715bab878a46f527e1ce81d2"}, + {file = "poetry-1.2.0b1.tar.gz", hash = "sha256:26cf8d309a74fff25d768219c2215a989a530acab886c01de3db07ab70bc7abf"}, +] + +[package.dependencies] +cachecontrol = {version = ">=0.12.9,<0.13.0", extras = ["filecache"]} +cachy = ">=0.3.0,<0.4.0" +cleo = ">=1.0.0a4,<2.0.0" +crashtest = ">=0.3.0,<0.4.0" +entrypoints = ">=0.3,<0.4" +html5lib = ">=1.0,<2.0" +keyring = ">=21.2.0" +packaging = ">=20.4,<21.0" +pexpect = ">=4.7.0,<5.0.0" +pkginfo = ">=1.5,<2.0" +poetry-core = ">=1.1.0a7,<2.0.0" +requests = ">=2.18,<3.0" +requests-toolbelt = ">=0.9.1,<0.10.0" +shellingham = ">=1.1,<2.0" +tomlkit = ">=0.7.0,<1.0.0" +urllib3 = ">=1.26.0,<2.0.0" +virtualenv = "*" + +[[package]] +name = "poetry-babel-plugin" +version = "0.1.0" +description = "Babel plugin for poetry" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "poetry-babel-plugin-0.1.0.tar.gz", hash = "sha256:db9c6f56ce983735af276e006dc940e0163d5878273467f41500a21a4da3b0e8"}, + {file = "poetry_babel_plugin-0.1.0-py3-none-any.whl", hash = "sha256:7d47629d9f83106d36806eb0abdd7cbdac97fccbfcb02e8589e7c6c4b6fc5d31"}, +] + +[package.dependencies] +babel = ">=2.10.1,<3.0.0" +poetry = "1.2.0b1" + +[[package]] +name = "poetry-core" +version = "1.6.1" +description = "Poetry PEP 517 Build Backend" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "poetry_core-1.6.1-py3-none-any.whl", hash = "sha256:70707340447dee0e7f334f9495ae652481c67b32d8d218f296a376ac2ed73573"}, + {file = "poetry_core-1.6.1.tar.gz", hash = "sha256:0f9b0de39665f36d6594657e7d57b6f463cc10f30c28e6d1c3b9ff54c26c9ac3"}, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylev" +version = "1.4.0" +description = "A pure Python Levenshtein implementation that's not freaking GPL'd." +optional = false +python-versions = "*" +files = [ + {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, + {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, +] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.0" +description = "" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, + {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-toolbelt" +version = "0.9.1" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = "*" +files = [ + {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, + {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + +[[package]] +name = "shellingham" +version = "1.5.0.post1" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, + {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "speaklater" +version = "1.3" +description = "implements a lazy string for python useful for use with gettext" +optional = false +python-versions = "*" +files = [ + {file = "speaklater-1.3.tar.gz", hash = "sha256:59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"}, +] + +[[package]] +name = "sphinx" +version = "5.1.1" +description = "Python documentation generator" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Sphinx-5.1.1-py3-none-any.whl", hash = "sha256:309a8da80cb6da9f4713438e5b55861877d5d7976b69d87e336733637ea12693"}, + {file = "Sphinx-5.1.1.tar.gz", hash = "sha256:ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "isort", "mypy (>=0.971)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed-ast"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "tomlkit" +version = "0.11.8" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, + {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, +] + +[[package]] +name = "urllib3" +version = "1.26.16" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.23.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, + {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.11,<4" +platformdirs = ">=3.2,<4" + +[package.extras] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "werkzeug" +version = "2.3.4" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Werkzeug-2.3.4-py3-none-any.whl", hash = "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f"}, + {file = "Werkzeug-2.3.4.tar.gz", hash = "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "wtforms" +version = "3.0.1" +description = "Form validation and rendering for Python web development." +optional = false +python-versions = ">=3.7" +files = [ + {file = "WTForms-3.0.1-py3-none-any.whl", hash = "sha256:837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b"}, + {file = "WTForms-3.0.1.tar.gz", hash = "sha256:6b351bbb12dd58af57ffef05bc78425d08d1914e0fd68ee14143b7ade023c5bc"}, +] + +[package.dependencies] +MarkupSafe = "*" + +[package.extras] +email = ["email-validator"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "b235e5e532af849f09106a0327839cef6cd64ba86f1e36119416f92c1ff5c991" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b5b5d28 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,44 @@ +[tool.poetry] +name = "debianmemberportfolio" +version = "0.8.0" +description = "Service to create Debian Member Portfolio URLs" +authors = ["Jan Dittberner "] +license = "AGPL-3.0+" +readme = "README.md" + +include = [ + "**/*.mo", +] +exclude = [ + "**/*.pot", + "**/*.po", +] + +[tool.poetry.dependencies] +python = "^3.8" +Flask = "^2.2.2" +Jinja2 = "^3.1.2" +MarkupSafe = "^2.1.1" +itsdangerous = "^2.1.2" +Babel = "^2.10.3" +Flask-Babel = "^2.0.0" +pytz = "^2023.3" +speaklater = "^1.3" +flask-wtf = "^1.0.1" +email-validator = "^1.3.0" + +[tool.poetry.dev-dependencies] +poetry-babel-plugin = "~0.1.0" + +[tool.poetry.group.dev.dependencies] +sphinx = "<6" +docutils = "<0.18" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[[tool.poetry_babel_plugin.compile]] +domains = ["messages"] +directory = "debianmemberportfolio/translations" +fuzzy = false diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/run.py b/run.py new file mode 100755 index 0000000..dca85bb --- /dev/null +++ b/run.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# -*- python -*- +# +# Debian Member Portfolio Service Flask runner +# +# Copyright © 2015 Jan Dittberner +# +# This file is part of the Debian Member Portfolio Service. +# +# Debian Member Portfolio Service is free software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the License, +# or (at your option) any later version. +# +# Debian Member Portfolio Service is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +from debianmemberportfolio import app + +if __name__ == '__main__': + app.debug = True + app.run() diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 8b8db3d..0000000 --- a/setup.cfg +++ /dev/null @@ -1,39 +0,0 @@ -[egg_info] -tag_build = dev -tag_svn_revision = true - -[easy_install] -find_links = http://www.pylonshq.com/download/ - -[build_sphinx] -source-dir = docs - -[publish] -doc-dir=docs/html -make-dirs=1 - -[nosetests] -with-pylons = test.ini -cover-package = ddportfolioservice - -# Babel configuration -[compile_catalog] -domain = ddportfolioservice -directory = ddportfolioservice/i18n -statistics = true - -[extract_messages] -add_comments = TRANSLATORS: -output_file = ddportfolioservice/i18n/ddportfolioservice.pot -width = 80 - -[init_catalog] -domain = ddportfolioservice -input_file = ddportfolioservice/i18n/ddportfolioservice.pot -output_dir = ddportfolioservice/i18n - -[update_catalog] -domain = ddportfolioservice -input_file = ddportfolioservice/i18n/ddportfolioservice.pot -output_dir = ddportfolioservice/i18n -previous = true diff --git a/setup.py b/setup.py deleted file mode 100644 index bff403d..0000000 --- a/setup.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- python -*- -# -*- coding: utf-8 -*- -# -# DDPortfolio service setup -# Copyright © 2009, 2010, 2011, 2012 Jan Dittberner -# -# This file is part of DDPortfolio service. -# -# DDPortfolio service is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# DDPortfolio service is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# . -# -try: - from setuptools import setup, find_packages -except ImportError: - from ez_setup import use_setuptools - use_setuptools() - from setuptools import setup, find_packages - -setup( - name='ddportfolioservice', - version='0.2.8', - 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='AGPL-3.0+', - install_requires=["Pylons>=0.10rc1", 'babel>=0.9.4'], - packages=find_packages(exclude=['ez_setup']), - include_package_data=True, - test_suite='nose.collector', - package_data={'ddportfolioservice': ['*.ini', 'i18n/*/LC_MESSAGES/*.mo']}, - message_extractors = {'ddportfolioservice': [ - ('**.py', 'python', None), - ('templates/**.mako', 'mako', None), - ('public/**', 'ignore', None)]}, - zip_safe=False, - entry_points=""" - [paste.app_factory] - main = ddportfolioservice.config.middleware:make_app - - [paste.app_install] - main = pylons.util:PylonsInstaller - """, -) diff --git a/test.ini b/test.ini deleted file mode 100644 index 940a578..0000000 --- a/test.ini +++ /dev/null @@ -1,21 +0,0 @@ -# -# ddportfolioservice - Pylons testing environment configuration -# -# The %(here)s variable will be replaced with the parent directory of this file -# -[DEFAULT] -debug = true -# Uncomment and replace with the address which should receive any error reports -#email_to = you@yourdomain.com -smtp_server = localhost -error_email_from = paste@localhost - -[server:main] -use = egg:Paste#http -host = 127.0.0.1 -port = 5000 - -[app:main] -use = config:development.ini - -# Add additional test specific configuration options as necessary.