FreeCompetitors/check.py

109 lines
3.3 KiB
Python

# THIS SOFTWARE IS A PART OF FREE COMPETITOR PROJECT
# THE FOLLOWING SOURCE CODE I UNDER THE GNU
# AGPL LICENSE V3 OR ANY LATER VERSION.
# This project is not for simple users, but for
# web-masters and a like, so we are counting on
# your ability to set it up and running.
import os
import json
# TODO: Make a pull-request before starting
print("* Checking...")
# Check number one, list all missing software
try:
with open("data/missing.json") as json_file:
missing = json.load(json_file)
except:
missing = {}
if missing:
print()
print("* Missing Software found! Please copy-paste the next")
print(" section into our Missing Software Mega-Thread at: ")
print(" https://notabug.org/jyamihud/FreeCompetitors/issues/25")
print("===========================================================")
print()
# TODO: Make it check if the items in the missing.json already added
# in the last pull-request, or manually by the operator. If they
# are found. Remove them from the file. And from the list.
for i in missing:
name = i[0].upper()+i[1:].lower()
print(' - [ ] '+name+' *Searched at least '+str(missing[i]) +" times.*")
if missing:
print()
print("===========================================================")
print()
# Part two. Checking for healthy links
import urllib.request
import urllib.error
error = False
def iferror():
if not error:
print()
print(" * Some files in 'apps' folder have problems! Please")
print(" copy-paste the next section into our Problems with")
print(" Software Mega-Thread at: ")
print(" https://notabug.org/jyamihud/FreeCompetitors/issues/24")
print("===========================================================")
print()
return True
for f in os.listdir("apps"):
if f.endswith(".json"):
# Trying to read the file
try:
with open("apps/"+f) as json_file:
app = json.load(json_file)
except Exception as e:
error = iferror()
print(" - [ ] `apps/"+f+"` fails to load. Says: `"+str(e)+"`")
continue
# Links
for link in app.get("links",[]):
# TODO: Make the tester of the links closer to the kind
# of response that you will get in the web-browser.
try:
urllib.request.urlopen(app.get("links",[])[link])
except Exception as e:
if "403" not in str(e):
error = iferror()
print(" - [ ] `apps/"+f+"` "+link+" link doesn't seem to work.")
# Licenses
lices = app.get("licenses", [])
try:
with open("data/licenses.json") as json_file:
ll = json.load(json_file)["licenses"]
except:
ll = {}
for lic in lices:
found = False
for l in ll:
if lic in [l.get("licenseId",""),l.get("name","")]:
found = True
if not found:
error = iferror()
print(" - [ ] `apps/"+f+"` License '"+lic+"' is unknown.")
print("===========================================================")
print()
print("* Check is finished!")
print()