diff --git a/bot.py b/bot.py index 9b1b036..e011c61 100644 --- a/bot.py +++ b/bot.py @@ -17,6 +17,7 @@ import random import re import shutil import sys +import uuid from datetime import datetime from logging import handlers from pathlib import Path, PurePath @@ -71,6 +72,8 @@ MUZYKA_MOJEGO_LUDU_PLAJLISTA = 30 FILE_SERVICE_ADDRESS = "http://192.168.1.15:5000" GET_MP3 = "/mp3" SEND_MP3 = "/update_mp3" +LIBRARIAN_SERVICE_ADDRESS = "http://192.168.1.15:5001" +SEND_QUERY = "/query" TIME_BETWEEN_CALLS = 7200 LAST_SPONTANEOUS_CALL = datetime.now() @@ -1977,6 +1980,17 @@ class DoSearchView(discord.ui.View): guild=discord.Object(id=664789470779932693), ) async def wyszukaj_linki_do_dokumentow(ctx): + #1 wez tekst z kontekstu + query = ctx.message.content() + #2 nadaj mu uuid + query_uuid = uuid.uuid4() + #3 wyslij Librariana + json_query = {"UUID" : str(query_uuid), "query" : str(query)} + response = requests.post(f"{LIBRARIAN_SERVICE_ADDRESS}{SEND_QUERY}", json=json_query, timeout=360) + logger.info(response.data) + #4 zwroc 5 wyników od librariana + #5 przyciski przy każdym wierszu pozwalają sprawdzić czy plik istnieje na scihubie - jeśli tak podaje link do sciagniecia + #6 ostatni wiersz to dalej, wróć, skasuj, zaciagnij kolejne wyniki (jeśli jest ich więcej niż 1000) await ctx.send("This is a button!", view=DoSearchView()) # Send a message with our View class that contains the button diff --git a/conjurer_librarian/conjurer_librarian.py b/conjurer_librarian/conjurer_librarian.py index 15b23ab..0ab108a 100644 --- a/conjurer_librarian/conjurer_librarian.py +++ b/conjurer_librarian/conjurer_librarian.py @@ -1,10 +1,14 @@ import re +import logging +import threading +from flask import Flask, jsonify, request import netrc import json from platform import uname from sys import platform from urllib.request import urlopen from habanero import Crossref +from waitress import serve if platform in ("linux", "linux2"): SEPARATOR_FILE_PATH = "/" @@ -15,6 +19,8 @@ if platform in ("linux", "linux2"): elif platform == "win32": NETRC_FILE = "C:\\Users\\mtusz\\.netrc" +HOST_ADDRESS = "192.168.1.15" +PORT_ADDRESS = 5001 class Librarian(object): def __init__(self) -> None: @@ -26,8 +32,6 @@ class Librarian(object): def search_crossref(self, query): self.last_search = self.cr.works(query = query, limit = self.limit) - - for item in self.last_search['message']['items']: print("=====") #print (item) @@ -39,12 +43,12 @@ class Librarian(object): print("This a part of larger release") print(item['container-title']) print (self.last_search['message']['total-results']) + #add to sql with UUID + #sql row - title, doi, author, uuid, last retrieved, is_available with open("results.json", "x", encoding="UTF-8") as new_file: new_file.seek(0) json.dump(self.last_search['message']['items'], new_file, indent=4) - - def check_if_exists(self,page_url): in_scihub_db = True if not page_url.startswith(("http:", "https:")): @@ -73,17 +77,79 @@ class Librarian(object): if self.check_if_exists(page_url): return page_url return None + def answer_query(self, uuid, query): + #Search sql for UUID + #SQL SELECT * FROM RESULTS WHERE UUID = uuid + uuid_found = True + if uuid_found: + return self.last_search -cl = Librarian() - + self.search_crossref(query) #example not exists #sample_non_existing_page_url = "https://sci-hub.se/10.4324/9781003006237" #sample usage to download #sample_existing_page_url = "https://sci-hub.se/10.1057/9781137435026" #print(cl.download(sample_existing_page_url)) -cl.search_crossref("BDSM") +#cl.search_crossref("BDSM") +app = Flask(__name__) +def flask_debug(): + """ + The `flask_debug` function starts a Flask application in debug mode without using the reloader. + Do not use for production for fucks sake. + """ + # trunk-ignore(bandit/B201) + app.run(debug=True, use_reloader=False, host=HOST_ADDRESS, port=PORT_ADDRESS) + +def waitress_run(): + """ + The `waitress_run` function serves the `app` on host "0.0.0.0" + and port 5000 using the Waitress WSGI server. + """ + serve(app, host=HOST_ADDRESS, port=PORT_ADDRESS) + +@app.route("/query", methods=["POST"]) +def update_music_list(): + """ + The function `update_music_list` receives a POST request with a JSON payload, logs the received + item, adds it to a music file list, and returns a success message along with the updated record. + :return: The function `update_music_list` is returning a tuple containing a JSON response and a + status code. The JSON response includes keys `isError`, `message`, `statusCode`, and `data`, + with values indicating the success of the operation and the data that was + received and added to the `music_file_list`. + The status code returned is 200, indicating a successful response. + """ + record = json.loads(request.data) + app.logger.info(record) + app.logger.info(record["query"]) + app.logger.info(record["UUID"]) + + cl = Librarian() + with open("results.json", "r", encoding="UTF-8") as new_file: + #tu logika komunikacji z SQL i cała logika związana z wyszukaniem + cl.last_search = json.load(new_file) + + answer_data = cl.last_search + return_data = ( + jsonify(isError=False, message="Success", statusCode=200, data=answer_data), + 200, + ) + return return_data + +if __name__ == "__main__": + logger = logging.getLogger('conjurer_musician') + logger.setLevel(logging.DEBUG) + threads = [] + #threads.append(threading.Thread(target=waitress_run)) + threads.append(threading.Thread(target=flask_debug)) + + for worker in threads: + worker.start() + + for worker in threads: + worker.join() + #1. robi liste wyników i ją wyświetla - ale tylko tytuły niezależnych dzieł - jeśli jest coś w containerze to trza pogrupować #2. Tworzy przyciski pozwalające sprawdzić czy jest dostępne - i jeśli jest zwraca link -#3. Jest też przycisk "more" - wyszukujemy po 100, wyświetlamy po 20. Po 100 jak jeszcze to dopiero odpytujemy crossref przyciski strzałek przesuwają po obecnej porcji danych \ No newline at end of file +#3. Jest też przycisk "more" - wyszukujemy po 100, wyświetlamy po 20. Po 100 jak jeszcze to dopiero odpytujemy crossref przyciski strzałek przesuwają po obecnej porcji danych diff --git a/conjurer_librarian/requirements.txt b/conjurer_librarian/requirements.txt index a7524e0..039f2d3 100644 --- a/conjurer_librarian/requirements.txt +++ b/conjurer_librarian/requirements.txt @@ -1 +1,3 @@ -habanero \ No newline at end of file +habanero +waitress +flask \ No newline at end of file