partis-pyproj 0.1.4__py3-none-any.whl → 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/__init__.py +9 -1
  2. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/_legacy_setup.py +11 -11
  3. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/_nonprintable.py +4 -3
  4. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/backend.py +44 -37
  5. partis_pyproj-0.1.6.data/purelib/partis/pyproj/builder/builder.py +351 -0
  6. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/builder/cargo.py +2 -2
  7. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/builder/cmake.py +9 -15
  8. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/builder/meson.py +5 -13
  9. partis_pyproj-0.1.6.data/purelib/partis/pyproj/builder/process.py +42 -0
  10. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/__init__.py +1 -1
  11. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_base.py +75 -86
  12. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_binary.py +6 -24
  13. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_copy.py +7 -18
  14. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_source.py +4 -21
  15. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_targz.py +5 -12
  16. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/dist_file/dist_zip.py +5 -14
  17. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/file.py +2 -1
  18. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/legacy.py +3 -2
  19. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/load_module.py +7 -6
  20. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/norms.py +35 -31
  21. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/path/__init__.py +2 -1
  22. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/path/match.py +42 -35
  23. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/path/pattern.py +60 -54
  24. partis_pyproj-0.1.6.data/purelib/partis/pyproj/path/utils.py +94 -0
  25. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/pep.py +36 -35
  26. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/pkginfo.py +7 -16
  27. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/pptoml.py +125 -120
  28. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/pyproj.py +47 -36
  29. partis_pyproj-0.1.6.data/purelib/partis/pyproj/template.py +229 -0
  30. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/validate.py +273 -268
  31. partis_pyproj-0.1.6.dist-info/METADATA +500 -0
  32. partis_pyproj-0.1.6.dist-info/RECORD +37 -0
  33. partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/builder.py +0 -267
  34. partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/process.py +0 -75
  35. partis_pyproj-0.1.4.data/purelib/partis/pyproj/path/utils.py +0 -40
  36. partis_pyproj-0.1.4.dist-info/METADATA +0 -51
  37. partis_pyproj-0.1.4.dist-info/RECORD +0 -36
  38. {partis_pyproj-0.1.4.data → partis_pyproj-0.1.6.data}/purelib/partis/pyproj/builder/__init__.py +0 -0
  39. {partis_pyproj-0.1.4.dist-info → partis_pyproj-0.1.6.dist-info}/LICENSE.txt +0 -0
  40. {partis_pyproj-0.1.4.dist-info → partis_pyproj-0.1.6.dist-info}/WHEEL +0 -0
  41. {partis_pyproj-0.1.4.dist-info → partis_pyproj-0.1.6.dist-info}/entry_points.txt +0 -0
  42. {partis_pyproj-0.1.4.dist-info → partis_pyproj-0.1.6.dist-info}/top_level.txt +0 -0
