Example #1
0
 def test_metadata(self):
     jinja_metadata = 'Metadata-Version: 1.0\r\nName: Jinja2\r\nVersion: 2.6\r\nSummary: A small but fast and easy to use stand-alone template engine written in pure python.\r\nHome-page: http://jinja.pocoo.org/\r\nAuthor: Armin Ronacher\r\nAuthor-email: [email protected]\r\nLicense: BSD\r\nDescription: \r\n        Jinja2\r\n        ~~~~~~\r\n        \r\n        Jinja2 is a template engine written in pure Python.  It provides a\r\n        `Django`_ inspired non-XML syntax but supports inline expressions and\r\n        an optional `sandboxed`_ environment.\r\n        \r\n        Nutshell\r\n        --------\r\n        \r\n        Here a small example of a Jinja template::\r\n        \r\n            {% extends \'base.html\' %}\r\n            {% block title %}Memberlist{% endblock %}\r\n            {% block content %}\r\n              <ul>\r\n              {% for user in users %}\r\n                <li><a href="{{ user.url }}">{{ user.username }}</a></li>\r\n              {% endfor %}\r\n              </ul>\r\n            {% endblock %}\r\n        \r\n        Philosophy\r\n        ----------\r\n        \r\n        Application logic is for the controller but don\'t try to make the life\r\n        for the template designer too hard by giving him too few functionality.\r\n        \r\n        For more informations visit the new `Jinja2 webpage`_ and `documentation`_.\r\n        \r\n        .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)\r\n        .. _Django: http://www.djangoproject.com/\r\n        .. _Jinja2 webpage: http://jinja.pocoo.org/\r\n        .. _documentation: http://jinja.pocoo.org/2/documentation/\r\n        \r\nPlatform: UNKNOWN\r\nClassifier: Development Status :: 5 - Production/Stable\r\nClassifier: Environment :: Web Environment\r\nClassifier: Intended Audience :: Developers\r\nClassifier: License :: OSI Approved :: BSD License\r\nClassifier: Operating System :: OS Independent\r\nClassifier: Programming Language :: Python\r\nClassifier: Programming Language :: Python :: 3\r\nClassifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content\r\nClassifier: Topic :: Software Development :: Libraries :: Python Modules\r\nClassifier: Topic :: Text Processing :: Markup :: HTML\r\n'
     parsed, key_known = parse_metadata(jinja_metadata)
     ret = metadata_to_dict(parsed, key_known)
     self.assertEqual({
         'name': 'Jinja2',
         'license': 'BSD',
         'author': 'Armin Ronacher',
         'metadata-version': '1.0',
         'home-page': 'http://jinja.pocoo.org/',
         'summary': 'A small but fast and easy to use stand-alone template engine written in pure python.',
         'version': '2.6',
         'classifier': [
             'Development Status :: 5 - Production/Stable',
             'Environment :: Web Environment',
             'Intended Audience :: Developers',
             'License :: OSI Approved :: BSD License',
             'Operating System :: OS Independent',
             'Programming Language :: Python',
             'Programming Language :: Python :: 3',
             'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
             'Topic :: Software Development :: Libraries :: Python Modules',
             'Topic :: Text Processing :: Markup :: HTML'
         ],
         'author-email': '*****@*****.**',
         'description': 'Jinja2\n~~~~~~\n\nJinja2 is a template engine written in pure Python.  It provides a\n`Django`_ inspired non-XML syntax but supports inline expressions and\nan optional `sandboxed`_ environment.\n\nNutshell\n--------\n\nHere a small example of a Jinja template::\n\n    {% extends \'base.html\' %}\n    {% block title %}Memberlist{% endblock %}\n    {% block content %}\n      <ul>\n      {% for user in users %}\n        <li><a href="{{ user.url }}">{{ user.username }}</a></li>\n      {% endfor %}\n      </ul>\n    {% endblock %}\n\nPhilosophy\n----------\n\nApplication logic is for the controller but don\'t try to make the life\nfor the template designer too hard by giving him too few functionality.\n\nFor more informations visit the new `Jinja2 webpage`_ and `documentation`_.\n\n.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)\n.. _Django: http://www.djangoproject.com/\n.. _Jinja2 webpage: http://jinja.pocoo.org/\n.. _documentation: http://jinja.pocoo.org/2/documentation/'
     }, ret)
Example #2
0
def cmd_list(args):
    '''This function implements the package list command.

    :param args: the docopt parsed arguments
    '''
    compact = args['--compact']
    filt = args['<filter>']
    distributions = get_shared_data()['distributions']

    if compact:
        print Fore.YELLOW + Style.BRIGHT + \
            'Project Name'.ljust(26) + 'Version'.ljust(14) + 'Summary'
        print '-' * 80

    for dist in distributions:
        if filt:
            if filt.lower() not in dist.project_name.lower():
                continue

        pkg_dist = get_pkg_res().get_distribution(dist.key)
        pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
        parsed, key_known = metadata.parse_metadata(pkg_metadata)
        distinfo = metadata.metadata_to_dict(parsed, key_known)

        if compact:
            cmd_list_compact(dist, distinfo)
        else:
            cmd_list_detail(dist, distinfo)
