PKDevTools 0.13.20250214.235__cp310-cp310-macosx_10_9_x86_64.whl → 0.13.20250221.237__cp310-cp310-macosx_10_9_x86_64.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/DBManager.py +42 -3
  2. PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/__init__.py +1 -0
  3. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/publisher.py +5 -0
  4. PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/subscriber.py +84 -0
  5. {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/METADATA +2 -2
  6. PKDevTools-0.13.20250221.237.dist-info/RECORD +48 -0
  7. PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/__init__.py +0 -1
  8. PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/subscriber.py +0 -54
  9. PKDevTools-0.13.20250214.235.dist-info/RECORD +0 -48
  10. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/LICENSE.txt +0 -0
  11. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/README.txt +0 -0
  12. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/__init__.py +0 -0
  13. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Archiver.py +0 -0
  14. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/ColorText.py +0 -0
  15. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Committer.py +0 -0
  16. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/CookieHelper.py +0 -0
  17. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Environment.py +0 -0
  18. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Fetcher.py +0 -0
  19. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/FunctionTimeouts.py +0 -0
  20. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/GmailReader.py +0 -0
  21. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/MarketHours.py +0 -0
  22. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/MenuOptions.py +0 -0
  23. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/NSEMarketStatus.py +0 -0
  24. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/OutputControls.py +0 -0
  25. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKDateUtilities.py +0 -0
  26. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKGitFolderDownloader.py +0 -0
  27. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKJoinableQueue.py +0 -0
  28. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKMultiProcessorClient.py +0 -0
  29. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKPickler.py +0 -0
  30. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/PKTimer.py +0 -0
  31. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Pikey.py +0 -0
  32. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Singleton.py +0 -0
  33. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/SuppressOutput.py +0 -0
  34. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/System.py +0 -0
  35. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Telegram.py +0 -0
  36. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/UserSubscriptions.py +0 -0
  37. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/Utils.py +0 -0
  38. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/WorkflowManager.py +0 -0
  39. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/githubutilities.py +0 -0
  40. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/log.py +0 -0
  41. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/multiprocessing_logging.py +0 -0
  42. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/__init__.py +0 -0
  43. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/pubsub/events.py +0 -0
  44. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/squash.py +0 -0
  45. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/classes/updater.py +0 -0
  46. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/release.md +0 -0
  47. {PKDevTools-0.13.20250214.235.data → PKDevTools-0.13.20250221.237.data}/purelib/PKDevTools/requirements.txt +0 -0
  48. {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/LICENSE +0 -0
  49. {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/WHEEL +0 -0
  50. {PKDevTools-0.13.20250214.235.dist-info → PKDevTools-0.13.20250221.237.dist-info}/entry_points.txt +0 -0
  51. {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.1
2
2
  Name: PKDevTools
3
- Version: 0.13.20250214.235
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.20250214.235.zip
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=5kDneOnQ4s9IktVsbcPcs6o0GhW7Rw_ySDac6TA2Cw4,1065
2
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/README.txt,sha256=xw2oGRJ1M9lmJqEYw3VBh7ZjlNx7hIZw6fcDzC0shu8,4233
3
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/__init__.py,sha256=QyaxuW4OGDxF6KXLC5avvZyLhfMt9KnKAb4m9j1XUls,1152
4
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/release.md,sha256=NcfNPeUU9uaz8mRiRZRqPWkSpwoHVShdrXJqOJdKbnQ,1729
5
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/requirements.txt,sha256=9jmqyzA5fSuYakmU3g3jNrUvSc7sM0tTKt4z9yVGNTw,369
6
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Archiver.py,sha256=0D2wMp3a913QOsPXc0K_frtvpldDU7uIsP8DRAvaIQ0,6301
7
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/ColorText.py,sha256=sIsXd75jMtA44mdZQd6EO1MdFYQaH2IYukLEH9fZuEw,8585
8
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Committer.py,sha256=cHsIe9DonzQULOZwrXGuodatFSDNm5UiQafjVlWn-BE,4536
9
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/CookieHelper.py,sha256=PxW1_VanZ7AY7o7jMYxISBj9yhs69L0Sd8wvXYCRXAo,6212
10
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/DBManager.py,sha256=RQCDrZE0hfWz_mtnunqqntpzNAkqxvpk_5G9qPidqJ0,30642
11
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Environment.py,sha256=hvQwkjz9QunX0-3Dcuw5E76fjaejmHvrmiAOME9TqE4,1978
12
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Fetcher.py,sha256=W-yCSSujFie58lYAZ4HVo1gZey9R3Qpe3JL16F-eo9I,9011
13
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/FunctionTimeouts.py,sha256=xbxp-txDqiQOzVjazbrEPITMGvUIXQ0HqfFh8vYr4WU,2541
14
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/GmailReader.py,sha256=brgcUCfk-8DApUWuqgqIVp5sC5G_pq7iONEPV3kYbCw,7426
15
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/MarketHours.py,sha256=2aRzd8JfCmxc3UryvrpUS7DvHuctpz_U-E0nv72gEaY,2159
16
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/MenuOptions.py,sha256=MC_OblDzSMCENVEZCQQX4whmY3vQAhE2oBZOL69JzyA,11606
17
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/NSEMarketStatus.py,sha256=fpWLKod5HxgJIilu1G5a7FcSwmuGq1DmwBx2k-MDHs0,5552
18
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/OutputControls.py,sha256=cXI8l2ZIJAZbTbVbG7wu7iNgMBFfs51XapCS27lNjmU,3472
19
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKDateUtilities.py,sha256=QIjCGyTMkax5mv0qGC9gjLxaz4zTFX2oRqDhXAbQ8Gk,17873
20
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKGitFolderDownloader.py,sha256=RM7ZQCERKl_ttlAoo5Nt9FKuWWUirQxCxL1thZ12_hE,2936
21
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKJoinableQueue.py,sha256=8eWkWiOaqGCAegV30-bgpPsfmhVVpuxLHdyrJNY3_OY,5122
22
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKMultiProcessorClient.py,sha256=Y5t_f14z6ygzPUHDH6YJIqLrm9s7TFk5ayLxK8MeTgw,13214
23
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKPickler.py,sha256=M2F2_Z7XAmo7qfzOEiVLq3RzpldfU8Y-MfMPrMZbNGU,14082
24
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/PKTimer.py,sha256=Y0jmvrXKLkwNH3j5qIwpL_th-Nf26oCHnxsZ7_AuV8U,3345
25
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Pikey.py,sha256=wDiOUIRSxYOIO7GGUw1eGrbDuVvJ-YAU6_dfQWRp2Fk,2744
26
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Singleton.py,sha256=tBIFCgVKqs5-K6w_wx0FNNT5aks1QmOLjE_xTMHbb10,4432
27
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/SuppressOutput.py,sha256=yAsdxsVJCbVi-irsxa_ClY7JutbRU_eAEMhw4NW4QdE,1951
28
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/System.py,sha256=tMNnGUQdhUjkysJ2b9EI8dy8iXdaHkshRXpeKZlyPf8,4005
29
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Telegram.py,sha256=_BnnsgUZL1pYZdcJensbUcvW6bi_tqvt6miTQf6OCY8,15505
30
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/UserSubscriptions.py,sha256=P52b-a-UzFWKpQsT4zQFyfKcXhAZS6uyQ2yeIUqHWeQ,11067
31
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/Utils.py,sha256=P_kJnTgMK6fA6SwIvNLThvHxYVcazhD5Zo5WL_kpC3Y,24264
32
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/WorkflowManager.py,sha256=rDamQR0fF-YSzOQTjMJnksJ6dxKs-PazW6fVFlAQ_Sk,9759
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=UNSJzx8Ybn_x6zaSk497KQsMyDX7MYnQjjV-F0KP_Z0,3650
35
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/log.py,sha256=r-KBSGYXJ67Uzw51cNisB3x3uB5mlQWSOO_E6c_m1F8,15616
36
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/multiprocessing_logging.py,sha256=8W4fHL1Kstp2FIML6N6ghT--8HE4bmak3sZ1fsWF52U,7212
37
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/squash.py,sha256=iZ4MsOW_evD4VoWjO9pEHd2gWeswthM7uWSgVRpFvDw,2782
38
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/updater.py,sha256=NQ46ulqswdXkjljFwPiwufgGoCZB-Fc7DdYYh9LyS-0,4709
39
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/__init__.py,sha256=QyaxuW4OGDxF6KXLC5avvZyLhfMt9KnKAb4m9j1XUls,1152
40
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/events.py,sha256=hjkGmZF51WmR9dQ81vZPAoiVuCKGwNABvYbcFKB3FKA,1236
41
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/publisher.py,sha256=h7LQIrKDaMxSgJUSmrMXVuWY6QUGDgVKfP-Y2aRMNQA,1756
42
+ PKDevTools-0.13.20250221.237.data/purelib/PKDevTools/classes/pubsub/subscriber.py,sha256=1h86jlIapmE86XoJckPKsLYFt8PY-LFoHf8HQtWsuzI,3804
43
+ PKDevTools-0.13.20250221.237.dist-info/LICENSE,sha256=5kDneOnQ4s9IktVsbcPcs6o0GhW7Rw_ySDac6TA2Cw4,1065
44
+ PKDevTools-0.13.20250221.237.dist-info/METADATA,sha256=VZemTbs3nZgReL3c1RKmWH81Suhc6Gl5KPhvSeyDfHM,5776
45
+ PKDevTools-0.13.20250221.237.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
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=5kDneOnQ4s9IktVsbcPcs6o0GhW7Rw_ySDac6TA2Cw4,1065
2
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/README.txt,sha256=xw2oGRJ1M9lmJqEYw3VBh7ZjlNx7hIZw6fcDzC0shu8,4233
3
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/__init__.py,sha256=QyaxuW4OGDxF6KXLC5avvZyLhfMt9KnKAb4m9j1XUls,1152
4
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/release.md,sha256=NcfNPeUU9uaz8mRiRZRqPWkSpwoHVShdrXJqOJdKbnQ,1729
5
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/requirements.txt,sha256=9jmqyzA5fSuYakmU3g3jNrUvSc7sM0tTKt4z9yVGNTw,369
6
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Archiver.py,sha256=0D2wMp3a913QOsPXc0K_frtvpldDU7uIsP8DRAvaIQ0,6301
7
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/ColorText.py,sha256=sIsXd75jMtA44mdZQd6EO1MdFYQaH2IYukLEH9fZuEw,8585
8
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Committer.py,sha256=cHsIe9DonzQULOZwrXGuodatFSDNm5UiQafjVlWn-BE,4536
9
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/CookieHelper.py,sha256=PxW1_VanZ7AY7o7jMYxISBj9yhs69L0Sd8wvXYCRXAo,6212
10
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/DBManager.py,sha256=KItMQtTH8ZFH-667ht050BQYxGWyumxN9GWfcT6ZTC0,29055
11
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Environment.py,sha256=hvQwkjz9QunX0-3Dcuw5E76fjaejmHvrmiAOME9TqE4,1978
12
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Fetcher.py,sha256=W-yCSSujFie58lYAZ4HVo1gZey9R3Qpe3JL16F-eo9I,9011
13
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/FunctionTimeouts.py,sha256=xbxp-txDqiQOzVjazbrEPITMGvUIXQ0HqfFh8vYr4WU,2541
14
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/GmailReader.py,sha256=brgcUCfk-8DApUWuqgqIVp5sC5G_pq7iONEPV3kYbCw,7426
15
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/MarketHours.py,sha256=2aRzd8JfCmxc3UryvrpUS7DvHuctpz_U-E0nv72gEaY,2159
16
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/MenuOptions.py,sha256=MC_OblDzSMCENVEZCQQX4whmY3vQAhE2oBZOL69JzyA,11606
17
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/NSEMarketStatus.py,sha256=fpWLKod5HxgJIilu1G5a7FcSwmuGq1DmwBx2k-MDHs0,5552
18
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/OutputControls.py,sha256=cXI8l2ZIJAZbTbVbG7wu7iNgMBFfs51XapCS27lNjmU,3472
19
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKDateUtilities.py,sha256=QIjCGyTMkax5mv0qGC9gjLxaz4zTFX2oRqDhXAbQ8Gk,17873
20
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKGitFolderDownloader.py,sha256=RM7ZQCERKl_ttlAoo5Nt9FKuWWUirQxCxL1thZ12_hE,2936
21
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKJoinableQueue.py,sha256=8eWkWiOaqGCAegV30-bgpPsfmhVVpuxLHdyrJNY3_OY,5122
22
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKMultiProcessorClient.py,sha256=Y5t_f14z6ygzPUHDH6YJIqLrm9s7TFk5ayLxK8MeTgw,13214
23
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKPickler.py,sha256=M2F2_Z7XAmo7qfzOEiVLq3RzpldfU8Y-MfMPrMZbNGU,14082
24
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/PKTimer.py,sha256=Y0jmvrXKLkwNH3j5qIwpL_th-Nf26oCHnxsZ7_AuV8U,3345
25
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Pikey.py,sha256=wDiOUIRSxYOIO7GGUw1eGrbDuVvJ-YAU6_dfQWRp2Fk,2744
26
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Singleton.py,sha256=tBIFCgVKqs5-K6w_wx0FNNT5aks1QmOLjE_xTMHbb10,4432
27
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/SuppressOutput.py,sha256=yAsdxsVJCbVi-irsxa_ClY7JutbRU_eAEMhw4NW4QdE,1951
28
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/System.py,sha256=tMNnGUQdhUjkysJ2b9EI8dy8iXdaHkshRXpeKZlyPf8,4005
29
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Telegram.py,sha256=_BnnsgUZL1pYZdcJensbUcvW6bi_tqvt6miTQf6OCY8,15505
30
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/UserSubscriptions.py,sha256=P52b-a-UzFWKpQsT4zQFyfKcXhAZS6uyQ2yeIUqHWeQ,11067
31
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/Utils.py,sha256=P_kJnTgMK6fA6SwIvNLThvHxYVcazhD5Zo5WL_kpC3Y,24264
32
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/WorkflowManager.py,sha256=rDamQR0fF-YSzOQTjMJnksJ6dxKs-PazW6fVFlAQ_Sk,9759
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=UNSJzx8Ybn_x6zaSk497KQsMyDX7MYnQjjV-F0KP_Z0,3650
35
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/log.py,sha256=r-KBSGYXJ67Uzw51cNisB3x3uB5mlQWSOO_E6c_m1F8,15616
36
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/multiprocessing_logging.py,sha256=8W4fHL1Kstp2FIML6N6ghT--8HE4bmak3sZ1fsWF52U,7212
37
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/squash.py,sha256=iZ4MsOW_evD4VoWjO9pEHd2gWeswthM7uWSgVRpFvDw,2782
38
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/updater.py,sha256=NQ46ulqswdXkjljFwPiwufgGoCZB-Fc7DdYYh9LyS-0,4709
39
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/__init__.py,sha256=QyaxuW4OGDxF6KXLC5avvZyLhfMt9KnKAb4m9j1XUls,1152
40
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/events.py,sha256=hjkGmZF51WmR9dQ81vZPAoiVuCKGwNABvYbcFKB3FKA,1236
41
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/publisher.py,sha256=08wlR55GRCtLAt4uSuz78XqS6_2O70FGTFJmnvOFnko,1513
42
- PKDevTools-0.13.20250214.235.data/purelib/PKDevTools/classes/pubsub/subscriber.py,sha256=ucDZbJal3iUzEfiA6UlcZIOKVtN5YvYRISiqWJ4753w,2407
43
- PKDevTools-0.13.20250214.235.dist-info/LICENSE,sha256=5kDneOnQ4s9IktVsbcPcs6o0GhW7Rw_ySDac6TA2Cw4,1065
44
- PKDevTools-0.13.20250214.235.dist-info/METADATA,sha256=hB0Mm_QajphEitxL7id1qLmpVCrM0W-CnSevFA_fqfM,5776
45
- PKDevTools-0.13.20250214.235.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
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,,