# -*- python -*-
# -*- coding: utf8 -*-
#
# DDPortfolio service url builder
# Copyright (c) 2009 Jan Dittberner <jan@dittberner.info>
#
# 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
# <http://www.gnu.org/licenses/>.
#
"""
This module provides the function build_urls to build personalized
URLs using the given information and the URL patterns defined in
ddportfolio.ini.
"""

import ConfigParser
import pkg_resources
from urllib import quote_plus

my_config = ConfigParser.ConfigParser()
my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini'))


def build_urls(fields):
    """Build personalized URLs using the developer information in
    fields."""
    data = {}
    errors = {}
    qfields = dict([(key, quote_plus(fields[key])) for key in fields])
    for section in my_config.sections():
        if my_config.has_option(section, 'urls'):
            for url in my_config.get(section, 'urls').split(','):
                if my_config.has_option(section, url + '.pattern'):
                    try:
                        data[section + '.' + url] = \
                            my_config.get(section, url + '.pattern',
                                          False, qfields)
                    except Exception, e:
                        errors['%s.%s.pattern' % (section, url)] = \
                            [my_config.get(section, '%s.pattern' % url,
                                           True), str(e)]
    return {'data' : data, 'errors' : errors}