Example #3
0
def cmd_list(args):
    '''This function implements the package list command.

    :param args: the docopt parsed arguments
    '''
    compact = args['--compact']
    filt = args['<filter>']
    distributions = get_shared_data()['distributions']

    if compact:
        print Fore.YELLOW + Style.BRIGHT + \
            'Project Name'.ljust(26) + 'Version'.ljust(14) + 'Summary'
        print '-' * 80
    
    for dist in distributions:
        if filt:
            if filt.lower() not in dist.project_name.lower():
                continue

        pkg_dist = get_pkg_res().get_distribution(dist.key)
        pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
        parsed, key_known = metadata.parse_metadata(pkg_metadata)
        distinfo = metadata.metadata_to_dict(parsed, key_known)

        if compact:
            cmd_list_compact(dist, distinfo)
        else:
            cmd_list_detail(dist, distinfo)
Example #4
0
def distribution(dist_name=None):
    """ The Distribution entry-point (/distribution/<dist_name>)
    for the Stallion server.

    :param dist_name: the package name
    """

    pkg_dist = get_pkg_res().get_distribution(dist_name)

    data = {}
    data.update(get_shared_data())

    data['dist'] = pkg_dist
    data['breadpath'] = [
        Crumb('Main', url_for('index')),
        Crumb('Package'),
        Crumb(pkg_dist.project_name)
    ]

    settings_overrides = {
        'raw_enabled': 0,  # no raw HTML code
        'file_insertion_enabled': 0,  # no file/URL access
        'halt_level': 2,  # at warnings or errors, raise an exception
        'report_level': 5,  # never report problems with the reST code
    }

    pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
    parsed, key_known = metadata.parse_metadata(pkg_metadata)
    distinfo = metadata.metadata_to_dict(parsed, key_known)

    parts = None
    try:
        parts = publish_parts(source=distinfo['description'],
                              writer_name='html',
                              settings_overrides=settings_overrides)
    except:
        pass

    data['distinfo'] = distinfo
    data['entry_map'] = pkg_dist.get_entry_map()

    if parts is not None:
        data['description_render'] = parts['body']

    return render_template('distribution.html', **data)
Example #5
0
def distribution(dist_name=None):
    """ The Distribution entry-point (/distribution/<dist_name>)
    for the Stallion server.

    :param dist_name: the package name
    """

    pkg_dist = get_pkg_res().get_distribution(dist_name)

    data = {}
    data.update(get_shared_data())

    data['dist'] = pkg_dist
    data['breadpath'] = [Crumb('Main', url_for('index')),
                         Crumb('Package'), Crumb(pkg_dist.project_name)]

    settings_overrides = {
        'raw_enabled': 0,  # no raw HTML code
        'file_insertion_enabled': 0,  # no file/URL access
        'halt_level': 2,  # at warnings or errors, raise an exception
        'report_level': 5,  # never report problems with the reST code
    }

    pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
    parsed, key_known = metadata.parse_metadata(pkg_metadata)
    distinfo = metadata.metadata_to_dict(parsed, key_known)

    parts = None
    try:
        parts = publish_parts(source=distinfo['description'],
                              writer_name='html',
                              settings_overrides=settings_overrides)
    except:
        pass

    data['distinfo'] = distinfo
    data['entry_map'] = pkg_dist.get_entry_map()

    if parts is not None:
        data['description_render'] = parts['body']

    return render_template('distribution.html', **data)
Example #6
0
def distribution(dist_name=None):
    """ The Distribution entry-point (/distribution/<dist_name>)
    for the Stallion server.

    :param dist_name: the package name
    """

    pkg_dist = get_pkg_res().get_distribution(dist_name)

    data = {}
    data.update(get_shared_data())

    data["dist"] = pkg_dist
    data["breadpath"] = [Crumb("Main", url_for("index")), Crumb("Package"), Crumb(pkg_dist.project_name)]

    settings_overrides = {
        "raw_enabled": 0,  # no raw HTML code
        "file_insertion_enabled": 0,  # no file/URL access
        "halt_level": 2,  # at warnings or errors, raise an exception
        "report_level": 5,  # never report problems with the reST code
    }

    pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
    parsed, key_known = metadata.parse_metadata(pkg_metadata)
    distinfo = metadata.metadata_to_dict(parsed, key_known)

    parts = None
    try:
        parts = publish_parts(source=distinfo["description"], writer_name="html", settings_overrides=settings_overrides)
    except:
        pass

    data["distinfo"] = distinfo

    if parts is not None:
        data["description_render"] = parts["body"]

    return render_template("distribution.html", **data)
