Skip to content

Commit 6b3e033

Browse files
authored
Merge pull request #6 from ualberta-smr/k6
chore: improve api responses and clean up variable names
2 parents ba70097 + 934a886 commit 6b3e033

File tree

2 files changed

+53
-30
lines changed

2 files changed

+53
-30
lines changed

app.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from flask import Flask, json, request
33
from johnnydep import JohnnyDist
44
from utils import *
5+
56
app = Flask(__name__)
67

78

@@ -10,29 +11,54 @@ def hello_world(): # put application's code here
1011
return 'Hello World!'
1112

1213

13-
@app.route('/packagename')
14-
def package_to_import():
15-
packageName = request.args.get('packageName')
14+
@app.route('/library/<String:packages>')
15+
def package_to_import(packages):
16+
conn = get_db_connection()
17+
cursor = conn.cursor()
18+
19+
packages_json_list = {"result": [], "error": []}
20+
for package in packages.split(','):
21+
package = package.split(':')
22+
package_name = package[0]
23+
package_version = ""
24+
if package.len() > 1:
25+
package_version = package[1]
26+
27+
does_the_table_contain_this_package = cursor.execute('SELECT * FROM packages WHERE package = ?', [package_name]).fetchone()
28+
if does_the_table_contain_this_package is None:
29+
packages_json_list["error"].append(package_name + " OptionalVersion(" + package_version +") isn't include in the dataset")
30+
else:
31+
bob = cursor.execute('SELECT * FROM importNames WHERE packageName = ?', (package_name,)).fetchall()
32+
packages_json_list["result"].extend([{"import_name": i[1], "library_name": i[2], "version": i[3]} for i in bob])
33+
conn.close()
1634

17-
importNames = get_import_name(packageName)
1835
response = app.response_class(
19-
response=json.dumps(importNames),
36+
response=json.dumps(packages_json_list),
2037
mimetype='application/json'
2138
)
2239
return response
2340

24-
@app.route('/importname')
25-
def import_to_package():
26-
importName = request.args.get('importName')
2741

28-
packageNames = []
42+
@app.route('/importname<String:imports>')
43+
def import_to_package(imports):
2944
conn = get_db_connection()
3045
cursor = conn.cursor()
31-
bob = cursor.execute('SELECT * FROM importNames WHERE importName = ?', [importName]).fetchall()
32-
packageNames = [{"packageName": i[2], "version": i[3]} for i in bob]
46+
47+
imports_json_list = {"result": [], "error": []}
48+
for import_name in imports.split(','):
49+
if ':' in import_name:
50+
imports_json_list["error"].append("The import name provided: " + import_name + " contains a ':' which is invalid")
51+
continue
52+
53+
does_the_table_contain_this_import = cursor.execute('SELECT * FROM importNames WHERE importName = ?', [import_name]).fetchall()
54+
if does_the_table_contain_this_import is None:
55+
imports_json_list["error"].append("The import name provided: " + import_name + " isn't contained in our database")
56+
else:
57+
imports_json_list["result"].extend([{"import_name": i[1], "library_name": i[2], "version": i[3]} for i in does_the_table_contain_this_import])
3358
conn.close()
59+
3460
response = app.response_class(
35-
response=json.dumps(packageNames),
61+
response=json.dumps(imports_json_list),
3662
mimetype='application/json'
3763
)
3864
return response

utils.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
import pickle
66

77

8-
# https://pypi.org/simple/
9-
108
def get_db_connection():
119
conn = sqlite3.connect('/home/kolby/Documents/GitHub/Mining-Diamonds-I-mean-data/identifier.sqlite')
1210
return conn
1311

