This commit is contained in:
Stefan Regnery 2021-05-19 23:50:28 +02:00
parent 52892a2346
commit e22941d335
3 changed files with 162 additions and 160 deletions

View File

@ -1,65 +1,61 @@
import shutil import shutil
import json import json
import os import os
import requests import requests
import urllib3 import urllib3
from urllib import request from urllib import request
import ssl import ssl
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
with open("config.json", mode="r") as config_file: with open("config.json", mode="r") as config_file:
config = json.load(config_file) config = json.load(config_file)
def get_md5sum(md5_url): def get_md5sum(md5_url):
r = requests.get(md5_url, verify=False, stream=True) r = requests.get(md5_url, verify=False, stream=True)
return str(r.text.split(" ")[0]) return str(r.text.split(" ")[0])
def download_file(url): def download_file(url):
ctx = ssl.create_default_context() ctx = ssl.create_default_context()
ctx.check_hostname = False ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE ctx.verify_mode = ssl.CERT_NONE
file_name = url.split('/')[-1] file_name = url.split('/')[-1]
u = request.urlopen(url) u = request.urlopen(url)
f = open(file_name, 'wb') f = open(file_name, 'wb')
file_size = int(u.getheader("Content-Length")) file_size = u.getheader("Content-Length")
print("Downloading: %s Bytes: %s" % (file_name, file_size)) print(file_size)
print("Downloading: %s Bytes: %s" % (file_name, file_size))
file_size_dl = 0
block_sz = 8192 file_size_dl = 0
while True: block_sz = 8192
file_buffer = u.read(block_sz) while True:
if not file_buffer: file_buffer = u.read(block_sz)
break if not file_buffer:
break
file_size_dl += len(file_buffer)
f.write(file_buffer) file_size_dl += len(file_buffer)
f.write(file_buffer)
f.close()
f.close()
def main():
global config_file def main():
online_version = get_md5sum(config["arc_dps"]["md5path"]) global config_file
arc_dps_url = config["arc_dps"]["download_path"] online_version = get_md5sum(config["arc_dps"]["md5path"])
buildtemplates_url = config["arc_dps_buildtemplates"]["download_path"] arc_dps_url = config["arc_dps"]["download_path"]
if config["arc_dps"]["current_version"] != online_version: if config["arc_dps"]["current_version"] != online_version:
arc_dps_file_name = arc_dps_url.rsplit('/', 1)[-1] arc_dps_file_name = arc_dps_url.rsplit('/', 1)[-1]
buildtemplates_file_name = buildtemplates_url.rsplit('/', 1)[-1] download_file(arc_dps_url)
download_file(arc_dps_url) shutil.move(arc_dps_file_name, os.path.join(config["guildwars2_path"], "bin64", arc_dps_file_name))
download_file(buildtemplates_url)
shutil.move(arc_dps_file_name, os.path.join(config["guildwars2_path"], "bin64", arc_dps_file_name)) config["arc_dps"]["current_version"] = online_version
shutil.move(buildtemplates_file_name, with open("config.json", mode="w") as config_file:
os.path.join(config["guildwars2_path"], "bin64", buildtemplates_file_name)) config_file = (json.dump(config, config_file, indent=2))
config["arc_dps"]["current_version"] = online_version
with open("config.json", mode="w") as config_file: if __name__ == "__main__":
config_file = (json.dump(config, config_file, indent=2)) main()
if __name__ == "__main__":
main()

View File

