This commit is contained in:
2024-04-01 17:01:51 +02:00
parent 3753b3876d
commit bf4c798946
3 changed files with 91 additions and 9 deletions
+14
View File
@@ -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
+74 -8
View File
@@ -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
#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
+3 -1
View File
@@ -1 +1,3 @@
habanero
habanero
waitress
flask