PKDevTools 0.13.20250214.235__cp312-cp312-win_amd64.whl → 0.13.20250221.237__cp312-cp312-win_amd64.whl
Sign up to get free protection for your applications and to get access to all the features.
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/DBManager.py +42 -3
- PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/__init__.py +1 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/publisher.py +5 -0
- PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/subscriber.py +84 -0
- {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/METADATA +2 -2
- PKDevTools-0.13.20250221.237.dist-info/RECORD +48 -0
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/__init__.py +0 -1
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/subscriber.py +0 -54
- PKDevTools-0.13.20250214.235.dist-info/RECORD +0 -48
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/LICENSE.txt +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/README.txt +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/__init__.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Archiver.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/ColorText.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Committer.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/CookieHelper.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Environment.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Fetcher.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/FunctionTimeouts.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/GmailReader.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/MarketHours.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/MenuOptions.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/NSEMarketStatus.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/OutputControls.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKDateUtilities.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKGitFolderDownloader.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKJoinableQueue.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKMultiProcessorClient.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKPickler.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKTimer.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Pikey.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Singleton.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/SuppressOutput.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/System.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Telegram.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/UserSubscriptions.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Utils.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/WorkflowManager.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/githubutilities.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/log.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/multiprocessing_logging.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/__init__.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/events.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/squash.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/updater.py +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/release.md +0 -0
- {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/requirements.txt +0 -0
- {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/LICENSE +0 -0
- {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/WHEEL +0 -0
- {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/entry_points.txt +0 -0
- {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/top_level.txt +0 -0
@@ -88,7 +88,14 @@ class PKUser:
|
|
88
88
|
user.subscriptionmodel= row[7] if len(row) > 7 else None
|
89
89
|
user.lastotp= row[8] if len(row) > 8 else None
|
90
90
|
return user
|
91
|
-
|
91
|
+
|
92
|
+
def payingUserFromDBRecord(row):
|
93
|
+
user = PKUser()
|
94
|
+
user.userid= row[0] if len(row) > 0 else None
|
95
|
+
user.subscriptionmodel = row[1] if len(row) > 1 else None
|
96
|
+
user.balance= row[2] if len(row) > 2 else None
|
97
|
+
return user
|
98
|
+
|
92
99
|
def userFromAlertsRecord(row,user=None):
|
93
100
|
if user is None:
|
94
101
|
user = PKUser()
|
@@ -338,7 +345,7 @@ class DBManager:
|
|
338
345
|
self.conn.close()
|
339
346
|
self.conn = None
|
340
347
|
|
341
|
-
def getUsers(self,fieldName=None):
|
348
|
+
def getUsers(self,fieldName=None,where=None):
|
342
349
|
"""
|
343
350
|
Returns all active PKUser instances in the database or an empty list if none is found.
|
344
351
|
Returns only the fieldName if requested.
|
@@ -346,7 +353,7 @@ class DBManager:
|
|
346
353
|
try:
|
347
354
|
users = []
|
348
355
|
cursor = self.connection() #.cursor()
|
349
|
-
records = cursor.execute(f"SELECT {'*' if fieldName is None else fieldName} FROM users") #.fetchall()
|
356
|
+
records = cursor.execute(f"SELECT {'*' if fieldName is None else fieldName} FROM users {where if where is not None else ''}") #.fetchall()
|
350
357
|
for row in records.rows:
|
351
358
|
users.append(PKUser.userFromDBRecord(row))
|
352
359
|
# cursor.close()
|
@@ -635,3 +642,35 @@ class DBManager:
|
|
635
642
|
self.conn.close()
|
636
643
|
self.conn = None
|
637
644
|
return success
|
645
|
+
|
646
|
+
def getPayingUsers(self):
|
647
|
+
"""
|
648
|
+
Returns all active PKUser instances in the database who either have a subscription model
|
649
|
+
or have a alerts balance.
|
650
|
+
"""
|
651
|
+
try:
|
652
|
+
users = []
|
653
|
+
cursor = self.connection() #.cursor()
|
654
|
+
query_paying_users = """
|
655
|
+
SELECT DISTINCT u.userId, u.subscriptionmodel, a.balance
|
656
|
+
FROM users u
|
657
|
+
LEFT JOIN alertsubscriptions a ON u.userId = a.userId
|
658
|
+
WHERE COALESCE(a.balance, 0) > 0 OR (u.subscriptionmodel != '' and u.subscriptionmodel != '0');
|
659
|
+
|
660
|
+
"""
|
661
|
+
records = cursor.execute(query_paying_users)
|
662
|
+
for row in records.rows:
|
663
|
+
users.append(PKUser.payingUserFromDBRecord(row))
|
664
|
+
# cursor.close()
|
665
|
+
if len(records.columns) > 0 and len(records.rows) <= 0:
|
666
|
+
# Let's tell the user
|
667
|
+
default_logger().debug(f"Paying Users not found!")
|
668
|
+
except Exception as e: # pragma: no cover
|
669
|
+
print(f"Could not getPayingUsers\n{e}")
|
670
|
+
default_logger().debug(e, exc_info=True)
|
671
|
+
pass
|
672
|
+
finally:
|
673
|
+
if self.conn is not None:
|
674
|
+
self.conn.close()
|
675
|
+
self.conn = None
|
676
|
+
return users
|
@@ -0,0 +1 @@
|
|
1
|
+
VERSION='0.13.20250221.237'
|
@@ -29,3 +29,8 @@ class PKUserService:
|
|
29
29
|
print(f"[UserService] Notifying for scanner: {scannerID} with notification: {notification}")
|
30
30
|
# Publish the event
|
31
31
|
globalEventsSignal.send(self, scannerID=scannerID,notification=notification)
|
32
|
+
|
33
|
+
def send_event(self, event_name, event_params=None):
|
34
|
+
"""Send a custom event to Google Analytics."""
|
35
|
+
# Publish the event
|
36
|
+
globalEventsSignal.send(self, eventType="ga",event_name=event_name,event_params=event_params)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
"""
|
2
|
+
The MIT License (MIT)
|
3
|
+
|
4
|
+
Copyright (c) 2023 pkjmesra
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
8
|
+
in the Software without restriction, including without limitation the rights
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
14
|
+
copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
SOFTWARE.
|
23
|
+
|
24
|
+
"""
|
25
|
+
import uuid
|
26
|
+
import requests
|
27
|
+
from PKDevTools.classes.pubsub.events import globalEventsSignal
|
28
|
+
from PKDevTools.classes.DBManager import DBManager
|
29
|
+
from PKDevTools.classes.Telegram import send_message
|
30
|
+
|
31
|
+
class PKNotificationService:
|
32
|
+
def __init__(self):
|
33
|
+
# Subscribe to the event
|
34
|
+
globalEventsSignal.connect(self.notify)
|
35
|
+
|
36
|
+
def notify(self, sender, **kwargs):
|
37
|
+
if 'eventType' in kwargs:
|
38
|
+
if kwargs['eventType'] == "ga":
|
39
|
+
# Capture GA event
|
40
|
+
event_name = kwargs['event_name']
|
41
|
+
event_params = kwargs['event_params']
|
42
|
+
if event_params is None:
|
43
|
+
event_params = {}
|
44
|
+
|
45
|
+
payload = {
|
46
|
+
"client_id": str(uuid.uuid4()), # Unique client ID for GA
|
47
|
+
"events": [{
|
48
|
+
"name": event_name,
|
49
|
+
"params": event_params
|
50
|
+
}]
|
51
|
+
}
|
52
|
+
# Google Analytics API Details
|
53
|
+
MEASUREMENT_ID = "G-T0TLV56Y0C"
|
54
|
+
API_SECRET = "2dD6iqHQQl2EzhCvHXA7EQ"
|
55
|
+
GA_ENDPOINT = f"https://www.google-analytics.com/mp/collect?measurement_id={MEASUREMENT_ID}&api_secret={API_SECRET}"
|
56
|
+
|
57
|
+
try:
|
58
|
+
response = requests.post(GA_ENDPOINT, json=payload)
|
59
|
+
# if response.status_code == 204:
|
60
|
+
# print(f"Event '{event_name}' sent successfully")
|
61
|
+
# else:
|
62
|
+
# print(f"Error sending event: {response.text}")
|
63
|
+
except Exception as e:
|
64
|
+
# print(f"Failed to send event: {e}")
|
65
|
+
pass
|
66
|
+
else:
|
67
|
+
notificationText = kwargs['notification'] if 'notification' in kwargs else ""
|
68
|
+
scannerID = kwargs['scannerID'] if 'scannerID' in kwargs else ""
|
69
|
+
print(f"[Notification] Notifying for {scannerID} with data: {notificationText}")
|
70
|
+
dbManager = DBManager()
|
71
|
+
try:
|
72
|
+
if len(str(scannerID)) > 0:
|
73
|
+
userIDs = dbManager.usersForScannerJobId(scannerJobId=scannerID)
|
74
|
+
if len(userIDs) > 0:
|
75
|
+
for userID in userIDs:
|
76
|
+
send_message(message=notificationText,userID=userID,parse_type="HTML",)
|
77
|
+
else:
|
78
|
+
print(f"Error encountered:\n0 length scannerID passed for {notificationText}")
|
79
|
+
except Exception as e:
|
80
|
+
print(f"Error encountered:\n{e}")
|
81
|
+
pass
|
82
|
+
|
83
|
+
# Ensure the subscriber is instantiated so it listens to events
|
84
|
+
notification_service = PKNotificationService()
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: PKDevTools
|
3
|
-
Version: 0.13.
|
3
|
+
Version: 0.13.20250221.237
|
4
4
|
Summary: A general day-to-day toolset for PKScreener repos
|
5
5
|
Home-page: https://github.com/pkjmesra/PKDevTools
|
6
|
-
Download-URL: https://github.com/pkjmesra/PKDevTools/archive/v0.13.
|
6
|
+
Download-URL: https://github.com/pkjmesra/PKDevTools/archive/v0.13.20250221.237.zip
|
7
7
|
Author: pkjmesra
|
8
8
|
Author-email: pkjmesra@gmail.com
|
9
9
|
License: OSI Approved (MIT)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/LICENSE.txt,sha256=wrl88eUZgDW6osq1UZIU4s4uZCgqGcLa46dS_sMVLik,1086
|
2
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/README.txt,sha256=9wsN1KwyM_gfEN7__AHy6iS-OMjN7dId3E2egalqIpw,4290
|
3
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/__init__.py,sha256=IFxLtOl_ylBuZt4nqrHkgZg4uuyeuLjHRaBgTuZey8U,1176
|
4
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/release.md,sha256=FfltoyIaP9mdbGYgPFnZyuI_rSjkuKn4NoyO4jNCqtI,1767
|
5
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/requirements.txt,sha256=gIi80r4cnzM0qaDBmmWp8p3dWVAtMUoGLnrAqy2w4a4,393
|
6
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Archiver.py,sha256=lT-ybDUYRBQ26WkCy53yf5f2iV6RJEtaiB9Lu8Lb0Og,6469
|
7
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/ColorText.py,sha256=UDqA229ujXwGDB1PkkMT-ZTu6VIWgZyIaq4XXPjFmsI,8789
|
8
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Committer.py,sha256=L3sYt6a09T7sxapeFhAErVTe93HDZ8vbxsZREadsGJ8,4629
|
9
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/CookieHelper.py,sha256=b781bqVWVgIot9n-KhJja31Qrcwow4iVqpxeav30f4k,6376
|
10
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/DBManager.py,sha256=hYpOvccvuGT8-V81iMV36Wn48GIjDnvUrVIEq0Mt_Fg,31318
|
11
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Environment.py,sha256=xhKosR8odmENok7rZ8CwmSp_fn0d6RhnZY2bHUxlS1U,2030
|
12
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Fetcher.py,sha256=LCBaakl5LcktasnO7rvrVY4AEOIl6fzeWPZPjkER2lo,9202
|
13
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/FunctionTimeouts.py,sha256=1HyzFWasJ2Rvhj8TJvGq3IcAg5naU3Fe-70LLRMkrfQ,2608
|
14
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/GmailReader.py,sha256=NpLecHeHLBP4VXHfxBXoV3CeiwcQUuVFWp_mq2mSZLA,7562
|
15
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/MarketHours.py,sha256=8hpCEEAC3fMseURaaYkVGMm3Nbju3L_tdTOsMZsY7kg,2216
|
16
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/MenuOptions.py,sha256=4t60fcsvwM7-Yr-_xtH3eiu_ll4Rrb1ScafMt3BHQNU,11963
|
17
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/NSEMarketStatus.py,sha256=sdJkmRNckgWZORPsOfX6F7YmHrQsOhJ-Kvjghf24isM,5694
|
18
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/OutputControls.py,sha256=CbeDN9Vq-N_0sMCpkn5LrqWEvITBLmwuUPaXb7SSXtU,3554
|
19
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKDateUtilities.py,sha256=W4qF_Rr3f6ad5qbdfRu0MY4b2ScBkE1TzKtLn1Gw7MU,18263
|
20
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKGitFolderDownloader.py,sha256=470KcaCH1jTyJnTt3RmPhKrgHFOcYx42uPFL-NHM3AM,2988
|
21
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKJoinableQueue.py,sha256=WTfeqKh82_DcnSFYvkmx9WjM-RMeXBEmSmeYkD8e58E,5243
|
22
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKMultiProcessorClient.py,sha256=tUeZ7vQzs2SX7WbGfOGlq-SOLgKq2CZyeLPlsFbF6QI,13505
|
23
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKPickler.py,sha256=AkvQKQY-aowtu_TqAUg_7m_bTSxt7NvGYN4CkJymvmg,14369
|
24
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKTimer.py,sha256=tdJhODrs8zzxb12tc4BGzxGgY9xRWXNqtjYBD2PNOts,3433
|
25
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Pikey.py,sha256=jgm9xLfRk4DCPLO5MgEui76IrMiPGUl2XvsnxO0qmJc,2813
|
26
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Singleton.py,sha256=dbFRNdaVceUp7gb7Or7Xa2u3Id8H1Ce8-DyOG32zS-Q,4556
|
27
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/SuppressOutput.py,sha256=gjgByErulUjsZ1JVgkSNFmXC9qdkg4V0YrhT1tFmJuE,2004
|
28
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/System.py,sha256=UBM7A86NQhlRInCItb0mFs4plFE7ewXOXLn4KUtMiNg,4092
|
29
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Telegram.py,sha256=AGR7LQCLGRId8S16bN6JA_YrYtjHJqpG6w4KvOVhHiw,15877
|
30
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/UserSubscriptions.py,sha256=G9PC3kuBHjbVRGTDqV265iCpzjxMmoAEyRQuo9awe1M,11266
|
31
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Utils.py,sha256=7a19Gb1SPGPQxa6bhNW-DncvDpEVTdrCuDttAjV4uc8,24543
|
32
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/WorkflowManager.py,sha256=UdNZ_iGXLxO1K13Dv7do4w6ecyAoxaPlBLETFuXyGbc,9984
|
33
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/__init__.py,sha256=R_FnIQScmDz9Smqk3o1-cIIexDoVvASd5HH3xHTEf5U,28
|
34
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/githubutilities.py,sha256=yRkJX2W3i3yCpFEUjEBGrk_2UX4vbscBvoJJoLDaD_k,3738
|
35
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/log.py,sha256=aDA5bd8L2bKAGLZzTFCD2gvXq6MbfceEkE-t_J89V40,16136
|
36
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/multiprocessing_logging.py,sha256=Lrzn9w4lsOWwUN7Z4lHoXkD7f8DNR8Za2S4zzAvUqvo,7430
|
37
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/squash.py,sha256=tNNLO2BuieZm9AlKzVYesY7p2yCUeJX1rtkZxbnlGRg,2864
|
38
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/updater.py,sha256=yuHsGBVI-mm9_YrdCCRoKZ8HGro370UszM4s0zwZMC8,4846
|
39
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/__init__.py,sha256=IFxLtOl_ylBuZt4nqrHkgZg4uuyeuLjHRaBgTuZey8U,1176
|
40
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/events.py,sha256=6y3PsntBRv9ARfyAUT1hPpEngsdrnBrObTyd8Y2y99o,1265
|
41
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/publisher.py,sha256=peo95WGxtKKc37hGMoFsVzGnYxcBJAfVYVKO1SSQdQk,1792
|
42
|
+
PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/subscriber.py,sha256=PtkaUqOK1vk5OU3yeGbcGgyfLJCl5G6gzuGL4Mw2KSo,3888
|
43
|
+
PKDevTools-0.13.20250221.237.dist-info/LICENSE,sha256=wrl88eUZgDW6osq1UZIU4s4uZCgqGcLa46dS_sMVLik,1086
|
44
|
+
PKDevTools-0.13.20250221.237.dist-info/METADATA,sha256=P64oncIUVLrsI7Rs0rieNDOIbZZbikhVdHJehlBDaGE,6119
|
45
|
+
PKDevTools-0.13.20250221.237.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
|
46
|
+
PKDevTools-0.13.20250221.237.dist-info/entry_points.txt,sha256=itdAnPuy8DO45uGuAEms0UJcoa2nGJVAUwm7NIL4-Yw,353
|
47
|
+
PKDevTools-0.13.20250221.237.dist-info/top_level.txt,sha256=WTig-LzPiEcyuyhbNRhJz1mX_RB-fojodPK48k3NmPg,11
|
48
|
+
PKDevTools-0.13.20250221.237.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.13.20250214.235'
|
@@ -1,54 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
The MIT License (MIT)
|
3
|
-
|
4
|
-
Copyright (c) 2023 pkjmesra
|
5
|
-
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
8
|
-
in the Software without restriction, including without limitation the rights
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
11
|
-
furnished to do so, subject to the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
14
|
-
copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
-
SOFTWARE.
|
23
|
-
|
24
|
-
"""
|
25
|
-
from PKDevTools.classes.pubsub.events import globalEventsSignal
|
26
|
-
from PKDevTools.classes.DBManager import DBManager
|
27
|
-
from PKDevTools.classes.Telegram import send_message
|
28
|
-
|
29
|
-
class PKNotificationService:
|
30
|
-
def __init__(self):
|
31
|
-
# Subscribe to the event
|
32
|
-
globalEventsSignal.connect(self.notify)
|
33
|
-
|
34
|
-
def notify(self, sender, **kwargs):
|
35
|
-
notificationText = kwargs['notification'] if 'notification' in kwargs else ""
|
36
|
-
scannerID = kwargs['scannerID'] if 'scannerID' in kwargs else ""
|
37
|
-
print(f"[Notification] Notifying for {scannerID} with data: {notificationText}")
|
38
|
-
dbManager = DBManager()
|
39
|
-
try:
|
40
|
-
if len(str(scannerID)) > 0:
|
41
|
-
userIDs = dbManager.usersForScannerJobId(scannerJobId=scannerID)
|
42
|
-
if len(userIDs) > 0:
|
43
|
-
for userID in userIDs:
|
44
|
-
send_message(message=notificationText,userID=userID,parse_type="HTML",)
|
45
|
-
else:
|
46
|
-
print(f"Error encountered:\n0 length scannerID passed for {notificationText}")
|
47
|
-
except Exception as e:
|
48
|
-
print(f"Error encountered:\n{e}")
|
49
|
-
pass
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
# Ensure the subscriber is instantiated so it listens to events
|
54
|
-
notification_service = PKNotificationService()
|
@@ -1,48 +0,0 @@
|
|
1
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/LICENSE.txt,sha256=wrl88eUZgDW6osq1UZIU4s4uZCgqGcLa46dS_sMVLik,1086
|
2
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/README.txt,sha256=9wsN1KwyM_gfEN7__AHy6iS-OMjN7dId3E2egalqIpw,4290
|
3
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/__init__.py,sha256=IFxLtOl_ylBuZt4nqrHkgZg4uuyeuLjHRaBgTuZey8U,1176
|
4
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/release.md,sha256=FfltoyIaP9mdbGYgPFnZyuI_rSjkuKn4NoyO4jNCqtI,1767
|
5
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/requirements.txt,sha256=gIi80r4cnzM0qaDBmmWp8p3dWVAtMUoGLnrAqy2w4a4,393
|
6
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Archiver.py,sha256=lT-ybDUYRBQ26WkCy53yf5f2iV6RJEtaiB9Lu8Lb0Og,6469
|
7
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/ColorText.py,sha256=UDqA229ujXwGDB1PkkMT-ZTu6VIWgZyIaq4XXPjFmsI,8789
|
8
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Committer.py,sha256=L3sYt6a09T7sxapeFhAErVTe93HDZ8vbxsZREadsGJ8,4629
|
9
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/CookieHelper.py,sha256=b781bqVWVgIot9n-KhJja31Qrcwow4iVqpxeav30f4k,6376
|
10
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/DBManager.py,sha256=gCoB8o1g2QKFN1mZqLh03GU-ea2cJiy0-iwVxnD1gfk,29692
|
11
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Environment.py,sha256=xhKosR8odmENok7rZ8CwmSp_fn0d6RhnZY2bHUxlS1U,2030
|
12
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Fetcher.py,sha256=LCBaakl5LcktasnO7rvrVY4AEOIl6fzeWPZPjkER2lo,9202
|
13
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/FunctionTimeouts.py,sha256=1HyzFWasJ2Rvhj8TJvGq3IcAg5naU3Fe-70LLRMkrfQ,2608
|
14
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/GmailReader.py,sha256=NpLecHeHLBP4VXHfxBXoV3CeiwcQUuVFWp_mq2mSZLA,7562
|
15
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/MarketHours.py,sha256=8hpCEEAC3fMseURaaYkVGMm3Nbju3L_tdTOsMZsY7kg,2216
|
16
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/MenuOptions.py,sha256=4t60fcsvwM7-Yr-_xtH3eiu_ll4Rrb1ScafMt3BHQNU,11963
|
17
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/NSEMarketStatus.py,sha256=sdJkmRNckgWZORPsOfX6F7YmHrQsOhJ-Kvjghf24isM,5694
|
18
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/OutputControls.py,sha256=CbeDN9Vq-N_0sMCpkn5LrqWEvITBLmwuUPaXb7SSXtU,3554
|
19
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKDateUtilities.py,sha256=W4qF_Rr3f6ad5qbdfRu0MY4b2ScBkE1TzKtLn1Gw7MU,18263
|
20
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKGitFolderDownloader.py,sha256=470KcaCH1jTyJnTt3RmPhKrgHFOcYx42uPFL-NHM3AM,2988
|
21
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKJoinableQueue.py,sha256=WTfeqKh82_DcnSFYvkmx9WjM-RMeXBEmSmeYkD8e58E,5243
|
22
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKMultiProcessorClient.py,sha256=tUeZ7vQzs2SX7WbGfOGlq-SOLgKq2CZyeLPlsFbF6QI,13505
|
23
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKPickler.py,sha256=AkvQKQY-aowtu_TqAUg_7m_bTSxt7NvGYN4CkJymvmg,14369
|
24
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKTimer.py,sha256=tdJhODrs8zzxb12tc4BGzxGgY9xRWXNqtjYBD2PNOts,3433
|
25
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Pikey.py,sha256=jgm9xLfRk4DCPLO5MgEui76IrMiPGUl2XvsnxO0qmJc,2813
|
26
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Singleton.py,sha256=dbFRNdaVceUp7gb7Or7Xa2u3Id8H1Ce8-DyOG32zS-Q,4556
|
27
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/SuppressOutput.py,sha256=gjgByErulUjsZ1JVgkSNFmXC9qdkg4V0YrhT1tFmJuE,2004
|
28
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/System.py,sha256=UBM7A86NQhlRInCItb0mFs4plFE7ewXOXLn4KUtMiNg,4092
|
29
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Telegram.py,sha256=AGR7LQCLGRId8S16bN6JA_YrYtjHJqpG6w4KvOVhHiw,15877
|
30
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/UserSubscriptions.py,sha256=G9PC3kuBHjbVRGTDqV265iCpzjxMmoAEyRQuo9awe1M,11266
|
31
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Utils.py,sha256=7a19Gb1SPGPQxa6bhNW-DncvDpEVTdrCuDttAjV4uc8,24543
|
32
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/WorkflowManager.py,sha256=UdNZ_iGXLxO1K13Dv7do4w6ecyAoxaPlBLETFuXyGbc,9984
|
33
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/__init__.py,sha256=OmVv_20ICDFuxeNHz9W03AmMA299fQDl4Fy2BbY0qGU,28
|
34
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/githubutilities.py,sha256=yRkJX2W3i3yCpFEUjEBGrk_2UX4vbscBvoJJoLDaD_k,3738
|
35
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/log.py,sha256=aDA5bd8L2bKAGLZzTFCD2gvXq6MbfceEkE-t_J89V40,16136
|
36
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/multiprocessing_logging.py,sha256=Lrzn9w4lsOWwUN7Z4lHoXkD7f8DNR8Za2S4zzAvUqvo,7430
|
37
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/squash.py,sha256=tNNLO2BuieZm9AlKzVYesY7p2yCUeJX1rtkZxbnlGRg,2864
|
38
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/updater.py,sha256=yuHsGBVI-mm9_YrdCCRoKZ8HGro370UszM4s0zwZMC8,4846
|
39
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/__init__.py,sha256=IFxLtOl_ylBuZt4nqrHkgZg4uuyeuLjHRaBgTuZey8U,1176
|
40
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/events.py,sha256=6y3PsntBRv9ARfyAUT1hPpEngsdrnBrObTyd8Y2y99o,1265
|
41
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/publisher.py,sha256=1W5meGla2JJlc0_TnrNzO6dWrMPzzBdRT1vbm5-XkNY,1544
|
42
|
-
PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/subscriber.py,sha256=ucVC0-T92jT-0xsZf69jeqBcXoxgztR7tJf0S-4Iidw,2461
|
43
|
-
PKDevTools-0.13.20250214.235.dist-info/LICENSE,sha256=wrl88eUZgDW6osq1UZIU4s4uZCgqGcLa46dS_sMVLik,1086
|
44
|
-
PKDevTools-0.13.20250214.235.dist-info/METADATA,sha256=NyauqV3G8ah5XWPbJQ_38q6wD6Ivwpnp49TQrus0FlQ,6119
|
45
|
-
PKDevTools-0.13.20250214.235.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
|
46
|
-
PKDevTools-0.13.20250214.235.dist-info/entry_points.txt,sha256=itdAnPuy8DO45uGuAEms0UJcoa2nGJVAUwm7NIL4-Yw,353
|
47
|
-
PKDevTools-0.13.20250214.235.dist-info/top_level.txt,sha256=WTig-LzPiEcyuyhbNRhJz1mX_RB-fojodPK48k3NmPg,11
|
48
|
-
PKDevTools-0.13.20250214.235.dist-info/RECORD,,
|
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
|
{PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/entry_points.txt
RENAMED
File without changes
|
{PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/top_level.txt
RENAMED
File without changes
|