Rework unlisted apps models for better integration

This commit is contained in:
Alexandre Aubin 2018-05-30 02:31:45 +02:00
parent a290c879aa
commit 3f1b44aa45
2 changed files with 43 additions and 28 deletions

View file

@ -1 +1 @@
from . import appci, pr from . import appci, pr, unlistedapps

View file

@ -3,57 +3,75 @@ import json
import datetime import datetime
import os import os
class UnlistedApps(): from .. import db
def find_unlisted_apps(): class UnlistedApp(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(100), unique=True, nullable=False)
name = db.Column(db.String(64), nullable=False)
owner = db.Column(db.String(64), nullable=False)
description = db.Column(db.String(256))
updated_days_ago = db.Column(db.Integer, default=-1)
def __repr__(self):
return '<UnlistedApp %r>' % self.name
def init():
pass
def update():
UnlistedApp.query.delete()
official = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/official.json").text) official = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/official.json").text)
community = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/community.json").text) community = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/community.json").text)
official_apps = [ os.path.basename(app["url"]) for app in official.values() ] known_apps = set()
community_apps = [ os.path.basename(app["url"]) for app in community.values() ] known_apps = known_apps.union([os.path.basename(app["url"]) for app in official.values() ])
known_apps = known_apps.union([os.path.basename(app["url"]) for app in community.values() ])
apps = [] apps = []
for i in range(0,7): for i in range(1,7):
print("Page " + str(i) + " ... ") print("Page " + str(i) + " ... ")
r = requests.get("https://api.github.com/search/repositories?q=_ynh&sort=updated&per_page=100&page="+str(i)) r = requests.get("https://api.github.com/search/repositories?q=_ynh&sort=updated&per_page=100&page="+str(i))
assert r.status_code == 200 assert r.status_code == 200, r.text
j = json.loads(r.text) j = json.loads(r.text)
print(str(len(j["items"])) + " items ") print(str(len(j["items"])) + " items ")
for item in j["items"]: for item in j["items"]:
app = {
"name": item["name"],
"url": item["html_url"],
"owner": item["owner"]["login"],
"description": item["description"],
"updated_days_ago": githubDateToDaysAgo(item["updated_at"])
}
if str(item["size"]) == "0": if str(item["size"]) == "0":
continue continue
if not app["name"].endswith("_ynh"): if not item["name"].endswith("_ynh"):
continue continue
if app["name"] in official_apps or app["name"] in community_apps: if item["name"] in known_apps:
continue continue
app["name"] = app["name"].replace("_ynh", "") item["name"] = item["name"].replace("_ynh", "")
apps.append(app) app = UnlistedApp(name=item["name"],
url=item["html_url"],
owner=item["owner"]["login"],
description=item["description"],
updated_days_ago=githubDateToDaysAgo(item["updated_at"])
)
db.session.add(app)
apps = sorted(apps, key=lambda x: x["updated_days_ago"]) db.session.commit()
for app in apps: #apps = sorted(apps, key=lambda x: x["updated_days_ago"])
if app["updated_days_ago"] > 100:
continue
print(app["name"] + " ... " + app["url"] + " ... " + str(app["updated_days_ago"]))
with open('apps.json', 'w') as f: #for app in apps:
json.dump(apps, f) # if app["updated_days_ago"] > 100:
# continue
# print(app["name"] + " ... " + app["url"] + " ... " + str(app["updated_days_ago"]))
#with open('apps.json', 'w') as f:
# json.dump(apps, f)
def githubDateToDaysAgo(date): def githubDateToDaysAgo(date):
@ -61,6 +79,3 @@ def githubDateToDaysAgo(date):
date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%SZ") date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%SZ")
return (now - date).days return (now - date).days
UnlistedApps.find_unlisted_apps()