Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 5a6e7d8

Browse files
authored
Merge pull request #37 from mcilya/next
Next
2 parents 7cc8474 + e1aed31 commit 5a6e7d8

15 files changed

Lines changed: 190 additions & 61 deletions

DBooru_web.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
from dermod import input_parser as ip
2727
from dermod import mime_types as mimes
2828
from dermod import predict
29-
from dermod.helpers import Option, Module_Options, ThumbFile
29+
from dermod.imgloader import Loader
30+
from dermod.helpers import Option, Module_Options, ThumbFile, DBImage
3031

3132
try:
3233
import PIL.Image as Image
@@ -280,6 +281,30 @@ def first_run():
280281
update_line("first_run", False)
281282

282283

284+
@DBooru.route("/reload/<string:imgid>", methods=["PATCH"])
285+
def image_reload(imgid):
286+
if request.method != "PATCH":
287+
return
288+
image_data = DBImage(db.search_by_id(*reversed(imgid.split("_"))))
289+
print(f"Reloading {image_data.prefix + image_data.no_p_fname}")
290+
try:
291+
os.remove(settings_file.images_path + "/" + image_data.prefix + image_data.no_p_fname)
292+
except:
293+
pass
294+
l = Loader(image_data.link, image_data.prefix + image_data.no_p_fname)
295+
l.start()
296+
return Response(status=200)
297+
298+
@DBooru.route("/remove/<string:imgid>", methods=["DELETE"])
299+
def remove_image(imgid):
300+
image_data = DBImage(db.search_by_id(*reversed(imgid.split("_"))))
301+
db.remove_entry(image_data.id, image_data.prefix)
302+
try:
303+
os.remove(settings_file.images_path + "/" + image_data.prefix + image_data.no_p_fname)
304+
except:
305+
pass
306+
return Response(status=200)
307+
283308
@DBooru.route("/json/search")
284309
def api_search():
285310
page = request.args.get('page', default=1, type=int)

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
- [Basic search rules](#basic-search-rules)
3131
- [Special tags](#special-tags)
3232
- [Syntax](#syntax)
33-
- [Settings_file.py](#settingsfilepy)
33+
- [Settings_file.py](#settings_filepy)
3434
- [/settings autogeneration](#settings-autogeneration)
3535
- [Keywords](#keywords)
3636
- [Examples](#examples-1)
@@ -101,6 +101,7 @@
101101
>- markupsafe
102102
>- click
103103
>- itsdangerous
104+
>- termcolor
104105
>
105106
>Or you can just type `pip install --user -r requirements.txt` in terminal
106107
@@ -286,6 +287,8 @@ Enter this commands if prompt starts with `Search@DB>`
286287
| "/random" | GET | | Redirects to random image | Redirect (302) to /image/\* |
287288
| "/random/**tags** | GET | | Redirects to random image tagged with **tags** | Redirect (302) to /image/\* |
288289
| "/update" | GET | | Updates DB (Same as CLI: get images) | Returns 200 code when update started successfully or 409 in case when there's already update in progress |
290+
| "/remove/**prefix_id**" | DELETE | | Used to remove image and its DB entry | |
291+
| "/reload/**prefix_id**" | PATCH | | Triggers image redownloading | |
289292
| "/settings" | GET | | Settings page | HTML-page |
290293
| "/settings/\<option>" | POST | opt_type=**variable_type**&\<option>_new_opt=**value** | Endpoint for changing settings_file.py variables | Redirect (302) to /settings#\<option>\_form |
291294
| "/settings/\<modulename>/\<option>" | POST | \<option>_new_opt=**value** | Endpoint for changing module's variables | Redirect (302) to /settings#\<modulename>\_form |

dermod/db.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,12 @@ def tagged_get_next(id, tag):
206206
result = list(cursor.execute("select * from temp1 where (id>{}) order by id asc limit 1".format(int(id))).fetchall())[0]
207207
return result
208208

209+
def remove_entry(imgid, prefix):
210+
init_db()
211+
sql = f"delete from images where (id = {int(imgid)}) and (prefix = '{prefix}')"
212+
print(sql)
213+
cursor.execute(sql)
214+
conn.commit()
215+
conn.close()
216+
209217
precomp()

dermod/helpers.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,29 @@ def _disassemble(self, data):
5555
else:
5656
self.description.append(i[1:].strip())
5757
self.name = data[-1].split('=')[0].strip()
58-
self.value_now = data[-1].split('=', maxsplit=1)[1].strip()
58+
self.value_now = data[-1].split('=', maxsplit=1)[1].strip()
59+
60+
61+
class DBImage:
62+
def __init__(self, data=None):
63+
if isinstance(data, list) or isinstance(data, tuple):
64+
self.no_p_fname = data[0]
65+
self.tags = set(data[1].split(',,'))
66+
self.width = data[2]
67+
self.height = data[3]
68+
self.ratio = data[4]
69+
self.link = data[5]
70+
self.prefix = data[6]
71+
self.id = data[7]
72+
else:
73+
self.no_p_fname
74+
self.tags
75+
self.width
76+
self.height
77+
self.ratio
78+
self.link
79+
self.prefix
80+
self.id
81+
82+
def __repr__(self):
83+
return f"<Image {self.prefix}{self.id}>"

dermod/imgloader.py

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@
1818

1919

2020
class Loader(Thread):
21-
def __init__(self, url, fileid, fileform, is_proxy, proxy_ip, proxy_port):
21+
def __init__(self, url, fileid, fileform=''):
2222
Thread.__init__(self)
2323
self.readiness = 0
2424
self.url = url
2525
self.id = fileid
2626
self.format = fileform
2727
self.raw_data = b''
28-
self.proxy = is_proxy
29-
self.ip = proxy_ip
30-
self.port = proxy_port
28+
self.proxy = settings_file.enable_proxy
29+
self.ip = settings_file.proxy_ip
30+
self.port = settings_file.proxy_port
3131
self.tmp = None
3232
if settings_file.suppress_errors is True:
3333
logging.raiseExceptions = False
3434

3535
def run(self):
36+
print(f"Receiving {self.id}") if self.format == '' else ''
3637
self.get_raw_image()
38+
print(f"Wiritng {self.id}") if self.format == '' else ''
3739
self.writer()
3840
self.readiness = 1
3941
del self.raw_data
@@ -60,10 +62,9 @@ def get_raw_image(self):
6062

6163
def writer(self):
6264
try:
63-
open(settings_file.images_path + self.id +
64-
'.' + self.format, 'rb').close()
65+
open(settings_file.images_path + self.id + (('.' + self.format) if self.format != '' else ''), 'rb').close()
6566
except FileNotFoundError:
66-
with open(settings_file.images_path + self.id + '.' + self.format, 'wb') as file:
67+
with open(settings_file.images_path + self.id + (('.' + self.format) if self.format != '' else ''), 'wb') as file:
6768
file.write(self.raw_data)
6869
file.flush()
6970

@@ -99,10 +100,7 @@ def run(module, file, check_files=True, check_local=True, endwith="\r"):
99100
break
100101
t = Loader(parsed[i][2],
101102
str(parsed[i][7] + parsed[i][0]),
102-
parsed[i][1],
103-
settings_file.enable_proxy,
104-
settings_file.proxy_ip,
105-
settings_file.proxy_port)
103+
parsed[i][1])
106104
t.start()
107105
tc.threads.append(t)
108106
time.sleep(slp)
@@ -112,18 +110,12 @@ def run(module, file, check_files=True, check_local=True, endwith="\r"):
112110
time.sleep(settings_file.sleep_time)
113111
else:
114112
for i in range(chk):
115-
print(
116-
"Loading image {} of {} ({}% done) (Running threads {})".format(
117-
i, chk, format(((i/chk)*100), '.4g'), len(tc.threads)) + " " * 32,
118-
flush=True, end=endwith)
113+
print(f"Loading image {i} of {chk} ({format(((i/chk)*100), '.4g')}% done) (Running threads {len(tc.threads)})" + " " * 32, flush=True, end=endwith)
119114
if is_error_code == True:
120115
break
121116
t = Loader(parsed[i][2],
122117
str(parsed[i][7] + parsed[i][0]),
123-
parsed[i][1],
124-
settings_file.enable_proxy,
125-
settings_file.proxy_ip,
126-
settings_file.proxy_port)
118+
parsed[i][1])
127119
t.start()
128120
tc.threads.append(t)
129121
time.sleep(module.slp)

static/bootstrap-grid.min.css

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/bootstrap-reboot.min.css

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/bootstrap.bundle.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/bootstrap.min.css

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/bootstrap.min.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)