Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/setuptools/namespaces.py
7750 views
1
import os
2
from distutils import log
3
import itertools
4
5
from setuptools.extern.six.moves import map
6
7
8
flatten = itertools.chain.from_iterable
9
10
11
class Installer:
12
13
nspkg_ext = '-nspkg.pth'
14
15
def install_namespaces(self):
16
nsp = self._get_all_ns_packages()
17
if not nsp:
18
return
19
filename, ext = os.path.splitext(self._get_target())
20
filename += self.nspkg_ext
21
self.outputs.append(filename)
22
log.info("Installing %s", filename)
23
lines = map(self._gen_nspkg_line, nsp)
24
25
if self.dry_run:
26
# always generate the lines, even in dry run
27
list(lines)
28
return
29
30
with open(filename, 'wt') as f:
31
f.writelines(lines)
32
33
def uninstall_namespaces(self):
34
filename, ext = os.path.splitext(self._get_target())
35
filename += self.nspkg_ext
36
if not os.path.exists(filename):
37
return
38
log.info("Removing %s", filename)
39
os.remove(filename)
40
41
def _get_target(self):
42
return self.target
43
44
_nspkg_tmpl = (
45
"import sys, types, os",
46
"has_mfs = sys.version_info > (3, 5)",
47
"p = os.path.join(%(root)s, *%(pth)r)",
48
"importlib = has_mfs and __import__('importlib.util')",
49
"has_mfs and __import__('importlib.machinery')",
50
(
51
"m = has_mfs and "
52
"sys.modules.setdefault(%(pkg)r, "
53
"importlib.util.module_from_spec("
54
"importlib.machinery.PathFinder.find_spec(%(pkg)r, "
55
"[os.path.dirname(p)])))"
56
),
57
(
58
"m = m or "
59
"sys.modules.setdefault(%(pkg)r, types.ModuleType(%(pkg)r))"
60
),
61
"mp = (m or []) and m.__dict__.setdefault('__path__',[])",
62
"(p not in mp) and mp.append(p)",
63
)
64
"lines for the namespace installer"
65
66
_nspkg_tmpl_multi = (
67
'm and setattr(sys.modules[%(parent)r], %(child)r, m)',
68
)
69
"additional line(s) when a parent package is indicated"
70
71
def _get_root(self):
72
return "sys._getframe(1).f_locals['sitedir']"
73
74
def _gen_nspkg_line(self, pkg):
75
# ensure pkg is not a unicode string under Python 2.7
76
pkg = str(pkg)
77
pth = tuple(pkg.split('.'))
78
root = self._get_root()
79
tmpl_lines = self._nspkg_tmpl
80
parent, sep, child = pkg.rpartition('.')
81
if parent:
82
tmpl_lines += self._nspkg_tmpl_multi
83
return ';'.join(tmpl_lines) % locals() + '\n'
84
85
def _get_all_ns_packages(self):
86
"""Return sorted list of all package namespaces"""
87
pkgs = self.distribution.namespace_packages or []
88
return sorted(flatten(map(self._pkg_names, pkgs)))
89
90
@staticmethod
91
def _pkg_names(pkg):
92
"""
93
Given a namespace package, yield the components of that
94
package.
95
96
>>> names = Installer._pkg_names('a.b.c')
97
>>> set(names) == set(['a', 'a.b', 'a.b.c'])
98
True
99
"""
100
parts = pkg.split('.')
101
while parts:
102
yield '.'.join(parts)
103
parts.pop()
104
105
106
class DevelopInstaller(Installer):
107
def _get_root(self):
108
return repr(str(self.egg_path))
109
110
def _get_target(self):
111
return self.egg_link
112
113