partis-pyproj 0.1.3rc3__py3-none-any.whl → 0.1.4__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 (37) hide show
  1. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/builder.py +117 -3
  2. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/cargo.py +3 -4
  3. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/cmake.py +5 -10
  4. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/meson.py +5 -10
  5. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/process.py +3 -6
  6. partis_pyproj-0.1.4.data/purelib/partis/pyproj/file.py +64 -0
  7. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/pyproj.py +5 -3
  8. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/validate.py +6 -1
  9. {partis_pyproj-0.1.3rc3.dist-info → partis_pyproj-0.1.4.dist-info}/METADATA +18 -18
  10. partis_pyproj-0.1.4.dist-info/RECORD +36 -0
  11. partis_pyproj-0.1.3rc3.dist-info/RECORD +0 -35
  12. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/__init__.py +0 -0
  13. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/_legacy_setup.py +0 -0
  14. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/_nonprintable.py +0 -0
  15. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/backend.py +0 -0
  16. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/builder/__init__.py +0 -0
  17. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/__init__.py +0 -0
  18. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_base.py +0 -0
  19. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_binary.py +0 -0
  20. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_copy.py +0 -0
  21. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_source.py +0 -0
  22. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_targz.py +0 -0
  23. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/dist_file/dist_zip.py +0 -0
  24. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/legacy.py +0 -0
  25. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/load_module.py +0 -0
  26. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/norms.py +0 -0
  27. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/path/__init__.py +0 -0
  28. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/path/match.py +0 -0
  29. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/path/pattern.py +0 -0
  30. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/path/utils.py +0 -0
  31. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/pep.py +0 -0
  32. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/pkginfo.py +0 -0
  33. {partis_pyproj-0.1.3rc3.data → partis_pyproj-0.1.4.data}/purelib/partis/pyproj/pptoml.py +0 -0
  34. {partis_pyproj-0.1.3rc3.dist-info → partis_pyproj-0.1.4.dist-info}/LICENSE.txt +0 -0
  35. {partis_pyproj-0.1.3rc3.dist-info → partis_pyproj-0.1.4.dist-info}/WHEEL +0 -0
  36. {partis_pyproj-0.1.3rc3.dist-info → partis_pyproj-0.1.4.dist-info}/entry_points.txt +0 -0
  37. {partis_pyproj-0.1.3rc3.dist-info → partis_pyproj-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  import os
2
- import os.path as osp
3
- import tempfile
2
+ import re
4
3
  import shutil
5
4
  import subprocess
6
5
  from pathlib import Path
7
6
 
7
+ from ..file import tail
8
8
  from ..validate import (
9
9
  validating,
10
10
  ValidationError,
@@ -16,6 +16,12 @@ from ..load_module import EntryPoint
16
16
  from ..path import (
17
17
  subdir )
18
18
 
19
+ ERROR_REC = re.compile(r"error:", re.I)
20
+
21
+ #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
22
+ class BuildCommandError(ValidationError):
23
+ pass
24
+
19
25
  #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
26
  class Builder:
21
27
  """Run build setup, compile, install commands
@@ -107,10 +113,20 @@ class Builder:
107
113
  logger = self.logger,
108
114
  entry = target.entry )
109
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
+
110
125
  self.logger.info(f"Build targets[{i}]")
111
126
  self.logger.info(f"Working dir: {work_dir}")
112
127
  self.logger.info(f"Source dir: {src_dir}")
113
128
  self.logger.info(f"Build dir: {build_dir}")
129
+ self.logger.info(f"Log dir: {log_dir}")
114
130
  self.logger.info(f"Prefix: {prefix}")
115
131
 
116
132
  cwd = os.getcwd()
@@ -127,7 +143,8 @@ class Builder:
127
143
  setup_args = target.setup_args,
128
144
  compile_args = target.compile_args,
129
145
  install_args = target.install_args,
130
- build_clean = not build_dirty)
146
+ build_clean = not build_dirty,
147
+ runner = runner)
131
148
 
132
149
  finally:
133
150
  os.chdir(cwd)
@@ -151,3 +168,100 @@ class Builder:
151
168
  if build_dir is not None and build_dir.exists() and target.build_clean:
152
169
  self.logger.info(f"Removing build dir: {build_dir}")
153
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
@@ -25,7 +25,8 @@ def cargo(
25
25
  setup_args: list[str],
26
26
  compile_args: list[str],
27
27
  install_args: list[str],
28
- build_clean: bool ):
28
+ build_clean: bool,
29
+ runner):
29
30
  """Run cargo build
30
31
  """
31
32
 
@@ -51,7 +52,5 @@ def cargo(
51
52
  str(build_dir),
52
53
  '--root', str(prefix) ]
53
54
 
54
- logger.debug(' '.join(compile_args))
55
-
56
- subprocess.check_call(compile_args)
55
+ runner.run(compile_args)
57
56
 
@@ -31,7 +31,8 @@ def cmake(
31
31
  setup_args,
32
32
  compile_args,
33
33
  install_args,
34
- build_clean ):
34
+ build_clean,
35
+ runner):
35
36
  """Run cmake configure and install commands
36
37
 
37
38
  Parameters
@@ -87,13 +88,7 @@ def cmake(
87
88
 
88
89
 
89
90
  if setup_args:
90
- logger.debug(' '.join(setup_args))
91
- subprocess.check_call(setup_args)
91
+ runner.run(setup_args)
92
92
 
93
- logger.debug(' '.join(compile_args))
94
-
95
- subprocess.check_call(compile_args)
96
-
97
- logger.debug(' '.join(install_args))
98
-
99
- subprocess.check_call(install_args)
93
+ runner.run(compile_args)
94
+ runner.run(install_args)
@@ -31,7 +31,8 @@ def meson(
31
31
  setup_args,
32
32
  compile_args,
33
33
  install_args,
34
- build_clean ):
34
+ build_clean,
35
+ runner):
35
36
  """Run meson setup, compile, install commands
36
37
 
37
38
  Parameters
@@ -89,13 +90,7 @@ def meson(
89
90
 
90
91
 
91
92
  if setup_args:
92
- logger.debug(' '.join(setup_args))
93
- subprocess.check_call(setup_args)
93
+ runner.run(setup_args)
94
94
 
95
- logger.debug(' '.join(compile_args))
96
-
97
- subprocess.check_call(compile_args)
98
-
99
- logger.debug(' '.join(install_args))
100
-
101
- subprocess.check_call(install_args)
95
+ runner.run(compile_args)
96
+ runner.run(install_args)
@@ -23,7 +23,8 @@ def process(
23
23
  setup_args,
24
24
  compile_args,
25
25
  install_args,
26
- build_clean ):
26
+ build_clean,
27
+ runner):
27
28
  """Run general three-part set of commands
28
29
 
29
30
  Parameters
@@ -70,9 +71,5 @@ def process(
70
71
  for cmd in [setup_args, compile_args, install_args]:
71
72
 
72
73
  if cmd:
73
- if not shutil.which(cmd[0]):
74
- raise ValueError(f"The program not found: {setup_args[0]}")
75
-
76
- logger.info(f"Running command: {' '.join(cmd)}")
77
- subprocess.check_call(cmd)
74
+ runner.run(cmd)
78
75
 
@@ -0,0 +1,64 @@
1
+ import os
2
+
3
+ #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4
+ def tail(path, n, bufsize = 1024, encoding = 'utf-8'):
5
+ """Reads the last n lines from a file
6
+
7
+ Parameters
8
+ ----------
9
+ path : str
10
+ n : int
11
+ Max number of lines to read from the end of the file
12
+ bufsize : int
13
+ Number of bytes to buffer at a time.
14
+
15
+ Returns
16
+ -------
17
+ lines : List[str]
18
+ Up to ``n`` lines from the end of the file
19
+ """
20
+
21
+ bufsize = int(bufsize)
22
+ bufsize = max(1, bufsize)
23
+
24
+ n = int(n)
25
+ n = max( 0, n )
26
+
27
+ buf = bytes()
28
+ nlines = 0
29
+
30
+ head = 0
31
+
32
+ with open( path, 'rb' ) as fp:
33
+ # total number of bytes in the file
34
+ tot = fp.seek( 0, os.SEEK_END )
35
+
36
+ head = tot
37
+
38
+ while nlines < n and head > 0:
39
+ # NOTE: the number of newline characters is one less than number of 'lines'
40
+ nread = min( head, bufsize )
41
+ head -= nread
42
+
43
+ fp.seek( head, os.SEEK_SET )
44
+
45
+ _buf = fp.read( nread )
46
+
47
+ # NOTE: this is not exact, since pairs of '\r\n' may happen on the read
48
+ # boundary, but should count approximately the number of LF, CR, and CR+LF.
49
+ # LF -> 1 + 0 + 0 = 1
50
+ # CR -> 0 + 1 + 0 = 1
51
+ # CR+LF -> 1 + 1 - 1 = 1
52
+ nlines += _buf.count(b'\n') + _buf.count(b'\r') - _buf.count(b'\r\n')
53
+
54
+ buf = _buf + buf
55
+
56
+ if nlines > 0 and head > 0:
57
+ # remove everything before first newline to ensure only complete lines are kept
58
+ i = buf.index(b'\n')
59
+ buf = buf[(i+1):]
60
+
61
+ res = buf.decode(encoding, errors = 'replace')
62
+ lines = res.split('\n')[-n:]
63
+
64
+ return lines
@@ -32,6 +32,7 @@ from .validate import (
32
32
  ValidationWarning,
33
33
  ValidationError,
34
34
  FileOutsideRootError,
35
+ RequiredValueError,
35
36
  valid_dict,
36
37
  validating,
37
38
  valid,
@@ -104,14 +105,15 @@ class PyProjBase:
104
105
 
105
106
  with validating(key = 'tool'):
106
107
  if 'tool' not in self.pptoml:
107
- raise RequiredValueError(f"tool.pyproj is required for backend")
108
+ # TODO: !!!
109
+ raise RequiredValueError("tool.pyproj is required for backend")
108
110
 
109
111
  with validating(key = 'pyproj'):
110
112
  if 'pyproj' not in self.pptoml.tool:
111
- raise RequiredValueError(f"tool.pyproj is required for backend")
113
+ raise RequiredValueError("tool.pyproj is required for backend")
112
114
 
113
115
  if self.project.dynamic and 'prep' not in self.pyproj:
114
- raise ValidationError(f"tool.pyproj.prep is required to resolve project.dynamic")
116
+ raise RequiredValueError("tool.pyproj.prep is required to resolve project.dynamic")
115
117
 
116
118
  #...........................................................................
117
119
  # construct a validator from the tool.pyproj.config table
@@ -67,7 +67,8 @@ class ValidationError( ValueError ):
67
67
  def __init__( self, msg,
68
68
  doc_root = None,
69
69
  doc_file = None,
70
- doc_path = None ):
70
+ doc_path = None,
71
+ extra = None):
71
72
 
72
73
  msg = inspect.cleandoc( msg )
73
74
 
@@ -75,6 +76,7 @@ class ValidationError( ValueError ):
75
76
  self.doc_root = doc_root
76
77
  self.doc_file = doc_file
77
78
  self.doc_path = doc_path or list()
79
+ self.extra = extra
78
80
 
79
81
  super().__init__( msg )
80
82
 
@@ -107,6 +109,9 @@ class ValidationError( ValueError ):
107
109
  if loc:
108
110
  msg += '\n' + loc
109
111
 
112
+ if self.extra:
113
+ msg += '\n' + str(self.extra)
114
+
110
115
  return msg
111
116
 
112
117
  #-----------------------------------------------------------------------------
@@ -1,46 +1,46 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: partis-pyproj
3
- Version: 0.1.3rc3
3
+ Version: 0.1.4
4
4
  Requires-Python: >=3.6.2
5
5
  Author-email: "Nanohmics Inc." <software.support@nanohmics.com>
6
6
  Maintainer-email: "Nanohmics Inc." <software.support@nanohmics.com>
7
7
  Summary: Minimal set of Python project utilities (PEP-517/621)
8
8
  License-File: LICENSE.txt
9
- Classifier: Operating System :: POSIX :: Linux
10
9
  Classifier: Intended Audience :: Developers
11
- Classifier: License :: OSI Approved :: BSD License
12
10
  Classifier: Topic :: Software Development :: Build Tools
13
11
  Classifier: Development Status :: 4 - Beta
12
+ Classifier: Programming Language :: Python
14
13
  Classifier: Programming Language :: Python :: 3
14
+ Classifier: Operating System :: POSIX :: Linux
15
15
  Classifier: Operating System :: Microsoft :: Windows
16
- Classifier: Programming Language :: Python
16
+ Classifier: License :: OSI Approved :: BSD License
17
17
  Provides-Extra: meson
18
18
  Provides-Extra: cmake
19
19
  Provides-Extra: doc
20
20
  Provides-Extra: test
21
21
  Provides-Extra: cov
22
22
  Provides-Extra: lint
23
- Requires-Dist: tomli>=1.2.3
24
- Requires-Dist: packaging==21.3
25
23
  Requires-Dist: importlib_metadata; python_version < "3.8"
26
- Requires-Dist: meson>=0.61.3; extra == "meson"
24
+ Requires-Dist: packaging>=21.3
25
+ Requires-Dist: tomli>=1.2.3
27
26
  Requires-Dist: ninja>=1.10.2.3; extra == "meson"
28
- Requires-Dist: ninja>=1.10.2.3; extra == "cmake"
27
+ Requires-Dist: meson>=0.61.3; extra == "meson"
29
28
  Requires-Dist: cmake>=3.24.3; extra == "cmake"
30
- Requires-Dist: partis-utils[sphinx]>=0.1.3rc3; extra == "doc"
31
- Requires-Dist: nox>=2021.10.1; extra == "test"
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"
32
33
  Requires-Dist: meson>=0.61.3; extra == "test"
33
- Requires-Dist: tomli>=1.2.3; extra == "test"
34
- Requires-Dist: ninja>=1.10.2.3; extra == "test"
34
+ Requires-Dist: pytest>=6.2.5; extra == "test"
35
35
  Requires-Dist: cmake>=3.24.3; extra == "test"
36
- Requires-Dist: coverage[toml]>=6.2; extra == "test"
36
+ Requires-Dist: ninja>=1.10.2.3; extra == "test"
37
+ Requires-Dist: nox>=2021.10.1; extra == "test"
37
38
  Requires-Dist: numpy; extra == "test"
38
- Requires-Dist: build>=0.7.0; extra == "test"
39
- Requires-Dist: pytest_mock>=3.6.1; extra == "test"
39
+ Requires-Dist: coverage[toml]>=6.2; extra == "test"
40
+ Requires-Dist: tomli>=1.2.3; extra == "test"
40
41
  Requires-Dist: Cython>=0.29.18; extra == "test"
41
- Requires-Dist: pytest>=6.2.5; extra == "test"
42
- Requires-Dist: pip>=18.1; extra == "test"
43
- Requires-Dist: pytest-cov>=3.0.0; extra == "test"
42
+ Requires-Dist: pytest_mock>=3.6.1; extra == "test"
43
+ Requires-Dist: build>=0.7.0; extra == "test"
44
44
  Requires-Dist: coverage[toml]>=6.2; extra == "cov"
45
45
  Requires-Dist: pyflakes==2.4.0; extra == "lint"
46
46
  Description-Content-Type: text/x-rst
@@ -0,0 +1,36 @@
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,,
@@ -1,35 +0,0 @@
1
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/__init__.py,sha256=HBnvC3dycTnUD8bkbEBj9fRXwvJCp87wpAk1Q_Ijbq0,1432
2
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/norms.py,sha256=VwnwnysTgTevdkGcQhCvn41rnjt67t6f8v7_anGuR5Q,10862
3
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/pep.py,sha256=CrvlQslSQqPvQ3_5hOzzkrRhXMgZh21kviIm0yXpssM,32658
4
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/__init__.py,sha256=1GSva5IvHTDozdjR9G7g30zKIBshciBYHIfVodjTeLI,133
5
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/builder.py,sha256=H3fotq7j7ckl_1Zljp4_DBrChTpD5MguQvLxQSs4X-c,4654
6
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/cargo.py,sha256=y-CUsuZ29X4tAu9cj2MzsSje1B3DUUBeXZDheWXzoAo,1187
7
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/cmake.py,sha256=lbcodOHKL_8OlZS6KOFnzRSAWkhIe-Rya6GJPZ2syA0,2145
8
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/meson.py,sha256=lxLKXF-LbZlM6cAoi1Zf-GNAh25jJRufEZr2tJAZ5pM,2208
9
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/builder/process.py,sha256=Kx9fSVN-bXl6AHqjzYxRpy372DvjuT2kmqGn9UVnUQE,2018
10
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/load_module.py,sha256=WYDcGKBrIWw_bO_aMW34fW3gt7x-T4O_TpYeu6_5V1k,4305
11
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/_legacy_setup.py,sha256=UwiHAzj5Ka960u_j1I7lYChjMxtKM2fHsOWhWNwGfy8,5306
12
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/_nonprintable.py,sha256=plAzStakZ3BgjntpzGqRYSdT99WIMXTwv6Q5L6DMHR8,1829
13
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/path/__init__.py,sha256=pypqIo4tZ8YVV3W33sC2hagHek_Us4FpXwwOnQJu3vA,226
14
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/path/match.py,sha256=bFX8oEDPCoTRWkCOAtMw1PBQmI3LpRbA97uBQ4vcf0M,11677
15
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/path/pattern.py,sha256=DpJl-vdnn30QZdikTyg4f4nbdHk6VAxcGhHpYjuCdyg,15634
16
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/path/utils.py,sha256=OlUjU7DUGf2UaamrjHCKxCTm2Zor9NuzjGOJtRVypjU,950
17
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/validate.py,sha256=ljtv75OAQdjmRPCoW5iCXq2-CG42oDDYmV7xecmXF-U,32324
18
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/pkginfo.py,sha256=7O-EAeKyH7t222-NBnMNfDX8cmWqAGMfq-plMvz7bJA,15250
19
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_targz.py,sha256=neDHh4PVXcpycwYtgHRTgk8dO9WUbS1cguZuaO84cW0,3922
20
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/__init__.py,sha256=_NEMWNR9Z0aa1knCmKmhSuQOK5aP8Lr1Bc1868eUt58,379
21
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_zip.py,sha256=wWoLE7JJ2jicq5OFFG0EckHhi4KEshkEyTfDgdAhl7c,3887
22
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_binary.py,sha256=e2Tuzl1vvzaG3bVB4lleHH3PPITPFGJUvIYqxKe5g9s,7881
23
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_base.py,sha256=vJEbMWZf_X9b65ZCSun1kIUZbSsNURZa10wzzRZIz-E,12086
24
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_source.py,sha256=x7nUgArbCIz1tr-ZQUknyhcG36hrv_AX71_RV870fnM,4503
25
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/dist_file/dist_copy.py,sha256=urzbyCVf4BelApO7T7kQ2sOqOOJxTNBEZfsQ73qz5XM,3627
26
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/legacy.py,sha256=tgOSmt7sfxTT0Ue9md6pRzDLv3kIPfJHuB8XgKHoQsA,1704
27
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/backend.py,sha256=yta_iZKj_-gHR_d34ycjGWzeVT1a4E--efD0esFx0rU,6717
28
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/pyproj.py,sha256=GuDFDi_65YtL1pqY9sP5M2F9rL9xD_6TRgMIBdQJjE8,12220
29
- partis_pyproj-0.1.3rc3.data/purelib/partis/pyproj/pptoml.py,sha256=0NJ69Vu7-dOisE61OjRHWenJAc7HDrP7xoWJBIjL3qw,13446
30
- partis_pyproj-0.1.3rc3.dist-info/METADATA,sha256=znnzRaPi-J81pBsOT0hq02yHemvvdDpcnDv4559Qopg,2092
31
- partis_pyproj-0.1.3rc3.dist-info/LICENSE.txt,sha256=6LYtpan0H8F0reCrEa1ZUf_Nr9Vu93A3bqunX2J5Et0,3320
32
- partis_pyproj-0.1.3rc3.dist-info/top_level.txt,sha256=T72LF-bUK7nMDf1GQgbzvgZ2YrJElwwRd9h7HwVQBIQ,6
33
- partis_pyproj-0.1.3rc3.dist-info/entry_points.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- partis_pyproj-0.1.3rc3.dist-info/WHEEL,sha256=4YeLUbbRU8D0xzIlG3rm8IFLwHKcY8YaY_wiNxswKJg,126
35
- partis_pyproj-0.1.3rc3.dist-info/RECORD,,