diff options
| author | Fulgen301 <tokmajigeorge@gmail.com> | 2018-08-22 20:28:31 +0200 |
|---|---|---|
| committer | Fulgen301 <tokmajigeorge@gmail.com> | 2018-08-22 20:28:31 +0200 |
| commit | 50622f038d63490277d610a83fe095ee000f2b98 (patch) | |
| tree | f700ced46a32455f2cc7da100af2e49853306c7e /helpers.py | |
| download | parry-50622f038d63490277d610a83fe095ee000f2b98.tar.gz parry-50622f038d63490277d610a83fe095ee000f2b98.zip | |
Initial commit
Diffstat (limited to 'helpers.py')
| -rw-r--r-- | helpers.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/helpers.py b/helpers.py new file mode 100644 index 0000000..0e9da70 --- /dev/null +++ b/helpers.py @@ -0,0 +1,57 @@ +# Copyright (c) 2018, George Tokmaji + +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. + +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import sys +import os, re, json, math +import requests, hashlib +from bottle import route, run, Bottle, request, static_file, response, hook, HTTPResponse +from bson.objectid import ObjectId +import threading + +os.chdir(os.path.dirname(__file__)) + +io_lock = threading.Lock() + +def loadJSON(name : str) -> dict: + try: + with open(name, "r") as fobj: + return json.load(fobj) + + except (FileNotFoundError, json.decoder.JSONDecodeError): + return {} + +def saveJSON(obj : dict, name : str) -> None: + with io_lock: + with open(name, "w") as fobj: + json.dump(obj, fobj) + +database = loadJSON("database.json") +if "entries" not in database: + database["entries"] = {} + +def calculateHashForResource(resource : requests.Response, hashobj : object = None) -> object: + if hashobj is None: + hashobj = hashlib.sha1() + + l = 0 + for block in resource.iter_content(4096): + l += len(block) + hashobj.update(block) + + if "content-length" not in resource.headers: + resource.headers["Content-Length"] = l + return hashobj + +def notAllowed(): + raise HTTPResponse(f"Cannot {request.method} {request.path}") |
