mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
Work in progress
This commit is contained in:
@@ -9,6 +9,9 @@ from json.decoder import JSONDecodeError
|
||||
from platform import uname
|
||||
from sys import platform
|
||||
from urllib.request import urlopen
|
||||
import asyncio
|
||||
from queue import Queue
|
||||
from threading import Thread
|
||||
from habanero import Crossref
|
||||
from waitress import serve
|
||||
|
||||
@@ -24,6 +27,9 @@ elif platform == "win32":
|
||||
#HOST_ADDRESS = "192.168.1.191"
|
||||
HOST_ADDRESS = "0.0.0.0"
|
||||
PORT_ADDRESS = 5001
|
||||
DATABASE_PATH = r'C:\\Database\\chunks'
|
||||
ENCODING = "utf-8"
|
||||
|
||||
|
||||
class Librarian(object):
|
||||
|
||||
@@ -62,21 +68,37 @@ class Librarian(object):
|
||||
# convert back to json.
|
||||
json.dump(file_data, data_file, indent=4)
|
||||
return result
|
||||
#TODO: check if exists odpala wątki dla kolejnych plików, z każdego wątku dostaje zwrotki - trafienia na bieżąco oraz sygnał że plik się skończył i pora na następny
|
||||
#TODO: paczki danych są upychane po 10 w tablicy, POSTy ze strony klienta mówią tylko nazwę tablicy (poprzez UUID) oraz którą stronę tejże
|
||||
#TODO: jeśli UUID nie istnieje to budujemy całość dla nowego uuid
|
||||
#TODO: kiedy wszystkie wątki pilokowe się zakończą - zamykamy merger i dajemy znać do procedury obsługi odpowiadania na posty że dla tego uuid już nic więcej nie znajdziemy
|
||||
#TODO: po 60 minutach storeujemy wyniki zapytania pod query w sql i kasujemy UUID
|
||||
#TODO: Później robimy tak że query jest najpierw sprawdzane w sql - i dawane jako "zapisana lokalna kopia"
|
||||
#TODO: Paginacja - najpierw hity z pliku, potem na końcu to co nie zwróciło żadnych hitów - i to dopiero można crawlerem sprawdzić
|
||||
#TODO: check if exists odpala wątki dla kolejnych plików, z każdego wątku dostaje zwrotki - trafienia na bieżąco oraz sygnał że plik się skończył i pora na następny
|
||||
#TODO: paczki danych są upychane po 10 w tablicy, POSTy ze strony klienta mówią tylko nazwę tablicy (poprzez UUID) oraz którą stronę tejże
|
||||
#TODO: jeśli UUID nie istnieje to budujemy całość dla nowego uuid
|
||||
#TODO: kiedy wszystkie wątki pilokowe się zakończą - zamykamy merger i dajemy znać do procedury obsługi odpowiadania na posty że dla tego uuid już nic więcej nie znajdziemy
|
||||
#TODO: po 60 minutach storeujemy wyniki zapytania pod query w sql i kasujemy UUID
|
||||
#TODO: Później robimy tak że query jest najpierw sprawdzane w sql - i dawane jako "zapisana lokalna kopia"
|
||||
#TODO: Paginacja - najpierw hity z pliku, potem na końcu to co nie zwróciło żadnych hitów - i to dopiero można crawlerem sprawdzić
|
||||
|
||||
def check_if_exists(self,page_url):
|
||||
def check_dois_in_file(self, file_name, dois, out_queue):
|
||||
with open(f'{DATABASE_PATH}{file_name}', "r+", encoding=ENCODING) as file:
|
||||
while True:
|
||||
# Get next line from file
|
||||
line = file.readline()
|
||||
if line == dois:
|
||||
return True
|
||||
# if line is empty
|
||||
# end of file is reached
|
||||
if not line:
|
||||
return False
|
||||
|
||||
|
||||
def check_dois_in_local_db(self, dois):
|
||||
_sentinel = object()
|
||||
chunk_list = []
|
||||
q = Queue()
|
||||
|
||||
return None
|
||||
for file in chunk_list:
|
||||
t = Thread(target = self.check_dois_in_file, args = (file ,dois, q))
|
||||
t.start()
|
||||
q.put(_sentinel)
|
||||
|
||||
in_scihub_db = True
|
||||
def check_if_exists(self, page_url):
|
||||
if not page_url.startswith(("http:", "https:")):
|
||||
raise ValueError("URL must start with 'http:' or 'https:'")
|
||||
# trunk-ignore(bandit/B310)
|
||||
@@ -86,13 +108,6 @@ class Librarian(object):
|
||||
for line in text.splitlines():
|
||||
if re.match(r".*Unfortunately, Sci-Hub doesn't have the requested document.*", line):
|
||||
return None
|
||||
if in_scihub_db:
|
||||
return text
|
||||
return None
|
||||
|
||||
def download(self, page_url):
|
||||
if response := self.check_if_exists(page_url):
|
||||
for line in response.splitlines():
|
||||
if m := re.match(r".*<embed type=\"application.pdf\"\s*src=\"(.*\.pdf)",line):
|
||||
return "https:" + str(m.group(1))
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user