12+
1413
def check_if_we_care(packageName):
1514
try:
16-
response = requests.get("https://libraries.io/api/Pypi/" + str(packageName.split("=")[0]) +"?api_key=96f6c6227c05020af5b777f5f6e0134c").json()
15+
response = requests.get("https://libraries.io/api/Pypi/" + str(
16+
packageName.split("=")[0]) + "?api_key=96f6c6227c05020af5b777f5f6e0134c").json()
1717
print(response)
1818
if response["dependents_count"] > 0 and response["dependent_repos_count"] > 0:
1919
return True, response["versions"]
@@ -30,19 +30,21 @@ def get_import_name(packageName):
3030
importNames = []
3131
conn = get_db_connection()
3232
cursor = conn.cursor()
33-
post = cursor.execute('SELECT * FROM packages WHERE package = ?', [packageName]).fetchone()
34-
if post is None:
33+
does_the_table_contain_this_package = cursor.execute('SELECT * FROM packages WHERE package = ?',
34+
[packageName]).fetchone()
35+
if does_the_table_contain_this_package is None:
3536
do_we_care_boolean, versions_list = check_if_we_care(packageName)
3637
if do_we_care_boolean:
37-
posts = cursor.execute('INSERT INTO packages (package) VALUES (?);', [packageName]).fetchone()
38+
cursor.execute('INSERT INTO packages (package) VALUES (?);', [packageName]).fetchone()
3839
for version in versions_list:
3940
version = version["number"]
4041
try:
4142
importNames = JohnnyDist(packageName + "==" + version).import_names
4243
if len(importNames) != 0:
4344
for i in importNames:
44-
posts = cursor.execute('INSERT INTO importNames (importName, packageName, version) VALUES (?, ?, ?);',
45-
(i, packageName, version)).fetchone()
45+
cursor.execute(
46+
'INSERT INTO importNames (importName, packageName, version) VALUES (?, ?, ?);',
47+
(i, packageName, version)).fetchone()
4648
conn.commit()
4749
else:
4850
print("error Library you requested doesn't exist")
@@ -51,18 +53,14 @@ def get_import_name(packageName):
5153
(packageName, version, str(e))).fetchone()
5254
conn.commit()
5355
print("Error: python package: " + packageName + " failed on version: " + version + " error:", e)
54-
else:
55-
importNames = {"error": "Library you requested doesn't meet the requirements for our program to be considered a library"}
56-
bob = cursor.execute('SELECT * FROM importNames WHERE packageName = ?', (packageName,)).fetchall()
57-
importNames = [{"importName": i[1], "version": i[3]} for i in bob]
5856
conn.close()
59-
return importNames
57+
6058

6159
def get_list_of_pypi_packages():
6260
def get_yesterday_data():
6361
url_set_old = set()
6462
try:
65-
with open('yesterday_set_data.yourmom', 'rb') as fp:
63+
with open('yesterday_set.pickle', 'rb') as fp:
6664
url_set_old = pickle.load(fp)
6765
except:
6866
pass
@@ -78,7 +76,7 @@ def get_today_data():
7876
return url_set
7977

8078
def dump_todays_data(url_set):
81-
with open('yesterday_set_data.yourmom', 'wb') as fp:
79+
with open('yesterday_set.pickle', 'wb') as fp:
8280
pickle.dump(url_set, fp)
8381

8482
url_yesterday_set = get_yesterday_data()
@@ -89,7 +87,6 @@ def dump_todays_data(url_set):
8987

9088

9189
def update_package_dataset():
92-
9390
importNames = []
9491
conn = get_db_connection()
9592
cursor = conn.cursor()
@@ -98,12 +95,12 @@ def update_package_dataset():
9895

9996
for package in packages:
10097
package = package[0]
101-
# todo: add support for updating the list
10298
do_we_care_boolean, versions_list = check_if_we_care(package)
10399
if do_we_care_boolean:
104100
for version in reversed(versions_list):
105101
version = version["number"]
106-
bob = cursor.execute('SELECT * FROM importNames WHERE packageName = ? AND version = ?', [package, version]).fetchone()
102+
bob = cursor.execute('SELECT * FROM importNames WHERE packageName = ? AND version = ?',
103+
[package, version]).fetchone()
107104
if bob is None:
108105
try:
109106
importNames = JohnnyDist(package + "==" + version).import_names

0 commit comments

Comments
 (0)