@ -1,49 +1,49 @@
#!/usr/bin/env python #!/usr/bin/env python
import textwrap import textwrap
import requests import requests
from flask import Flask, Response, request from flask import Flask, Response, request
app = Flask(__name__) app = Flask(__name__)
USER_TOKEN = '' USER_TOKEN = ''
def get_uploads(user_token, page=1): def get_uploads(user_token, page=1):
return requests.get("https://dps.report/getUploads?userToken={}&page={}".format(user_token, page)).json() return requests.get("https://dps.report/getUploads?userToken={}&page={}".format(user_token, page)).json()
@app.route("/") @app.route("/")
def fetch_and_display_my_reports(): def fetch_and_display_my_reports():
if request.args.get('page', ''): if request.args.get('page', ''):
uploads = get_uploads(USER_TOKEN, request.args.get('page', '')) uploads = get_uploads(USER_TOKEN, request.args.get('page', ''))
else: else:
uploads = get_uploads(USER_TOKEN) uploads = get_uploads(USER_TOKEN)
# print(uploads) # print(uploads)
upload_links_html = "" upload_links_html = ""
for upload in uploads['uploads']: for upload in uploads['uploads']:
upload_links_html += ' <a href="{url}">{url}</a><br>\n'.format(url=upload['permalink']) upload_links_html += ' <a href="{url}">{url}</a><br>\n'.format(url=upload['permalink'])
older_reports = "<br>Older reports: " older_reports = "<br>Older reports: "
if uploads['pages'] > 1: if uploads['pages'] > 1:
for i in range(uploads['pages']): for i in range(uploads['pages']):
if request.args.get('page', '') == str(i+1): if request.args.get('page', '') == str(i+1):
older_reports += ' <a href="?page={page_number}"><b>{page_number}</b></a> '.format(page_number=i+1) older_reports += ' <a href="?page={page_number}"><b>{page_number}</b></a> '.format(page_number=i+1)
else: else:
older_reports += ' <a href="?page={page_number}">{page_number}</a> '.format(page_number=i+1) older_reports += ' <a href="?page={page_number}">{page_number}</a> '.format(page_number=i+1)
else: else:
older_reports = "" older_reports = ""
response_text = textwrap.dedent('''\ response_text = textwrap.dedent('''\
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>lennys dps reports</title> <title>lennys dps reports</title>
</head> </head>
<body> <body>
{upload_links}{older_reports} {upload_links}{older_reports}
</body> </body>
</html>'''.format(upload_links=upload_links_html, older_reports=older_reports)) </html>'''.format(upload_links=upload_links_html, older_reports=older_reports))
return Response(response_text, mimetype='text/html') return Response(response_text, mimetype='text/html')
def start(): def start():
app = Flask(__name__) app = Flask(__name__)

View File

@ -1,46 +1,52 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import time import os
import requests import time
import argparse import requests
import argparse
from pathlib import Path
from watchdog.observers import Observer from pathlib import Path
from watchdog.events import PatternMatchingEventHandler from oslo_concurrency import lockutils
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
class FileWatchdog(PatternMatchingEventHandler):
def __init__(self, file_pattern, user_token): lockutils.set_defaults(os.path.abspath(os.path.dirname(__file__)))
super(FileWatchdog, self).__init__(patterns=[file_pattern], ignore_directories=True)
self.pattern = file_pattern
self.user_token = user_token class FileWatchdog(PatternMatchingEventHandler):
def __init__(self, file_pattern, user_token):
def on_moved(self, event): super(FileWatchdog, self).__init__(patterns=[file_pattern], ignore_directories=True)
self.upload_report(event) self.pattern = file_pattern
self.user_token = user_token
def upload_report(self, event):
report = open(os.path.join(event.dest_path), 'rb') def on_moved(self, event):
a = requests.post("https://dps.report/uploadContent?json=1&generator=ei&userToken={}".format(self.user_token), self.upload_report(event)
files={"file": report})
print(a.json()) def upload_report(self, event):
report = open(os.path.join(event.dest_path), 'rb')
a = requests.post("https://dps.report/uploadContent?json=1&generator=ei&userToken={}".format(self.user_token),
def main(): files={"file": report})
parser = argparse.ArgumentParser() print(a.json())
parser.add_argument('user_token', action='store')
args = parser.parse_args()
@lockutils.synchronized('dps.report_uploader', external=True)
watch_path = os.path.join(Path.home(), "Documents", "Guild Wars 2", "addons", "arcdps", "arcdps.cbtlogs") def main():
print(watch_path) print('start initiated')
file_pattern = os.path.join("*.zevtc") parser = argparse.ArgumentParser()
parser.add_argument('user_token', action='store')
observer = Observer() args = parser.parse_args()
observer.schedule(FileWatchdog(file_pattern, args.user_token), watch_path, recursive=True)
observer.start() watch_path = os.path.join(Path.home(), "Documents", "Guild Wars 2", "addons", "arcdps", "arcdps.cbtlogs")
print(watch_path)
while True: file_pattern = os.path.join("*.zevtc")
time.sleep(1)
observer = Observer()
observer.schedule(FileWatchdog(file_pattern, args.user_token), watch_path, recursive=True)
if __name__ == '__main__': observer.start()
main() print('started observing')
while True:
time.sleep(1)
if __name__ == '__main__':
main()