Qwael 4.0.0.1.5__tar.gz → 4.0.0.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/PKG-INFO +3 -1
- qwael-4.0.0.1.7/Qwael/EasyWeb.py +59 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/__init__.py +1 -3
- qwael-4.0.0.1.7/Qwael/filesz.py +89 -0
- qwael-4.0.0.1.7/Qwael/vto01.py +87 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael.egg-info/PKG-INFO +3 -1
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael.egg-info/SOURCES.txt +2 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael.egg-info/requires.txt +2 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/setup.py +3 -1
- qwael-4.0.0.1.5/Qwael/filesz.py +0 -110
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/LICENSE +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/DR/304/260VE.py" +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/DoIP.py +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/MultiDB.py +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/Multidata.py +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael/pgif.py +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael.egg-info/dependency_links.txt +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/Qwael.egg-info/top_level.txt +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/README.md +0 -0
- {qwael-4.0.0.1.5 → qwael-4.0.0.1.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Qwael
|
|
3
|
-
Version: 4.0.0.1.
|
|
3
|
+
Version: 4.0.0.1.7
|
|
4
4
|
Summary: Qwael: İşlevsel ve kolaylaştırılmış Python kütüphanesi
|
|
5
5
|
Author: Bedirhan
|
|
6
6
|
Author-email: bedirhan.oytpass@gmail.com
|
|
@@ -20,6 +20,8 @@ Requires-Dist: google-auth
|
|
|
20
20
|
Requires-Dist: google-auth-oauthlib
|
|
21
21
|
Requires-Dist: google-auth-httplib2
|
|
22
22
|
Requires-Dist: Pillow
|
|
23
|
+
Requires-Dist: flask
|
|
24
|
+
Requires-Dist: pyyaml
|
|
23
25
|
Requires-Dist: requests
|
|
24
26
|
Dynamic: author
|
|
25
27
|
Dynamic: author-email
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from flask import Flask
|
|
2
|
+
import yaml
|
|
3
|
+
|
|
4
|
+
class Web:
|
|
5
|
+
def __init__(self, name):
|
|
6
|
+
self.app = Flask(name)
|
|
7
|
+
|
|
8
|
+
def route(self, path):
|
|
9
|
+
return self.app.route(path)
|
|
10
|
+
|
|
11
|
+
def run(self):
|
|
12
|
+
self.app.run(debug=True)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class UI:
|
|
16
|
+
@staticmethod
|
|
17
|
+
def load_ted(name):
|
|
18
|
+
with open(f"{name}.ted", "r", encoding="utf-8") as f:
|
|
19
|
+
data = yaml.safe_load(f.read())
|
|
20
|
+
|
|
21
|
+
root = data.get("</>")
|
|
22
|
+
html = ""
|
|
23
|
+
|
|
24
|
+
for widget_name, props in root.items():
|
|
25
|
+
if widget_name == "Label":
|
|
26
|
+
html += Label(props).render()
|
|
27
|
+
|
|
28
|
+
return f"""
|
|
29
|
+
<html>
|
|
30
|
+
<body style="position:relative;">
|
|
31
|
+
{html}
|
|
32
|
+
</body>
|
|
33
|
+
</html>
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Label:
|
|
38
|
+
def __init__(self, props):
|
|
39
|
+
self.text = props.get("text", "")
|
|
40
|
+
pos = props.get("pos", {})
|
|
41
|
+
size = props.get("size", {})
|
|
42
|
+
|
|
43
|
+
self.x = pos.get("x", 0)
|
|
44
|
+
self.y = pos.get("y", 0)
|
|
45
|
+
self.w = size.get("x", 100)
|
|
46
|
+
self.h = size.get("y", 30)
|
|
47
|
+
|
|
48
|
+
def render(self):
|
|
49
|
+
return f"""
|
|
50
|
+
<div style="
|
|
51
|
+
position:absolute;
|
|
52
|
+
left:{self.x}px;
|
|
53
|
+
top:{self.y}px;
|
|
54
|
+
width:{self.w}px;
|
|
55
|
+
height:{self.h}px;
|
|
56
|
+
">
|
|
57
|
+
{self.text}
|
|
58
|
+
</div>
|
|
59
|
+
"""
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
import base64
|
|
4
|
+
import hashlib
|
|
5
|
+
from kivy.app import App
|
|
6
|
+
from cryptography.fernet import Fernet
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class EasyDB:
|
|
10
|
+
def __init__(self, name, password):
|
|
11
|
+
app = App.get_running_app()
|
|
12
|
+
base_dir = os.path.join(app.user_data_dir, "easydb_data")
|
|
13
|
+
os.makedirs(base_dir, exist_ok=True)
|
|
14
|
+
|
|
15
|
+
self.path = os.path.join(base_dir, f"{name}.db")
|
|
16
|
+
self.key = self._make_key(password)
|
|
17
|
+
self.cipher = Fernet(self.key)
|
|
18
|
+
|
|
19
|
+
if not os.path.exists(self.path):
|
|
20
|
+
self.data = {}
|
|
21
|
+
self._save()
|
|
22
|
+
else:
|
|
23
|
+
self._safe_load()
|
|
24
|
+
|
|
25
|
+
def _make_key(self, password):
|
|
26
|
+
digest = hashlib.sha256(password.encode()).digest()
|
|
27
|
+
return base64.urlsafe_b64encode(digest)
|
|
28
|
+
|
|
29
|
+
def _safe_load(self):
|
|
30
|
+
try:
|
|
31
|
+
with open(self.path, "rb") as f:
|
|
32
|
+
encrypted = f.read()
|
|
33
|
+
decrypted = self.cipher.decrypt(encrypted)
|
|
34
|
+
self.data = json.loads(decrypted.decode())
|
|
35
|
+
except Exception:
|
|
36
|
+
self.data = {}
|
|
37
|
+
self._save()
|
|
38
|
+
|
|
39
|
+
def _save(self):
|
|
40
|
+
raw = json.dumps(self.data, ensure_ascii=False).encode()
|
|
41
|
+
encrypted = self.cipher.encrypt(raw)
|
|
42
|
+
with open(self.path, "wb") as f:
|
|
43
|
+
f.write(encrypted)
|
|
44
|
+
|
|
45
|
+
def create(self, table):
|
|
46
|
+
if table not in self.data:
|
|
47
|
+
self.data[table] = []
|
|
48
|
+
self._save()
|
|
49
|
+
return self
|
|
50
|
+
|
|
51
|
+
def add(self, table, record: dict):
|
|
52
|
+
if table not in self.data:
|
|
53
|
+
self.create(table)
|
|
54
|
+
|
|
55
|
+
record["id"] = len(self.data[table]) + 1
|
|
56
|
+
self.data[table].append(record)
|
|
57
|
+
self._save()
|
|
58
|
+
return record["id"]
|
|
59
|
+
|
|
60
|
+
def all(self, table):
|
|
61
|
+
return self.data.get(table, [])
|
|
62
|
+
|
|
63
|
+
def find(self, table, **filters):
|
|
64
|
+
return [
|
|
65
|
+
item for item in self.data.get(table, [])
|
|
66
|
+
if all(item.get(k) == v for k, v in filters.items())
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
def delete(self, table, record_id):
|
|
70
|
+
if table not in self.data:
|
|
71
|
+
return 0
|
|
72
|
+
|
|
73
|
+
for item in self.data[table]:
|
|
74
|
+
if item.get("id") == record_id:
|
|
75
|
+
self.data[table].remove(item)
|
|
76
|
+
self._save()
|
|
77
|
+
return 1
|
|
78
|
+
return 0
|
|
79
|
+
|
|
80
|
+
def update(self, table, record_id, **updates):
|
|
81
|
+
if table not in self.data:
|
|
82
|
+
return 0
|
|
83
|
+
|
|
84
|
+
for item in self.data[table]:
|
|
85
|
+
if item.get("id") == record_id:
|
|
86
|
+
item.update(updates)
|
|
87
|
+
self._save()
|
|
88
|
+
return 1
|
|
89
|
+
return 0
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import random
|
|
3
|
+
import os
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
|
|
6
|
+
from deep_translator import GoogleTranslator
|
|
7
|
+
|
|
8
|
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
9
|
+
dtype = torch.float16 if device == "cuda" else torch.float32
|
|
10
|
+
|
|
11
|
+
TR_STYLE_MAP = {
|
|
12
|
+
"gerçekçi": "realistic",
|
|
13
|
+
"sinematik": "cinematic lighting",
|
|
14
|
+
"anime": "anime style",
|
|
15
|
+
"çizgi film": "cartoon style",
|
|
16
|
+
"karanlık": "dark dramatic mood",
|
|
17
|
+
"neon": "neon cyberpunk lighting",
|
|
18
|
+
"portre": "portrait photography",
|
|
19
|
+
"detaylı": "highly detailed",
|
|
20
|
+
"fantastik": "fantasy art",
|
|
21
|
+
"bilim kurgu": "science fiction",
|
|
22
|
+
"minimal": "minimalist composition"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
QUALITY_LOCK = (
|
|
26
|
+
"masterpiece, ultra high quality, professional photography, "
|
|
27
|
+
"sharp focus, perfect lighting, high detail, clean composition"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
NEGATIVE_LOCK = (
|
|
31
|
+
"worst quality, low quality, lowres, blurry, jpeg artifacts, "
|
|
32
|
+
"bad anatomy, bad proportions, extra fingers, missing fingers, "
|
|
33
|
+
"extra limbs, fused fingers, malformed hands, "
|
|
34
|
+
"deformed face, asymmetrical face, cross eye, lazy eye, "
|
|
35
|
+
"distorted body, mutated, ugly"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
translator = GoogleTranslator(source="tr", target="en")
|
|
39
|
+
|
|
40
|
+
def _build_prompt(prompt_tr: str) -> str:
|
|
41
|
+
translated = translator.translate(prompt_tr)
|
|
42
|
+
prompt_lower = prompt_tr.lower()
|
|
43
|
+
styles = []
|
|
44
|
+
for tr, en in TR_STYLE_MAP.items():
|
|
45
|
+
if tr in prompt_lower:
|
|
46
|
+
styles.append(en)
|
|
47
|
+
parts = [translated]
|
|
48
|
+
if styles:
|
|
49
|
+
parts.append(", ".join(styles))
|
|
50
|
+
parts.append(QUALITY_LOCK)
|
|
51
|
+
return ", ".join(parts)
|
|
52
|
+
|
|
53
|
+
_pipe = StableDiffusionPipeline.from_pretrained(
|
|
54
|
+
"runwayml/stable-diffusion-v1-5",
|
|
55
|
+
torch_dtype=dtype,
|
|
56
|
+
safety_checker=None
|
|
57
|
+
).to(device)
|
|
58
|
+
|
|
59
|
+
_pipe.scheduler = DPMSolverMultistepScheduler.from_config(_pipe.scheduler.config)
|
|
60
|
+
_pipe.enable_attention_slicing()
|
|
61
|
+
|
|
62
|
+
def create_text(
|
|
63
|
+
prompt: str,
|
|
64
|
+
kalite: float = 7.5,
|
|
65
|
+
cfg: float = 7.5,
|
|
66
|
+
steps: int | None = None,
|
|
67
|
+
seed: int | None = None,
|
|
68
|
+
filename: str | None = None
|
|
69
|
+
) -> str:
|
|
70
|
+
final_prompt = _build_prompt(prompt)
|
|
71
|
+
if steps is None:
|
|
72
|
+
steps = int(20 + (kalite * 2))
|
|
73
|
+
if seed is None:
|
|
74
|
+
seed = random.randint(0, 999999999)
|
|
75
|
+
generator = torch.Generator(device=device).manual_seed(seed)
|
|
76
|
+
image = _pipe(
|
|
77
|
+
prompt=final_prompt,
|
|
78
|
+
negative_prompt=NEGATIVE_LOCK,
|
|
79
|
+
num_inference_steps=steps,
|
|
80
|
+
guidance_scale=float(cfg),
|
|
81
|
+
generator=generator
|
|
82
|
+
).images[0]
|
|
83
|
+
if filename is None:
|
|
84
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
85
|
+
filename = f"ai_image_{timestamp}.png"
|
|
86
|
+
image.save(filename)
|
|
87
|
+
return os.path.abspath(filename)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Qwael
|
|
3
|
-
Version: 4.0.0.1.
|
|
3
|
+
Version: 4.0.0.1.7
|
|
4
4
|
Summary: Qwael: İşlevsel ve kolaylaştırılmış Python kütüphanesi
|
|
5
5
|
Author: Bedirhan
|
|
6
6
|
Author-email: bedirhan.oytpass@gmail.com
|
|
@@ -20,6 +20,8 @@ Requires-Dist: google-auth
|
|
|
20
20
|
Requires-Dist: google-auth-oauthlib
|
|
21
21
|
Requires-Dist: google-auth-httplib2
|
|
22
22
|
Requires-Dist: Pillow
|
|
23
|
+
Requires-Dist: flask
|
|
24
|
+
Requires-Dist: pyyaml
|
|
23
25
|
Requires-Dist: requests
|
|
24
26
|
Dynamic: author
|
|
25
27
|
Dynamic: author-email
|
|
@@ -3,11 +3,13 @@ README.md
|
|
|
3
3
|
setup.py
|
|
4
4
|
Qwael/DRİVE.py
|
|
5
5
|
Qwael/DoIP.py
|
|
6
|
+
Qwael/EasyWeb.py
|
|
6
7
|
Qwael/MultiDB.py
|
|
7
8
|
Qwael/Multidata.py
|
|
8
9
|
Qwael/__init__.py
|
|
9
10
|
Qwael/filesz.py
|
|
10
11
|
Qwael/pgif.py
|
|
12
|
+
Qwael/vto01.py
|
|
11
13
|
Qwael.egg-info/PKG-INFO
|
|
12
14
|
Qwael.egg-info/SOURCES.txt
|
|
13
15
|
Qwael.egg-info/dependency_links.txt
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as f:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="Qwael",
|
|
8
|
-
version="4.0.0.1.
|
|
8
|
+
version="4.0.0.1.7",
|
|
9
9
|
packages=find_packages(),
|
|
10
10
|
install_requires=[
|
|
11
11
|
"google-api-python-client",
|
|
@@ -13,6 +13,8 @@ setup(
|
|
|
13
13
|
"google-auth-oauthlib",
|
|
14
14
|
"google-auth-httplib2",
|
|
15
15
|
"Pillow",
|
|
16
|
+
"flask",
|
|
17
|
+
"pyyaml",
|
|
16
18
|
"requests",
|
|
17
19
|
],
|
|
18
20
|
description="Qwael: İşlevsel ve kolaylaştırılmış Python kütüphanesi",
|
qwael-4.0.0.1.5/Qwael/filesz.py
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import os, json
|
|
2
|
-
|
|
3
|
-
class EasyDB:
|
|
4
|
-
def __init__(self, name):
|
|
5
|
-
os.makedirs("easydb_data", exist_ok=True)
|
|
6
|
-
self.path = f"easydb_data/{name}.json"
|
|
7
|
-
if not os.path.exists(self.path):
|
|
8
|
-
with open(self.path, "w", encoding="utf-8") as f:
|
|
9
|
-
json.dump({}, f)
|
|
10
|
-
self._safe_load()
|
|
11
|
-
|
|
12
|
-
def _safe_load(self):
|
|
13
|
-
try:
|
|
14
|
-
with open(self.path, "r", encoding="utf-8") as f:
|
|
15
|
-
text = f.read().strip()
|
|
16
|
-
self.data = json.loads(text) if text else {}
|
|
17
|
-
except Exception:
|
|
18
|
-
print(f"[Uyarı] {self.path} bozuktu, sıfırdan oluşturuldu.")
|
|
19
|
-
self.data = {}
|
|
20
|
-
self._save()
|
|
21
|
-
|
|
22
|
-
def _save(self):
|
|
23
|
-
with open(self.path, "w", encoding="utf-8") as f:
|
|
24
|
-
json.dump(self.data, f, indent=2, ensure_ascii=False)
|
|
25
|
-
|
|
26
|
-
def create(self, table):
|
|
27
|
-
if table not in self.data:
|
|
28
|
-
self.data[table] = []
|
|
29
|
-
self._save()
|
|
30
|
-
return self
|
|
31
|
-
|
|
32
|
-
def _value_conflict(self, table, value):
|
|
33
|
-
is_special = isinstance(value, str) and value.startswith("'") and value.endswith("'")
|
|
34
|
-
val_clean = value.strip("'") if is_special else value
|
|
35
|
-
|
|
36
|
-
for item in self.data.get(table, []):
|
|
37
|
-
for v in item.values():
|
|
38
|
-
if not isinstance(v, str):
|
|
39
|
-
continue
|
|
40
|
-
v_special = v.startswith("'") and v.endswith("'")
|
|
41
|
-
v_clean = v.strip("'") if v_special else v
|
|
42
|
-
|
|
43
|
-
# Aynı özel tekrar edemez
|
|
44
|
-
if is_special and v_special and v_clean == val_clean:
|
|
45
|
-
return True
|
|
46
|
-
# Normal ↔ özel çakışması
|
|
47
|
-
if (is_special and not v_special or not is_special and v_special) and v_clean == val_clean:
|
|
48
|
-
return True
|
|
49
|
-
return False
|
|
50
|
-
|
|
51
|
-
def add(self, table, record: dict):
|
|
52
|
-
if table not in self.data:
|
|
53
|
-
self.create(table)
|
|
54
|
-
|
|
55
|
-
for key, value in record.items():
|
|
56
|
-
if isinstance(value, str) and self._value_conflict(table, value):
|
|
57
|
-
print(f"[Uyarı] {value} çakışma nedeniyle eklenmedi.")
|
|
58
|
-
return None
|
|
59
|
-
|
|
60
|
-
record["id"] = len(self.data[table]) + 1
|
|
61
|
-
self.data[table].append(record)
|
|
62
|
-
self._save()
|
|
63
|
-
return record["id"]
|
|
64
|
-
|
|
65
|
-
def all(self, table):
|
|
66
|
-
return self.data.get(table, [])
|
|
67
|
-
|
|
68
|
-
def find(self, table, **filters):
|
|
69
|
-
result = []
|
|
70
|
-
for item in self.data.get(table, []):
|
|
71
|
-
if all(item.get(k) == v for k, v in filters.items()):
|
|
72
|
-
result.append(item)
|
|
73
|
-
return result
|
|
74
|
-
|
|
75
|
-
# 🔹 Yeni: ID bazlı silme
|
|
76
|
-
def delete(self, table, record_id, field=None):
|
|
77
|
-
if table not in self.data:
|
|
78
|
-
print(f"[Hata] '{table}' tablosu yok.")
|
|
79
|
-
return 0
|
|
80
|
-
|
|
81
|
-
for item in self.data[table]:
|
|
82
|
-
if item.get("id") == record_id:
|
|
83
|
-
if field is None:
|
|
84
|
-
self.data[table].remove(item)
|
|
85
|
-
print(f"[Silindi] ID {record_id} tamamen silindi.")
|
|
86
|
-
else:
|
|
87
|
-
if field in item:
|
|
88
|
-
print(f"[Silindi] ID {record_id} kaydındaki '{field}' alanı silindi.")
|
|
89
|
-
del item[field]
|
|
90
|
-
self._save()
|
|
91
|
-
return 1
|
|
92
|
-
|
|
93
|
-
print(f"[Uyarı] ID {record_id} bulunamadı.")
|
|
94
|
-
return 0
|
|
95
|
-
|
|
96
|
-
# 🔹 Yeni: ID bazlı güncelleme
|
|
97
|
-
def update(self, table, record_id, **updates):
|
|
98
|
-
if table not in self.data:
|
|
99
|
-
print(f"[Hata] '{table}' tablosu yok.")
|
|
100
|
-
return 0
|
|
101
|
-
|
|
102
|
-
for item in self.data[table]:
|
|
103
|
-
if item.get("id") == record_id:
|
|
104
|
-
item.update(updates)
|
|
105
|
-
self._save()
|
|
106
|
-
print(f"[Güncellendi] ID {record_id} başarıyla güncellendi.")
|
|
107
|
-
return 1
|
|
108
|
-
|
|
109
|
-
print(f"[Uyarı] ID {record_id} bulunamadı.")
|
|
110
|
-
return 0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|