Kekik 1.6.2__tar.gz → 1.6.3__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.
Potentially problematic release.
This version of Kekik might be problematic. Click here for more details.
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/cache.py +38 -11
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/PKG-INFO +1 -1
- {kekik-1.6.2 → kekik-1.6.3}/PKG-INFO +1 -1
- {kekik-1.6.2 → kekik-1.6.3}/setup.py +1 -1
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/BIST.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Domain2IP.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Nesne.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/AESManager.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/CryptoJS.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/HexCodec.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/NaysHash.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/Packer.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/StringCodec.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/__init__.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/__init__.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/cli.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/csv2dict.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/dict2csv.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/dict2json.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/dosya2set.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/dosya_indir.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/hwid_kontrol.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/__init__.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/biyografiler.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/isimler.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/soyisimler.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/link_islemleri.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/list2html.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/liste_fetis.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/mail_gonder.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/okunabilir_byte.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/proxy_ver.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/qr_ver.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/ses_fetis.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/slugify.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/terminal_baslik.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/txt_fetis.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/unicode_tr.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik/zaman_donustur.py +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/SOURCES.txt +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/dependency_links.txt +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/entry_points.txt +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/requires.txt +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/top_level.txt +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/LICENSE +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/MANIFEST.in +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/README.md +0 -0
- {kekik-1.6.2 → kekik-1.6.3}/setup.cfg +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# ! https://github.com/Fatal1ty/aiocached
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
from functools
|
|
5
|
-
from time
|
|
4
|
+
from functools import wraps
|
|
5
|
+
from time import time
|
|
6
|
+
from hashlib import md5
|
|
7
|
+
from urllib.parse import urlencode
|
|
6
8
|
|
|
7
9
|
UNLIMITED = None
|
|
8
10
|
|
|
@@ -110,28 +112,53 @@ async def _async_compute_and_cache(func, key, unless, *args, **kwargs):
|
|
|
110
112
|
|
|
111
113
|
return result
|
|
112
114
|
|
|
113
|
-
def make_cache_key(args, kwargs):
|
|
114
|
-
"""
|
|
115
|
-
|
|
115
|
+
async def make_cache_key(args, kwargs, is_fastapi=False):
|
|
116
|
+
"""
|
|
117
|
+
Cache key'ini oluşturur.
|
|
118
|
+
|
|
119
|
+
:param is_fastapi (bool): Eğer True ise, ilk argümanın bir FastAPI Request nesnesi olduğu varsayılır.
|
|
120
|
+
Bu durumda, cache key, request nesnesinin URL yolunu (request.url.path) ve
|
|
121
|
+
isteğe ait verilerden (GET istekleri için query parametreleri; diğer istekler için JSON veya form verileri)
|
|
122
|
+
elde edilen verinin URL uyumlu halinin md5 hash'inin birleşiminden oluşturulur.
|
|
123
|
+
Böylece, aynı URL ve aynı istek verileri için her seferinde aynı cache key üretilecektir.
|
|
124
|
+
Eğer False ise, cache key args ve kwargs değerlerinden, sıralı bir tuple olarak oluşturulur.
|
|
125
|
+
"""
|
|
126
|
+
if not is_fastapi:
|
|
127
|
+
return (args, tuple(sorted(kwargs.items())))
|
|
128
|
+
|
|
129
|
+
request = args[0] if args else kwargs.get("request")
|
|
130
|
+
|
|
131
|
+
if request.method == "GET":
|
|
132
|
+
veri = dict(request.query_params) if request.query_params else None
|
|
133
|
+
else:
|
|
134
|
+
try:
|
|
135
|
+
veri = await request.json()
|
|
136
|
+
except Exception:
|
|
137
|
+
form_data = await request.form()
|
|
138
|
+
veri = dict(form_data.items())
|
|
139
|
+
|
|
140
|
+
args_hash = md5(urlencode(veri).encode()).hexdigest() if veri else ""
|
|
141
|
+
return f"{request.url.path}?{args_hash}"
|
|
116
142
|
|
|
117
143
|
|
|
118
|
-
def kekik_cache(ttl=UNLIMITED, unless=None):
|
|
144
|
+
def kekik_cache(ttl=UNLIMITED, unless=None, is_fastapi=False):
|
|
119
145
|
"""
|
|
120
146
|
Bir fonksiyon veya coroutine'in sonucunu cache'ler.
|
|
121
147
|
|
|
122
148
|
:param ttl: Cache’in geçerlilik süresi (saniye). UNLIMITED ise süresizdir.
|
|
123
149
|
:param unless: Fonksiyonun sonucunu argüman olarak alan bir callable.
|
|
124
150
|
Eğer True dönerse, sonuç cache'e alınmaz.
|
|
125
|
-
|
|
151
|
+
:param is_fastapi: Eğer True ise, cache key'i oluştururken FastAPI request nesnesine özel şekilde davranır.
|
|
152
|
+
|
|
126
153
|
Örnek kullanım:
|
|
127
154
|
|
|
128
155
|
@kekik_cache(ttl=15, unless=lambda res: res is None)
|
|
129
|
-
async def
|
|
156
|
+
async def bakalim(param):
|
|
130
157
|
...
|
|
131
158
|
"""
|
|
132
159
|
# Parametresiz kullanıldığında
|
|
133
160
|
if callable(ttl):
|
|
134
|
-
return kekik_cache(UNLIMITED, unless=unless)(ttl)
|
|
161
|
+
return kekik_cache(UNLIMITED, unless=unless, is_fastapi=is_fastapi)(ttl)
|
|
135
162
|
|
|
136
163
|
def decorator(func):
|
|
137
164
|
func.__cache = AsyncCache(ttl)
|
|
@@ -139,7 +166,7 @@ def kekik_cache(ttl=UNLIMITED, unless=None):
|
|
|
139
166
|
if asyncio.iscoroutinefunction(func):
|
|
140
167
|
@wraps(func)
|
|
141
168
|
async def async_wrapper(*args, **kwargs):
|
|
142
|
-
key = make_cache_key(args, kwargs)
|
|
169
|
+
key = await make_cache_key(args, kwargs, is_fastapi)
|
|
143
170
|
|
|
144
171
|
try:
|
|
145
172
|
return await func.__cache.get(key)
|
|
@@ -150,7 +177,7 @@ def kekik_cache(ttl=UNLIMITED, unless=None):
|
|
|
150
177
|
else:
|
|
151
178
|
@wraps(func)
|
|
152
179
|
def sync_wrapper(*args, **kwargs):
|
|
153
|
-
key =
|
|
180
|
+
key = (args, tuple(sorted(kwargs.items())))
|
|
154
181
|
|
|
155
182
|
try:
|
|
156
183
|
return func.__cache[key]
|
|
@@ -6,7 +6,7 @@ from io import open
|
|
|
6
6
|
setup(
|
|
7
7
|
# ? Genel Bilgiler
|
|
8
8
|
name = "Kekik",
|
|
9
|
-
version = "1.6.
|
|
9
|
+
version = "1.6.3",
|
|
10
10
|
url = "https://github.com/keyiflerolsun/Kekik",
|
|
11
11
|
description = "İşlerimizi kolaylaştıracak fonksiyonların el altında durduğu kütüphane..",
|
|
12
12
|
keywords = ["Kekik", "KekikAkademi", "keyiflerolsun"],
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|