Skip to content

Commit 75cfc9b

Browse files
committed
Create snapshot for 2021-07-16
1 parent 42bdbfe commit 75cfc9b

File tree

2 files changed

+40
-33
lines changed

2 files changed

+40
-33
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ CREATE TABLE packages (
4848

4949
-- Dependencies --
5050
CREATE TABLE deps (
51-
dependent_name STRING,
52-
dependent_version STRING,
53-
dependency_name STRING,
54-
dependency_specifier STRING,
51+
name STRING,
52+
version STRING,
5553
extra STRING DEFAULT NULL,
56-
PRIMARY KEY (dependent_name, dependent_version, dependency_name, dependency_specifier)
54+
dep_name STRING,
55+
dep_specifier STRING,
56+
PRIMARY KEY (name, version, dep_name, dep_specifier)
5757
);
5858

5959
-- Wheel data --

main.py

+35-28
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import sqlite3
66
import subprocess
77
import tempfile
8+
import time
89
from contextlib import closing
910

1011
import urllib3
@@ -48,12 +49,12 @@
4849
db.execute(
4950
"""
5051
CREATE TABLE IF NOT EXISTS deps (
51-
dependent_name STRING,
52-
dependent_version STRING,
53-
dependency_name STRING,
54-
dependency_specifier STRING,
52+
name STRING,
53+
version STRING,
54+
dep_name STRING,
55+
dep_specifier STRING,
5556
extra STRING DEFAULT NULL,
56-
PRIMARY KEY (dependent_name, dependent_version, dependency_name, dependency_specifier)
57+
PRIMARY KEY (name, version, dep_name, dep_specifier)
5758
);
5859
"""
5960
)
@@ -156,21 +157,29 @@ def get_metadata_by_install(package, resp):
156157
!= 0
157158
):
158159
return None
159-
package_str = f'"{package}"'
160-
try:
161-
package_metadata = json.loads(
162-
subprocess.check_output(
163-
f"{venv_python} -c 'import json; from importlib_metadata import requires, metadata; "
164-
f'package={package_str}; print(json.dumps({{"requires_dist": requires(package), "requires_python": metadata(package).get("Requires-Python", "")}}))\'',
165-
shell=True,
166-
)
167-
)
168-
except subprocess.SubprocessError:
160+
161+
print(f"building {package!r} from source!")
162+
popen = subprocess.Popen(
163+
f"{venv_python} -c 'import json; from importlib_metadata import requires, metadata; "
164+
f'package="{package}"; print(json.dumps({{"requires_dist": requires(package), "requires_python": metadata(package).get("Requires-Python", "")}}))\'',
165+
shell=True,
166+
stdout=subprocess.PIPE,
167+
stderr=subprocess.DEVNULL,
168+
)
169+
170+
# Run the install for no more than 20 seconds
171+
start_time = time.time()
172+
while time.time() - start_time < 20 and popen.poll() is None:
173+
time.sleep(0.5)
174+
175+
if popen.returncode != 0:
169176
return resp
177+
package_metadata = json.loads(popen.stdout.read())
170178

171179
resp = resp.copy()
172180
resp["info"]["requires_dist"] = package_metadata["requires_dist"]
173181
resp["info"]["requires_python"] = package_metadata["requires_python"]
182+
print(package_metadata)
174183
return resp
175184

176185

@@ -213,17 +222,15 @@ def update_data_from_pypi():
213222
# Check to see if we already have this version or not
214223
with closing(db.cursor()) as cur:
215224
cur.execute(
216-
"""
217-
SELECT name FROM packages WHERE name = ? AND version = ?;
218-
""",
225+
"SELECT name FROM packages WHERE name = ? AND version = ?;",
219226
(package, str_version),
220227
)
221228
if cur.fetchone():
222229
continue
223230

224231
# If we don't have 'requires_dist' information install
225232
# locally and investigate the installed package
226-
if False and resp["info"]["requires_dist"] is None: # XXX: Disabled for now!
233+
if False and resp["info"]["requires_dist"] is None:
227234
new_resp = get_metadata_by_install(package, resp)
228235
if new_resp is not None:
229236
resp = new_resp
@@ -239,7 +246,7 @@ def update_data_from_pypi():
239246
yanked = []
240247

241248
releases = resp["releases"][str_version]
242-
uploaded_at = min(x["uplaoded_at"] for x in releases)
249+
uploaded_at = None if not releases else min(x["upload_time"] for x in releases)
243250
wheel_filenames = [
244251
x["filename"] for x in releases if x["filename"].endswith(".whl")
245252
]
@@ -293,10 +300,10 @@ def update_data_from_pypi():
293300
db.execute(
294301
"""
295302
INSERT OR IGNORE INTO deps (
296-
dependent_name,
297-
dependent_version,
298-
dependency_name,
299-
dependency_specifier,
303+
name,
304+
version,
305+
dep_name,
306+
dep_specifier,
300307
extra
301308
) VALUES (?, ?, ?, ?, ?);
302309
""",
@@ -306,10 +313,10 @@ def update_data_from_pypi():
306313
db.execute(
307314
"""
308315
INSERT OR IGNORE INTO deps (
309-
dependent_name,
310-
dependent_version,
311-
dependency_name,
312-
dependency_specifier
316+
name,
317+
version,
318+
dep_name,
319+
dep_specifier
313320
) VALUES (?, ?, ?, ?);
314321
""",
315322
(package, str_version, req_no_specifiers, specifier),

0 commit comments

Comments
 (0)