Example #7
0
 def test_metadata(self):
     jinja_metadata = 'Metadata-Version: 1.0\r\nName: Jinja2\r\nVersion: 2.6\r\nSummary: A small but fast and easy to use stand-alone template engine written in pure python.\r\nHome-page: http://jinja.pocoo.org/\r\nAuthor: Armin Ronacher\r\nAuthor-email: [email protected]\r\nLicense: BSD\r\nDescription: \r\n        Jinja2\r\n        ~~~~~~\r\n        \r\n        Jinja2 is a template engine written in pure Python.  It provides a\r\n        `Django`_ inspired non-XML syntax but supports inline expressions and\r\n        an optional `sandboxed`_ environment.\r\n        \r\n        Nutshell\r\n        --------\r\n        \r\n        Here a small example of a Jinja template::\r\n        \r\n            {% extends \'base.html\' %}\r\n            {% block title %}Memberlist{% endblock %}\r\n            {% block content %}\r\n              <ul>\r\n              {% for user in users %}\r\n                <li><a href="{{ user.url }}">{{ user.username }}</a></li>\r\n              {% endfor %}\r\n              </ul>\r\n            {% endblock %}\r\n        \r\n        Philosophy\r\n        ----------\r\n        \r\n        Application logic is for the controller but don\'t try to make the life\r\n        for the template designer too hard by giving him too few functionality.\r\n        \r\n        For more informations visit the new `Jinja2 webpage`_ and `documentation`_.\r\n        \r\n        .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)\r\n        .. _Django: http://www.djangoproject.com/\r\n        .. _Jinja2 webpage: http://jinja.pocoo.org/\r\n        .. _documentation: http://jinja.pocoo.org/2/documentation/\r\n        \r\nPlatform: UNKNOWN\r\nClassifier: Development Status :: 5 - Production/Stable\r\nClassifier: Environment :: Web Environment\r\nClassifier: Intended Audience :: Developers\r\nClassifier: License :: OSI Approved :: BSD License\r\nClassifier: Operating System :: OS Independent\r\nClassifier: Programming Language :: Python\r\nClassifier: Programming Language :: Python :: 3\r\nClassifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content\r\nClassifier: Topic :: Software Development :: Libraries :: Python Modules\r\nClassifier: Topic :: Text Processing :: Markup :: HTML\r\n'
     parsed, key_known = parse_metadata(jinja_metadata)
     ret = metadata_to_dict(parsed, key_known)
     self.assertDictEqual(
         {
             'name':
             'Jinja2',
             'license':
             'BSD',
             'author':
             'Armin Ronacher',
             'metadata-version':
             '1.0',
             'home-page':
             'http://jinja.pocoo.org/',
             'summary':
             'A small but fast and easy to use stand-alone template engine written in pure python.',
             'version':
             '2.6',
             'classifier': [
                 'Development Status :: 5 - Production/Stable',
                 'Environment :: Web Environment',
                 'Intended Audience :: Developers',
                 'License :: OSI Approved :: BSD License',
                 'Operating System :: OS Independent',
                 'Programming Language :: Python',
                 'Programming Language :: Python :: 3',
                 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
                 'Topic :: Software Development :: Libraries :: Python Modules',
                 'Topic :: Text Processing :: Markup :: HTML'
             ],
             'author-email':
             '*****@*****.**',
             'description':
             'Jinja2\n~~~~~~\n\nJinja2 is a template engine written in pure Python.  It provides a\n`Django`_ inspired non-XML syntax but supports inline expressions and\nan optional `sandboxed`_ environment.\n\nNutshell\n--------\n\nHere a small example of a Jinja template::\n\n    {% extends \'base.html\' %}\n    {% block title %}Memberlist{% endblock %}\n    {% block content %}\n      <ul>\n      {% for user in users %}\n        <li><a href="{{ user.url }}">{{ user.username }}</a></li>\n      {% endfor %}\n      </ul>\n    {% endblock %}\n\nPhilosophy\n----------\n\nApplication logic is for the controller but don\'t try to make the life\nfor the template designer too hard by giving him too few functionality.\n\nFor more informations visit the new `Jinja2 webpage`_ and `documentation`_.\n\n.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)\n.. _Django: http://www.djangoproject.com/\n.. _Jinja2 webpage: http://jinja.pocoo.org/\n.. _documentation: http://jinja.pocoo.org/2/documentation/'
         }, ret)
