Source code for pymyinstall.packaged.packaged_config
# -*- coding: utf-8 -*-
"""
Defines different set of modules to install.
:githublink:`%|py|8`
"""
from .packaged_config_0_minimal import minimal_set
from .packaged_config_1_small import small_set
_modules_set = [minimal_set, small_set]
[docs]def _function_set_name(f):
"""
return the name of a function (not the module)
:param f: function
:return: name
.. versionadded:: 1.1
:githublink:`%|py|23`
"""
name = f.__name__
return name.split(".")[-1]
[docs]def _build_set_correspondance(module_set):
"""
builds a dictionary which returns a dictionary *{ name: function_set }*.
:param module_set: list of functions
:return: dictionary
:githublink:`%|py|34`
"""
res = {}
for f in module_set:
name = _function_set_name(f)
res[name] = f
name = name.replace("_set", "")
res[name] = f
return res
_module_set_name = _build_set_correspondance(_modules_set)
[docs]def get_package_set(name):
"""
return a list of modules included in one the functions imported in this module
:param name: set name
:return: list of modules
See :ref:`l-name-set-table` to get the list of available sets.
:githublink:`%|py|55`
"""
if name not in _module_set_name:
keys = [_.replace("_set", "") for _ in _module_set_name.keys()]
keys = list(sorted(set(keys)))
raise ValueError("unable to find set for {0}\navailable sets:\n{1}".format(
name, "\n".join(keys)))
return _module_set_name[name]
[docs]def name_sets_dataframe(module_set=None):
"""
returns a RST tables which described all the available sets
:param module_set: list of module sets or None to get all the sets described in this module
:return: list of dictionaries ``[ { "name": name1, "description": description } ]``
the functions requires
:githublink:`%|py|72`
"""
if module_set is None:
module_set = _modules_set
def process_doc(doc):
lines = [_.strip() for _ in doc.split("\n")]
res = []
for line in lines:
if "@return" in line:
break
if not line.startswith(".. index::"):
res.append(line)
return (" ".join(res)).strip()
res = [{"name": _function_set_name(f).replace("_set", ""),
"description": process_doc(f.__doc__)} for f in module_set]
so = [(_["name"], _) for _ in res]
so.sort()
return [_[1] for _ in so]
[docs]def classifiers2string(li):
"""
Shortens the list of classifiers into a string.
:param li: list
:return: string
Example::
['Development Status :: 4 - Beta', 'Programming Language :: Python',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.9', 'License :: OSI Approved :: Apache Software License']
:githublink:`%|py|105`
"""
if li is None:
return ""
res = []
for cl in sorted(set(li)):
if cl == "Programming Language :: Python":
s = "Python"
else:
s = cl.replace("Programming Language :: Python :: ", "")
s = s.replace("License :: ", "")
s = s.replace("OSI Approved :: ", "OSI Approved ")
s = s.replace("Development Status :: ", "")
s = s.replace("Operating System :: Microsoft :: ", "")
s = s.replace("Operating System :: ", "")
s = s.replace("Implementation :: ", "")
s = s.replace("Programming Language :: ", "")
s = s.replace("Environment :: ", "")
s = s.replace("POSIX :: ", "")
s = s.replace("BSD :: ", "")
if s == "3 :: Only":
s = "py3"
elif s == "2 :: Only":
s = "py2"
elif s == "MacOS :: MacOS X":
s = "MacOS/X"
elif s == "POSIX :: Linux":
s = "Linux"
elif s == "POSIX :: BSD :: FreeBSD":
s = "FreeBSD"
elif s == "X11 Applications :: Qt":
s = "Qt"
elif s.startswith("Windows"):
s = "Windows"
if ("Framework" not in s and "Topic" not in s and
"Intended Audience" not in s and "Natural Language" not in s):
res.append(s)
return ", ".join(res)