@@ -1,267 +0,0 @@
1
- import os
2
- import re
3
- import shutil
4
- import subprocess
5
- from pathlib import Path
6
-
7
- from ..file import tail
8
- from ..validate import (
9
- validating,
10
- ValidationError,
11
- ValidPathError,
12
- FileOutsideRootError )
13
-
14
- from ..load_module import EntryPoint
15
-
16
- from ..path import (
17
- subdir )
18
-
19
- ERROR_REC = re.compile(r"error:", re.I)
20
-
21
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
22
- class BuildCommandError(ValidationError):
23
- pass
24
-
25
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
26
- class Builder:
27
- """Run build setup, compile, install commands
28
-
29
- Parameters
30
- ----------
31
- root : str | pathlib.Path
32
- Path to root project directory
33
- targets : :class:`pyproj_build <partis.pyproj.pptoml.pyproj_targets>`
34
- logger : logging.Logger
35
- """
36
- #-----------------------------------------------------------------------------
37
- def __init__(self,
38
- pyproj,
39
- root,
40
- targets,
41
- logger):
42
-
43
- self.pyproj = pyproj
44
- self.root = Path(root).resolve()
45
- self.targets = targets
46
- self.logger = logger
47
- self.target_paths = [
48
- dict(
49
- src_dir = target.src_dir,
50
- build_dir = target.build_dir,
51
- prefix = target.prefix,
52
- work_dir = target.work_dir)
53
- for target in targets ]
54
-
55
- #-----------------------------------------------------------------------------
56
- def __enter__(self):
57
-
58
- try:
59
- for i, (target, paths) in enumerate(zip(self.targets, self.target_paths)):
60
- if not target.enabled:
61
- self.logger.info(f"Skipping targets[{i}], disabled for environment markers")
62
- continue
63
-
64
- # check paths
65
- for k in ['src_dir', 'build_dir', 'prefix', 'work_dir']:
66
- with validating(key = f"tool.pyproj.targets[{i}].{k}"):
67
-
68
- rel_path = paths[k]
69
-
70
- abs_path = (self.root / rel_path).resolve()
71
-
72
- if not subdir(self.root, abs_path, check = False):
73
- raise FileOutsideRootError(
74
- f"Must be within project root directory:"
75
- f"\n file = \"{abs_path}\"\n root = \"{self.root}\"")
76
-
77
-
78
- paths[k] = abs_path
79
-
80
- src_dir = paths['src_dir']
81
- build_dir = paths['build_dir']
82
- prefix = paths['prefix']
83
- work_dir = paths['work_dir']
84
-
85
- with validating(key = f"tool.pyproj.targets[{i}].src_dir"):
86
- if not src_dir.exists():
87
- raise ValidPathError(f"Source directory not found: {src_dir}")
88
-
89
- with validating(key = f"tool.pyproj.targets[{i}]"):
90
- if subdir(build_dir, prefix, check = False):
91
- raise ValidPathError(f"'prefix' cannot be inside 'build_dir': {build_dir}")
92
-
93
- build_dirty = build_dir.exists() and any(build_dir.iterdir())
94
-
95
- if target.build_clean and build_dirty:
96
- raise ValidPathError(
97
- f"'build_dir' is not empty, please remove manually."
98
- f" If this was intended, set 'build_clean = false': {build_dir}")
99
-
100
- for k in ['build_dir', 'prefix']:
101
- with validating(key = f"tool.pyproj.targets[{i}].{k}"):
102
- dir = paths[k]
103
-
104
- if dir == self.root:
105
- raise ValidPathError(f"'{k}' cannot be root directory: {dir}")
106
-
107
- dir.mkdir( parents = True, exist_ok = True )
108
-
109
- entry_point = EntryPoint(
110
- pyproj = self,
111
- root = self.root,
112
- name = f"tool.pyproj.targets[{i}]",
113
- logger = self.logger,
114
- entry = target.entry )
115
-
116
- log_dir = self.root/'build'/'logs'
117
- if not log_dir.exists():
118
- log_dir.mkdir(parents=True)
119
-
120
- runner = ProcessRunner(
121
- logger = self.logger,
122
- log_dir=log_dir,
123
- target_name=f"target_{i:02d}")
124
-
125
- self.logger.info(f"Build targets[{i}]")
126
- self.logger.info(f"Working dir: {work_dir}")
127
- self.logger.info(f"Source dir: {src_dir}")
128
- self.logger.info(f"Build dir: {build_dir}")
129
- self.logger.info(f"Log dir: {log_dir}")
130
- self.logger.info(f"Prefix: {prefix}")
131
-
132
- cwd = os.getcwd()
133
-
134
- try:
135
- os.chdir(work_dir)
136
-
137
- entry_point(
138
- options = target.options,
139
- work_dir = work_dir,
140
- src_dir = src_dir,
141
- build_dir = build_dir,
142
- prefix = prefix,
143
- setup_args = target.setup_args,
144
- compile_args = target.compile_args,
145
- install_args = target.install_args,
146
- build_clean = not build_dirty,
147
- runner = runner)
148
-
149
- finally:
150
- os.chdir(cwd)
151
-
152
- except:
153
- self.build_clean()
154
- raise
155
-
156
- #-----------------------------------------------------------------------------
157
- def __exit__(self, type, value, traceback):
158
- self.build_clean()
159
-
160
- # do not handle any exceptions here
161
- return False
162
-
163
- #-----------------------------------------------------------------------------
164
- def build_clean(self):
165
- for i, (target, paths) in enumerate(zip(self.targets, self.target_paths)):
166
- build_dir = paths['build_dir']
167
-
168
- if build_dir is not None and build_dir.exists() and target.build_clean:
169
- self.logger.info(f"Removing build dir: {build_dir}")
170
- shutil.rmtree(build_dir)
171
-
172
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
173
- class ProcessRunner:
174
- #-----------------------------------------------------------------------------
175
- def __init__(self,
176
- logger,
177
- log_dir: Path,
178
- target_name: str):
179
-
180
- self.logger = logger
181
- self.log_dir = log_dir
182
- self.target_name = target_name
183
- self.commands = {}
184
-
185
- #-----------------------------------------------------------------------------
186
- def run(self, args: list):
187
- if len(args) == 0:
188
- raise ValueError(f"Command for {self.target_name} is empty.")
189
-
190
- cmd_exec = args[0]
191
- cmd_exec_src = shutil.which(cmd_exec)
192
-
193
- if cmd_exec_src is None:
194
- raise ValueError(
195
- f"Executable does not exist or has in-sufficient permissions: {cmd_exec}")
196
-
197
- cmd_exec_src = Path(cmd_exec_src).resolve()
198
- cmd_name = cmd_exec_src.name
199
- args = [str(cmd_exec_src)]+args[1:]
200
-
201
- cmd_hist = self.commands.setdefault(cmd_exec_src, [])
202
- cmd_idx = len(cmd_hist)
203
- cmd_hist.append(args)
204
-
205
- run_name = re.sub(r'[^\w]+', "_", cmd_name)
206
-
207
- stdout_file = self.log_dir/f"{self.target_name}.{run_name}.{cmd_idx:02d}.log"
208
-
209
- try:
210
- self.logger.info("Running command: "+' '.join(args))
211
-
212
- with open(stdout_file, 'wb') as fp:
213
- subprocess.run(
214
- args,
215
- shell=False,
216
- stdout=fp,
217
- stderr=subprocess.STDOUT,
218
- check=True)
219
-
220
- except subprocess.CalledProcessError as e:
221
-
222
-
223
- num_windows = 20
224
- window_size = 5
225
- with open(stdout_file, 'rb') as fp:
226
- lines = [
227
- (lineno,line)
228
- for lineno,line in enumerate(fp.read().decode('utf-8', errors='replace').splitlines())]
229
-
230
- suspect_linenos = [
231
- lineno
232
- for lineno,line in lines
233
- if ERROR_REC.search(line)]
234
-
235
- # suspect_linenos = suspect_linenos[:num_windows]
236
-
237
- extra = [
238
- '\n'.join(
239
- [f"{'':-<70}",f"{'':>4}⋮"]
240
- +[f"{j:>4d}| {line}" for j,line in lines[i:i+window_size]]
241
- +[f"{'':>4}⋮"])
242
- for i in suspect_linenos]
243
-
244
- m = len(lines)-num_windows
245
-
246
- if suspect_linenos:
247
- m = max(m, suspect_linenos[-1])
248
-
249
- last_lines = lines[m:]
250
-
251
- if last_lines:
252
- extra += [
253
- f"{'':-<70}",
254
- f"Last {len(last_lines)} lines of command output:",
255
- f"{'':>4}⋮"]
256
-
257
- extra += [
258
- f"{j:>4d}| {line}"
259
- for j,line in last_lines]
260
-
261
- extra += [
262
- f"{'END':>4}| [See log file: {stdout_file}]",
263
- f"{'':-<70}",]
264
-
265
- raise BuildCommandError(
266
- str(e),
267
- extra='\n'.join(extra)) from None
@@ -1,75 +0,0 @@
1
- import os
2
- import os.path as osp
3
- import tempfile
4
- import shutil
5
- import subprocess
6
- from string import Template
7
-
8
- from ..validate import (
9
- validating,
10
- ValidationError,
11
- ValidPathError,
12
- FileOutsideRootError )
13
-
14
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15
- def process(
16
- pyproj,
17
- logger,
18
- options,
19
- work_dir,
20
- src_dir,
21
- build_dir,
22
- prefix,
23
- setup_args,
24
- compile_args,
25
- install_args,
26
- build_clean,
27
- runner):
28
- """Run general three-part set of commands
29
-
30
- Parameters
31
- ----------
32
- pyproj : :class:`PyProjBase <partis.pyproj.pyproj.PyProjBase>`
33
- logger : logging.Logger
34
- options : dict
35
- work_dir: pathlib.Path
36
- src_dir : pathlib.Path
37
- build_dir : pathlib.Path
38
- prefix : pathlib.Path
39
- setup_args : list[str]
40
- compile_args : list[str]
41
- install_args : list[str]
42
- build_clean : bool
43
- """
44
-
45
- namespace = {
46
- **options,
47
- 'work_dir': os.fspath(work_dir),
48
- 'src_dir': os.fspath(src_dir),
49
- 'build_dir': os.fspath(build_dir),
50
- 'prefix': os.fspath(prefix),
51
- **{f"env_{k}": v for k,v in os.environ.items()}}
52
-
53
- # TODO: ensure any paths in setup_args are normalized
54
- if not ( build_dir.exists() and any(build_dir.iterdir()) ):
55
- # only run setup if the build directory does not already exist (or is empty)
56
- setup_args = [ Template(arg).substitute(namespace) for arg in setup_args ]
57
-
58
-
59
- elif not build_clean:
60
- # skip setup if the build directory should be 'clean'
61
- setup_args = list()
62
-
63
- else:
64
- raise ValidPathError(
65
- f"'build_dir' is not empty, remove manually if this is intended or set 'build_clean = false': {build_dir}")
66
-
67
- compile_args = [Template(arg).substitute(namespace) for arg in compile_args]
68
-
69
- install_args = [Template(arg).substitute(namespace) for arg in install_args]
70
-
71
- for cmd in [setup_args, compile_args, install_args]:
72
-
73
- if cmd:
74
- runner.run(cmd)
75
-
@@ -1,40 +0,0 @@
1
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
- class PathError(ValueError):
3
- pass
4
-
5
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
- def _subdir(_start, _path):
7
-
8
- n = len(_start)
9
-
10
- if len(_path) < n or _path[:n] != _start:
11
- return None
12
-
13
- return _path[n:]
14
-
15
- #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16
- def subdir(start, path, check = True):
17
- """Relative path, restricted to sub-directories.
18
-
19
- Parameters
20
- ----------
21
- start : PurePath
22
- Starting directory.
23
- path : PurePath
24
- Directory to compute relative path to, *must* be a sub-directory of `start`.
25
-
26
- Returns
27
- -------
28
- rpath : PurePath
29
- Relative path from `start` to `path`.
30
- """
31
-
32
- _rpath = _subdir(start.parts, path.parts)
33
-
34
- if _rpath is None:
35
- if check:
36
- raise PathError(f"Not a subdirectory of {start}: {path}")
37
-
38
- return None
39
-
40
- return type(path)(*_rpath)
@@ -1,51 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: partis-pyproj
3
- Version: 0.1.4
4
- Requires-Python: >=3.6.2
5
- Author-email: "Nanohmics Inc." <software.support@nanohmics.com>
6
- Maintainer-email: "Nanohmics Inc." <software.support@nanohmics.com>
7
- Summary: Minimal set of Python project utilities (PEP-517/621)
8
- License-File: LICENSE.txt
9
- Classifier: Intended Audience :: Developers
10
- Classifier: Topic :: Software Development :: Build Tools
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Programming Language :: Python
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Operating System :: POSIX :: Linux
15
- Classifier: Operating System :: Microsoft :: Windows
16
- Classifier: License :: OSI Approved :: BSD License
17
- Provides-Extra: meson
18
- Provides-Extra: cmake
19
- Provides-Extra: doc
20
- Provides-Extra: test
21
- Provides-Extra: cov
22
- Provides-Extra: lint
23
- Requires-Dist: importlib_metadata; python_version < "3.8"
24
- Requires-Dist: packaging>=21.3
25
- Requires-Dist: tomli>=1.2.3
26
- Requires-Dist: ninja>=1.10.2.3; extra == "meson"
27
- Requires-Dist: meson>=0.61.3; extra == "meson"
28
- Requires-Dist: cmake>=3.24.3; extra == "cmake"
29
- Requires-Dist: ninja>=1.10.2.3; extra == "cmake"
30
- Requires-Dist: partis-utils[sphinx]>=0.1.4; extra == "doc"
31
- Requires-Dist: pip>=18.1; extra == "test"
32
- Requires-Dist: pytest-cov>=3.0.0; extra == "test"
33
- Requires-Dist: meson>=0.61.3; extra == "test"
34
- Requires-Dist: pytest>=6.2.5; extra == "test"
35
- Requires-Dist: cmake>=3.24.3; extra == "test"
36
- Requires-Dist: ninja>=1.10.2.3; extra == "test"
37
- Requires-Dist: nox>=2021.10.1; extra == "test"
38
- Requires-Dist: numpy; extra == "test"
39
- Requires-Dist: coverage[toml]>=6.2; extra == "test"
40
- Requires-Dist: tomli>=1.2.3; extra == "test"
41
- Requires-Dist: Cython>=0.29.18; extra == "test"
42
- Requires-Dist: pytest_mock>=3.6.1; extra == "test"
43
- Requires-Dist: build>=0.7.0; extra == "test"
44
- Requires-Dist: coverage[toml]>=6.2; extra == "cov"
45
- Requires-Dist: pyflakes==2.4.0; extra == "lint"
46
- Description-Content-Type: text/x-rst
47
-
48
- The ``partis.pyproj`` package aims to be very simple and
49
- transparent implementation of a PEP-517 build back-end.
50
-
51
- https://nanohmics.bitbucket.io/doc/partis/pyproj
@@ -1,36 +0,0 @@
1
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/file.py,sha256=saWJ6m3cBC8MKJhAcPy8M_MZL24rScb-0-miWWNoyv0,1546
2
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/__init__.py,sha256=HBnvC3dycTnUD8bkbEBj9fRXwvJCp87wpAk1Q_Ijbq0,1432
3
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/validate.py,sha256=eZyI5TCq4_8rhdYgls9BfrWmhZE073exWDCKBgPke7g,32420
4
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/_legacy_setup.py,sha256=UwiHAzj5Ka960u_j1I7lYChjMxtKM2fHsOWhWNwGfy8,5306
5
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/norms.py,sha256=VwnwnysTgTevdkGcQhCvn41rnjt67t6f8v7_anGuR5Q,10862
6
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/cargo.py,sha256=VPYTh975HnkLEi-Au92MLHkn-U2D47LvGPMBwDDld84,1145
7
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/__init__.py,sha256=1GSva5IvHTDozdjR9G7g30zKIBshciBYHIfVodjTeLI,133
8
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/meson.py,sha256=dk1I_PLpSB9hNLqZ2F4Sj_T3fXp91Mp4ob0bHwWkIV0,2064
9
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/process.py,sha256=kGCzMkD2IJe7bUS9VSvtIz_7yXnFBozM8gqXffkQUzw,1857
10
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/cmake.py,sha256=hlvZmwp7G0x5TzR_541yASMnpKjVC2YvSV3i0CpTeY8,2001
11
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/builder/builder.py,sha256=4ogF7u2llZqfKl5GpFmxhASD5M2ISVFEp6eIPSUGIpM,7752
12
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/pyproj.py,sha256=1XCN2bHPqtDUHjQShcI5BOELgYwoF0hvmicXjRO6i0M,12264
13
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/pptoml.py,sha256=0NJ69Vu7-dOisE61OjRHWenJAc7HDrP7xoWJBIjL3qw,13446
14
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/legacy.py,sha256=tgOSmt7sfxTT0Ue9md6pRzDLv3kIPfJHuB8XgKHoQsA,1704
15
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/pkginfo.py,sha256=7O-EAeKyH7t222-NBnMNfDX8cmWqAGMfq-plMvz7bJA,15250
16
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/_nonprintable.py,sha256=plAzStakZ3BgjntpzGqRYSdT99WIMXTwv6Q5L6DMHR8,1829
17
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/pep.py,sha256=CrvlQslSQqPvQ3_5hOzzkrRhXMgZh21kviIm0yXpssM,32658
18
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/load_module.py,sha256=WYDcGKBrIWw_bO_aMW34fW3gt7x-T4O_TpYeu6_5V1k,4305
19
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/backend.py,sha256=yta_iZKj_-gHR_d34ycjGWzeVT1a4E--efD0esFx0rU,6717
20
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/path/__init__.py,sha256=pypqIo4tZ8YVV3W33sC2hagHek_Us4FpXwwOnQJu3vA,226
21
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/path/utils.py,sha256=OlUjU7DUGf2UaamrjHCKxCTm2Zor9NuzjGOJtRVypjU,950
22
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/path/match.py,sha256=bFX8oEDPCoTRWkCOAtMw1PBQmI3LpRbA97uBQ4vcf0M,11677
23
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/path/pattern.py,sha256=DpJl-vdnn30QZdikTyg4f4nbdHk6VAxcGhHpYjuCdyg,15634
24
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/__init__.py,sha256=_NEMWNR9Z0aa1knCmKmhSuQOK5aP8Lr1Bc1868eUt58,379
25
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_targz.py,sha256=neDHh4PVXcpycwYtgHRTgk8dO9WUbS1cguZuaO84cW0,3922
26
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_base.py,sha256=vJEbMWZf_X9b65ZCSun1kIUZbSsNURZa10wzzRZIz-E,12086
27
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_copy.py,sha256=urzbyCVf4BelApO7T7kQ2sOqOOJxTNBEZfsQ73qz5XM,3627
28
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_binary.py,sha256=e2Tuzl1vvzaG3bVB4lleHH3PPITPFGJUvIYqxKe5g9s,7881
29
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_source.py,sha256=x7nUgArbCIz1tr-ZQUknyhcG36hrv_AX71_RV870fnM,4503
30
- partis_pyproj-0.1.4.data/purelib/partis/pyproj/dist_file/dist_zip.py,sha256=wWoLE7JJ2jicq5OFFG0EckHhi4KEshkEyTfDgdAhl7c,3887
31
- partis_pyproj-0.1.4.dist-info/METADATA,sha256=d8eb8WyJEtGuLeMNC1ta24DD_MIITciqwaZf4Crb5M4,2086
32
- partis_pyproj-0.1.4.dist-info/LICENSE.txt,sha256=6LYtpan0H8F0reCrEa1ZUf_Nr9Vu93A3bqunX2J5Et0,3320
33
- partis_pyproj-0.1.4.dist-info/top_level.txt,sha256=T72LF-bUK7nMDf1GQgbzvgZ2YrJElwwRd9h7HwVQBIQ,6
34
- partis_pyproj-0.1.4.dist-info/entry_points.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- partis_pyproj-0.1.4.dist-info/WHEEL,sha256=4YeLUbbRU8D0xzIlG3rm8IFLwHKcY8YaY_wiNxswKJg,126
36
- partis_pyproj-0.1.4.dist-info/RECORD,,