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.

Files changed (48) hide show
  1. {kekik-1.6.2 → kekik-1.6.3}/Kekik/cache.py +38 -11
  2. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/PKG-INFO +1 -1
  3. {kekik-1.6.2 → kekik-1.6.3}/PKG-INFO +1 -1
  4. {kekik-1.6.2 → kekik-1.6.3}/setup.py +1 -1
  5. {kekik-1.6.2 → kekik-1.6.3}/Kekik/BIST.py +0 -0
  6. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Domain2IP.py +0 -0
  7. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Nesne.py +0 -0
  8. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/AESManager.py +0 -0
  9. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/CryptoJS.py +0 -0
  10. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/HexCodec.py +0 -0
  11. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/NaysHash.py +0 -0
  12. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/Packer.py +0 -0
  13. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/StringCodec.py +0 -0
  14. {kekik-1.6.2 → kekik-1.6.3}/Kekik/Sifreleme/__init__.py +0 -0
  15. {kekik-1.6.2 → kekik-1.6.3}/Kekik/__init__.py +0 -0
  16. {kekik-1.6.2 → kekik-1.6.3}/Kekik/cli.py +0 -0
  17. {kekik-1.6.2 → kekik-1.6.3}/Kekik/csv2dict.py +0 -0
  18. {kekik-1.6.2 → kekik-1.6.3}/Kekik/dict2csv.py +0 -0
  19. {kekik-1.6.2 → kekik-1.6.3}/Kekik/dict2json.py +0 -0
  20. {kekik-1.6.2 → kekik-1.6.3}/Kekik/dosya2set.py +0 -0
  21. {kekik-1.6.2 → kekik-1.6.3}/Kekik/dosya_indir.py +0 -0
  22. {kekik-1.6.2 → kekik-1.6.3}/Kekik/hwid_kontrol.py +0 -0
  23. {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/__init__.py +0 -0
  24. {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/biyografiler.py +0 -0
  25. {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/isimler.py +0 -0
  26. {kekik-1.6.2 → kekik-1.6.3}/Kekik/kisi_ver/soyisimler.py +0 -0
  27. {kekik-1.6.2 → kekik-1.6.3}/Kekik/link_islemleri.py +0 -0
  28. {kekik-1.6.2 → kekik-1.6.3}/Kekik/list2html.py +0 -0
  29. {kekik-1.6.2 → kekik-1.6.3}/Kekik/liste_fetis.py +0 -0
  30. {kekik-1.6.2 → kekik-1.6.3}/Kekik/mail_gonder.py +0 -0
  31. {kekik-1.6.2 → kekik-1.6.3}/Kekik/okunabilir_byte.py +0 -0
  32. {kekik-1.6.2 → kekik-1.6.3}/Kekik/proxy_ver.py +0 -0
  33. {kekik-1.6.2 → kekik-1.6.3}/Kekik/qr_ver.py +0 -0
  34. {kekik-1.6.2 → kekik-1.6.3}/Kekik/ses_fetis.py +0 -0
  35. {kekik-1.6.2 → kekik-1.6.3}/Kekik/slugify.py +0 -0
  36. {kekik-1.6.2 → kekik-1.6.3}/Kekik/terminal_baslik.py +0 -0
  37. {kekik-1.6.2 → kekik-1.6.3}/Kekik/txt_fetis.py +0 -0
  38. {kekik-1.6.2 → kekik-1.6.3}/Kekik/unicode_tr.py +0 -0
  39. {kekik-1.6.2 → kekik-1.6.3}/Kekik/zaman_donustur.py +0 -0
  40. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/SOURCES.txt +0 -0
  41. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/dependency_links.txt +0 -0
  42. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/entry_points.txt +0 -0
  43. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/requires.txt +0 -0
  44. {kekik-1.6.2 → kekik-1.6.3}/Kekik.egg-info/top_level.txt +0 -0
  45. {kekik-1.6.2 → kekik-1.6.3}/LICENSE +0 -0
  46. {kekik-1.6.2 → kekik-1.6.3}/MANIFEST.in +0 -0
  47. {kekik-1.6.2 → kekik-1.6.3}/README.md +0 -0
  48. {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 import wraps
5
- from time import 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
- """Fonksiyon argümanlarından cache için kullanılacak key’i oluşturur."""
115
- return (args, tuple(sorted(kwargs.items())))
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 my_func(param):
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 = make_cache_key(args, kwargs)
180
+ key = (args, tuple(sorted(kwargs.items())))
154
181
 
155
182
  try:
156
183
  return func.__cache[key]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: Kekik
3
- Version: 1.6.2
3
+ Version: 1.6.3
4
4
  Summary: İşlerimizi kolaylaştıracak fonksiyonların el altında durduğu kütüphane..
5
5
  Home-page: https://github.com/keyiflerolsun/Kekik
6
6
  Author: keyiflerolsun
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: Kekik
3
- Version: 1.6.2
3
+ Version: 1.6.3
4
4
  Summary: İşlerimizi kolaylaştıracak fonksiyonların el altında durduğu kütüphane..
5
5
  Home-page: https://github.com/keyiflerolsun/Kekik
6
6
  Author: keyiflerolsun
@@ -6,7 +6,7 @@ from io import open
6
6
  setup(
7
7
  # ? Genel Bilgiler
8
8
  name = "Kekik",
9
- version = "1.6.2",
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