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)
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)
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)
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)
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)
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)
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')
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')