phanterpwa 13.23.0__py3-none-any.whl → 13.24.0__py3-none-any.whl

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.
phanterpwa/__init__.py CHANGED
@@ -3,7 +3,7 @@
3
3
  # license: MIT
4
4
 
5
5
  __author__ = "PhanterJR<junior.conex@gmail.com>"
6
- __version__ = "13.23.0"
6
+ __version__ = "13.24.0"
7
7
  __install_requeriments__ = [
8
8
  "psutil",
9
9
  "tornado",
@@ -1,3 +1,5 @@
1
+ import asyncio
2
+ import sqlite3
1
3
  from functools import wraps
2
4
  from .security import (
3
5
  Serialize,
@@ -8,6 +10,23 @@ from .security import (
8
10
  from inspect import currentframe, getframeinfo, getfile
9
11
 
10
12
 
13
+ def async_retry_on_locked(max_retries=3, delay=0.1):
14
+ def decorator(func):
15
+ @wraps(func)
16
+ async def wrapper(*args, **kwargs):
17
+ for attempt in range(max_retries):
18
+ try:
19
+ return await func(*args, **kwargs)
20
+ except sqlite3.OperationalError as e:
21
+ if "locked" in str(e) and attempt < max_retries - 1:
22
+ await asyncio.sleep(delay * (2 ** attempt)) # ✅ Async sleep
23
+ continue
24
+ raise
25
+ return await func(*args, **kwargs)
26
+ return wrapper
27
+ return decorator
28
+
29
+
11
30
  def check_application():
12
31
  def decorator(f):
13
32
  @wraps(f)
@@ -1,3 +1,4 @@
1
+ import sqlite3
1
2
  from datetime import (
2
3
  datetime,
3
4
  timedelta
@@ -5,7 +6,8 @@ from datetime import (
5
6
  from phanterpwa.backend.decorators import (
6
7
  check_application,
7
8
  check_client_token,
8
- check_user_token
9
+ check_user_token,
10
+ async_retry_on_locked
9
11
  )
10
12
  from phanterpwa.i18n import browser_language
11
13
  from phanterpwa.third_parties.xss import xssescape as E
@@ -27,6 +29,7 @@ from datetime import (
27
29
  timedelta
28
30
  )
29
31
 
32
+ CLEANUP_TIME = datetime.now()
30
33
 
31
34
  class SignClient(web.RequestHandler):
32
35
  """
@@ -89,23 +92,7 @@ class SignClient(web.RequestHandler):
89
92
  return summary
90
93
 
91
94
  @check_application()
92
- def get(self, *args, **kargs):
93
- expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_client_token_expire'])
94
- anonymous_expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_csrf_token_expire'])
95
- deactived_user_expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_user_token_expire_remember_me'])
96
- str_expire_date = expire_date.strftime('%Y-%m-%d %H:%M:%S')
97
- str_anonymous_expire_date = anonymous_expire_date.strftime('%Y-%m-%d %H:%M:%S')
98
- self.DALDatabase(
99
- (self.DALDatabase.client.date_created < str_expire_date)
100
- ).delete()
101
- self.DALDatabase(
102
- (self.DALDatabase.client.auth_user == None)
103
- & (self.DALDatabase.client.date_created < str_anonymous_expire_date)
104
- ).delete()
105
- self.DALDatabase(
106
- (self.DALDatabase.auth_user.activated == False)
107
- & ((self.DALDatabase.auth_user.date_created < deactived_user_expire_date) | (self.DALDatabase.auth_user.date_created == None))
108
- ).delete()
95
+ async def get(self, *args, **kargs):
109
96
  self.phanterpwa_client_token = self.request.headers.get('phanterpwa-client-token')
110
97
  self.phanterpwa_authorization = self.request.headers.get('phanterpwa-authorization')
111
98
  t_client = Serialize(
@@ -390,6 +377,28 @@ class SignClient(web.RequestHandler):
390
377
  self.set_status(200)
391
378
  return self.write({"status": "OK"})
392
379
 
380
+ @async_retry_on_locked()
381
+ async def _cleanup(self):
382
+ global CLEANUP_TIME
383
+ expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_client_token_expire'])
384
+ anonymous_expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_csrf_token_expire'])
385
+ deactived_user_expire_date = datetime.now() - timedelta(seconds=self.projectConfig['BACKEND'][self.app_name]['default_time_user_token_expire_remember_me'])
386
+ str_expire_date = expire_date.strftime('%Y-%m-%d %H:%M:%S')
387
+ str_anonymous_expire_date = anonymous_expire_date.strftime('%Y-%m-%d %H:%M:%S')
388
+ if CLEANUP_TIME is None or CLEANUP_TIME > (datetime.now() - timedelta(60 * 60 * 12)):
389
+ self.DALDatabase(
390
+ (self.DALDatabase.client.date_created < str_expire_date)
391
+ ).delete()
392
+ self.DALDatabase(
393
+ (self.DALDatabase.client.auth_user == None)
394
+ & (self.DALDatabase.client.date_created < str_anonymous_expire_date)
395
+ ).delete()
396
+ self.DALDatabase(
397
+ (self.DALDatabase.auth_user.activated == False)
398
+ & ((self.DALDatabase.auth_user.date_created < deactived_user_expire_date) | (self.DALDatabase.auth_user.date_created == None))
399
+ ).delete()
400
+ CLEANUP_TIME = datetime.now()
401
+
393
402
 
394
403
  class SignForms(web.RequestHandler):
395
404
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: phanterpwa
3
- Version: 13.23.0
3
+ Version: 13.24.0
4
4
  Summary: Tools for the phanterpwadeveloper framework
5
5
  Home-page: https://github.com/PhanterJR/phanterpwa
6
6
  Author: PhanterJR
@@ -1,4 +1,4 @@
1
- phanterpwa/__init__.py,sha256=M3FqSIj_Ee97BXlwc6NaWymHHOki-rS7z3tXONl3THE,397
1
+ phanterpwa/__init__.py,sha256=sXt8JNsYrFr9gnOuz17VVnwvv2CYWvXpes6rNdEluek,397
2
2
  phanterpwa/__main__.py,sha256=1vSHtv6-sgAgpZiklf9bwarXX1b-fmKx1rjwJw4h78o,4017
3
3
  phanterpwa/compiler.py,sha256=Je3qtVO_cZ69_PPWcXKyBgnRfQ-Ev-zkZ3UTN-ddOTQ,47478
4
4
  phanterpwa/configer.py,sha256=O0IO5rf-hwFNdBjcz94OF-fqXKTWbqPElTsfS5V2beY,26327
@@ -11,7 +11,7 @@ phanterpwa/tools.py,sha256=SKwqx_suix-b1DP72a7z98jlnSWDmtGNWgCQq_ogB1I,46173
11
11
  phanterpwa/xmlconstructor.py,sha256=DMtc9BXI2NMGGmLszZXh2A63Iv0D1qgoWtn0aKyrmoo,162695
12
12
  phanterpwa/backend/__init__.py,sha256=zB8rm2I9O3f448YsuaupgBlAoqZAiVM5vEoWnOOGvdw,68
13
13
  phanterpwa/backend/dataforms.py,sha256=HwR8D-4vBNXdN5MSpZmjelo-Az92lVvOTIzpbHnPpsg,64543
14
- phanterpwa/backend/decorators.py,sha256=cNgnPDGj1n47gKxQjcpN7z4bbzyj6lTmqXEGTUDt_og,55413
14
+ phanterpwa/backend/decorators.py,sha256=gPqFjUe8BCci59hBv72j2wvKZB3L5HLZIE-3ESA2wLU,56094
15
15
  phanterpwa/backend/security.py,sha256=USPky7nqTKASAN60yYs7-NnoR82LMZlf9aGlfz1QbXM,1300
16
16
  phanterpwa/backend/pydal/__init__.py,sha256=lpPDHcS9anJ5ceRSW9fBVuAgKK5qtjSoMsVjp3_nCdw,55
17
17
  phanterpwa/backend/pydal/auth.py,sha256=g_HToe-Lewtz4MmD9_KBtFmDl1SfBel0Pp_NDX36Y44,8558
@@ -24,7 +24,7 @@ phanterpwa/backend/request_handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
24
24
  phanterpwa/backend/request_handlers/admin.py,sha256=QnpoCTMRBuviSCdB84G0pUb13kIg6ky8Wv4DEVB7tRQ,63978
25
25
  phanterpwa/backend/request_handlers/auth.py,sha256=epJ2ura3u6YDKNRmvyYGR7FzF1nrgwTpneibP0z9zzw,177284
26
26
  phanterpwa/backend/request_handlers/cas.py,sha256=TeeQaodcHVkhu-cUqesh9NeAuo0oXylzcPXpQ9wG6H4,24996
27
- phanterpwa/backend/request_handlers/credentials.py,sha256=mEWyPrt_3Bd6rKIJcvpTsvngEo0alPZ-JNose7S4DtQ,51277
27
+ phanterpwa/backend/request_handlers/credentials.py,sha256=n7pK_Lctm38u3oeSRrRGOuRFIn3BSHxngtDiTPZQm64,51632
28
28
  phanterpwa/backend/request_handlers/errors.py,sha256=x3SMdpkO4mxaSRZZQQxtH1zUFh47C06kssfI4CoPokc,4472
29
29
  phanterpwa/backend/request_handlers/i18n_server.py,sha256=p3LQxOdcLHIjgaFs4wO1V2_7gKpfcDT7pDPa7m0-UbQ,3205
30
30
  phanterpwa/backend/request_handlers/internal_messages.py,sha256=w_u3NYw0KZfuCIS8tHJhV12tj_UA0_aBekk22nR3oCc,17382
@@ -435,10 +435,10 @@ phanterpwa/usual_sass/preloaders/indefined_text.sass,sha256=z4JuUtBrzoqH3HuNFXvN
435
435
  phanterpwa/usual_sass/preloaders/run_points.sass,sha256=EYl93ljfgAc-ZLJ0VScrCoIlHP7Nr6NLdxj1zk2wm_E,3367
436
436
  phanterpwa/usual_sass/preloaders/square.sass,sha256=TOsh9muP4zkYLUJcw4i1LeRs60NrtgRWBk_1oMt2_58,1348
437
437
  phanterpwa/usual_sass/preloaders/squares.sass,sha256=kH1I89qEfmbvYxCtKFVNcxP5bWIjnqbheXVnyGF0VNo,3862
438
- phanterpwa-13.23.0.dist-info/LICENSE,sha256=lGEW1PRSZOkug2-d0IJgryCjqt6zhxN5x9pFgy3lx2E,1087
439
- phanterpwa-13.23.0.dist-info/METADATA,sha256=tKM7_PzPba-30RAt9-Qbvf92E73B24HxPfyrXnXb9ps,1939
440
- phanterpwa-13.23.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
441
- phanterpwa-13.23.0.dist-info/dependency_links.txt,sha256=Pslekmz-4l1SpBO0x2aYkYZPCScmbrB9HUq1YvXYUzM,40
442
- phanterpwa-13.23.0.dist-info/entry_points.txt,sha256=siJH2lFXIdsUBDRgcXV4blOb2_iku1vcbqxJ-trIQrw,56
443
- phanterpwa-13.23.0.dist-info/top_level.txt,sha256=nF1WJ8AByxBv3bLKp3xySR2l2Twrj5n5n7C404lULSk,5319
444
- phanterpwa-13.23.0.dist-info/RECORD,,
438
+ phanterpwa-13.24.0.dist-info/LICENSE,sha256=lGEW1PRSZOkug2-d0IJgryCjqt6zhxN5x9pFgy3lx2E,1087
439
+ phanterpwa-13.24.0.dist-info/METADATA,sha256=E-iGgJjPXVNQ7-GLjiXZTR22pkH27n5adrA4TXRNtsA,1939
440
+ phanterpwa-13.24.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
441
+ phanterpwa-13.24.0.dist-info/dependency_links.txt,sha256=Pslekmz-4l1SpBO0x2aYkYZPCScmbrB9HUq1YvXYUzM,40
442
+ phanterpwa-13.24.0.dist-info/entry_points.txt,sha256=siJH2lFXIdsUBDRgcXV4blOb2_iku1vcbqxJ-trIQrw,56
443
+ phanterpwa-13.24.0.dist-info/top_level.txt,sha256=nF1WJ8AByxBv3bLKp3xySR2l2Twrj5n5n7C404lULSk,5319
444
+ phanterpwa-13.24.0.dist-info/RECORD,,