Example #8
0
def cmd_show(args, short=False):
    '''This function implements the package show command.

    :param args: the docopt parsed arguments
    '''
    proj_name = args['<project_name>']

    try:
        pkg_dist = get_pkg_res().get_distribution(proj_name)
    except:
        print Fore.RED + Style.BRIGHT + \
            'Error: unable to locate the project \'%s\' !' % proj_name
        raise RuntimeError('Project not found !')

    pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
    parsed, key_known = metadata.parse_metadata(pkg_metadata)
    distinfo = metadata.metadata_to_dict(parsed, key_known)

    proj_head = Fore.GREEN + Style.BRIGHT + pkg_dist.project_name
    proj_head += Fore.YELLOW + Style.BRIGHT + ' ' + pkg_dist.version
    print proj_head,

    proj_sum = Fore.WHITE + Style.DIM
    proj_sum += '- ' + parse_dict(distinfo, 'summary', True)
    print proj_sum

    # Remove long fields and used fields
    if 'description' in distinfo:
        del distinfo['description']

    if 'summary' in distinfo:
        del distinfo['summary']

    if 'name' in distinfo:
        del distinfo['name']

    if 'version' in distinfo:
        del distinfo['version']

    classifier = None
    if 'classifier' in distinfo:
        classifier = distinfo['classifier']
        del distinfo['classifier']

    for key in distinfo:
        print get_field_formatted(distinfo, key)

    if short:
        return

    print
    print get_kv_colored('location', pkg_dist.location)
    requires = pkg_dist.requires()

    if len(requires) == 0:
        print get_kv_colored('requires', 'none')
    else:
        req_text = '\n'
        for req in requires:
            req_text += ' ' * 4 + str(req) + '\n'
        print get_kv_colored('requires', req_text)

    entry_points = pkg_dist.get_entry_map()
    console_scripts = entry_points.get('console_scripts')
    if console_scripts:
        console_scr_text = Fore.WHITE + Style.BRIGHT + '  Console Scripts:' + '\n'

        for name, entry in console_scripts.items():
            console_scr_text += Fore.YELLOW + Style.BRIGHT + ' '*4 + \
                name + Fore.WHITE + Style.BRIGHT

            console_scr_text += ' -> ' + Fore.GREEN + Style.BRIGHT + \
                entry.module_name + ':' + ','.join(entry.attrs) + '\n'

        print console_scr_text

    if classifier:
        distinfo['classifier'] = classifier
        print get_field_formatted(distinfo, 'classifier')
Example #9
0
def cmd_show(args, short=False):
    '''This function implements the package show command.

    :param args: the docopt parsed arguments
    '''
    proj_name = args['<project_name>']

    try:
        pkg_dist = get_pkg_res().get_distribution(proj_name)
    except:
        print Fore.RED + Style.BRIGHT + \
            'Error: unable to locate the project \'%s\' !' % proj_name
        raise RuntimeError('Project not found !')

    pkg_metadata = pkg_dist.get_metadata(metadata.METADATA_NAME)
    parsed, key_known = metadata.parse_metadata(pkg_metadata)
    distinfo = metadata.metadata_to_dict(parsed, key_known)

    proj_head = Fore.GREEN + Style.BRIGHT + pkg_dist.project_name
    proj_head += Fore.YELLOW + Style.BRIGHT + ' ' + pkg_dist.version
    print proj_head,

    proj_sum = Fore.WHITE + Style.DIM
    proj_sum += '- ' + parse_dict(distinfo, 'summary', True)
    print proj_sum

    # Remove long fields and used fields
    if 'description' in distinfo:
        del distinfo['description']

    if 'summary' in distinfo:
        del distinfo['summary']

    if 'name' in distinfo:
        del distinfo['name']

    if 'version' in distinfo:
        del distinfo['version']

    classifier = None
    if 'classifier' in distinfo:
        classifier = distinfo['classifier']
        del distinfo['classifier']

    for key in distinfo:
        print get_field_formatted(distinfo, key)

    if short:
        return

    print
    print get_kv_colored('location', pkg_dist.location)
    requires = pkg_dist.requires()

    if len(requires) == 0:
        print get_kv_colored('requires', 'none')
    else:
        req_text = '\n'
        for req in requires:
            req_text += ' '*4 + str(req) + '\n'
        print get_kv_colored('requires', req_text)

    entry_points = pkg_dist.get_entry_map()
    console_scripts = entry_points.get('console_scripts')
    if console_scripts:
        console_scr_text = Fore.WHITE + Style.BRIGHT + '  Console Scripts:' + '\n'
        
        for name, entry in console_scripts.items():
            console_scr_text += Fore.YELLOW + Style.BRIGHT + ' '*4 + \
                name + Fore.WHITE + Style.BRIGHT

            console_scr_text += ' -> ' + Fore.GREEN + Style.BRIGHT + \
                entry.module_name + ':' + ','.join(entry.attrs) + '\n'

        print console_scr_text

    if classifier:
        distinfo['classifier'] = classifier
        print get_field_formatted(distinfo, 'classifier')