pkscreener 0.46.20250214.718__cp312-cp312-manylinux2014_x86_64.whl → 0.46.20250218.720__cp312-cp312-manylinux2014_x86_64.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.
Files changed (60) hide show
  1. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/README.txt +5 -5
  2. pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/__init__.py +1 -0
  3. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreenerbot.py +128 -23
  4. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/requirements.txt +1 -1
  5. {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/METADATA +8 -8
  6. pkscreener-0.46.20250218.720.dist-info/RECORD +58 -0
  7. pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/__init__.py +0 -1
  8. pkscreener-0.46.20250214.718.dist-info/RECORD +0 -58
  9. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  10. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  11. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LICENSE.txt +0 -0
  12. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LogoWM.txt +0 -0
  13. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/__init__.py +0 -0
  14. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  15. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/AssetsManager.py +0 -0
  16. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  17. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  18. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  19. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  20. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  21. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
  22. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  23. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  24. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
  25. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  26. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  27. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
  28. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  29. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  30. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  31. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  32. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
  33. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  34. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  35. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  36. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  37. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
  38. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  39. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  40. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  41. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  42. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
  43. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
  44. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  45. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  46. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
  47. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
  48. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  49. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  50. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Utility.py +0 -0
  51. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  52. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/keys.py +0 -0
  53. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/courbd.ttf +0 -0
  54. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/globals.py +0 -0
  55. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreener.ini +0 -0
  56. {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreenercli.py +0 -0
  57. {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/LICENSE +0 -0
  58. {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/WHEEL +0 -0
  59. {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/entry_points.txt +0 -0
  60. {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/top_level.txt +0 -0
@@ -328,15 +328,15 @@ After you have finished the run, go to that copied path, zip the contents of the
328
328
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
329
329
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
330
330
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
331
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli.exe
331
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli.exe
332
332
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
333
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_x64.bin
333
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.bin
334
334
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
335
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_arm64.bin
335
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.bin
336
336
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
337
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_x64.run
337
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.run
338
338
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
339
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_arm64.run
339
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.run
340
340
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
341
341
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
342
342
  [pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
@@ -0,0 +1 @@
1
+ VERSION='0.46.20250218.720'
@@ -165,6 +165,7 @@ PIPED_SCAN_SKIP_COMMAND_MENUS =["2", "3", "M", "0", "4"]
165
165
  PIPED_SCAN_SKIP_INDEX_MENUS =["W","N","E","S","0","Z","M","15"]
166
166
  UNSUPPORTED_COMMAND_MENUS =["22","M","Z","0",str(MAX_MENU_OPTION)]
167
167
  SUPPORTED_COMMAND_MENUS = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45"]
168
+ user_states = {}
168
169
 
169
170
  def registerUser(user,forceFetch=False):
170
171
  otpValue, subsModel,subsValidity,alertUser = 0,0,None,None
@@ -213,6 +214,32 @@ def sanitiseTexts(text):
213
214
  return text[:MAX_MSG_LENGTH]
214
215
  return text
215
216
 
217
+ def updateSubscription(userid,subvalue,subtype = "add"):
218
+ workflow_name = "w18-workflow-sub-data.yml"
219
+ branch = "main"
220
+ updatedResults = None
221
+ try:
222
+ workflow_postData = (
223
+ '{"ref":"'
224
+ + branch
225
+ + '","inputs":{"userid":"'
226
+ + f"{userid}"
227
+ + '","subtype":"'
228
+ + f"{subtype}"
229
+ + '","subvalue":"'
230
+ + f"{subvalue}"
231
+ + '"}}'
232
+ )
233
+ ghp_token = PKEnvironment().allSecrets["PKG"]
234
+ resp = run_workflow(workflowType="O",repo="PKScreener",owner="pkjmesra",branch=branch,ghp_token=ghp_token,workflow_name=workflow_name,workflow_postData=workflow_postData)
235
+ if resp is not None and resp.status_code != 204:
236
+ updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
237
+ except Exception as e:
238
+ logger.error(e)
239
+ updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
240
+ pass
241
+ return updatedResults
242
+
216
243
  def matchUTR(update: Update, context: CallbackContext) -> str:
217
244
  global bot_available
218
245
  updateCarrier = None
@@ -250,27 +277,10 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
250
277
  matchedTran = PKGmailReader.matchUTR(utr=args[0])
251
278
  if matchedTran is not None:
252
279
  updatedResults = f"We have found the following transaction for the provided UTR:\n{matchedTran}\n\nYour subscription is being enabled soon!\n\nPlease check with /OTP in the next couple of minutes!\n\nThank you for trusting PKScreener!"
253
- workflow_name = "w18-workflow-sub-data.yml"
254
- subtype = "add"
255
- userid = user.id
256
- branch = "main"
257
280
  try:
258
- subvalue = int(float(matchedTran.get("amountPaid")))
259
- workflow_postData = (
260
- '{"ref":"'
261
- + branch
262
- + '","inputs":{"userid":"'
263
- + f"{userid}"
264
- + '","subtype":"'
265
- + f"{subtype}"
266
- + '","subvalue":"'
267
- + f"{subvalue}"
268
- + '"}}'
269
- )
270
- ghp_token = PKEnvironment().allSecrets["PKG"]
271
- resp = run_workflow(workflowType="O",repo="PKScreener",owner="pkjmesra",branch=branch,ghp_token=ghp_token,workflow_name=workflow_name,workflow_postData=workflow_postData)
272
- if resp is not None and resp.status_code != 204:
273
- updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
281
+ results = updateSubscription(user.id,int(float(matchedTran.get("amountPaid"))))
282
+ if results is not None:
283
+ updatedResults = results
274
284
  except Exception as e:
275
285
  logger.error(e)
276
286
  updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
@@ -1271,6 +1281,61 @@ def Level2(update: Update, context: CallbackContext) -> str:
1271
1281
  registerUser(user)
1272
1282
  return START_ROUTES
1273
1283
 
1284
+ def handleHousekeeping(update: Update, context: CallbackContext) -> str:
1285
+ updateCarrier = None
1286
+ menuText = "Not implemented yet..."
1287
+ shouldSendUpdate = False
1288
+ if update is None:
1289
+ return
1290
+ else:
1291
+ if update.callback_query is not None:
1292
+ updateCarrier = update.callback_query
1293
+ if update.message is not None:
1294
+ updateCarrier = update.message
1295
+ if updateCarrier is None:
1296
+ return
1297
+ # Get user that sent /start and log his name
1298
+ user = updateCarrier.from_user
1299
+ query = update.callback_query
1300
+ query.answer()
1301
+ preSelection = (query.data.upper().replace("C", ""))
1302
+ selection = preSelection.split("_")[1]
1303
+ if query is None:
1304
+ start(update, context)
1305
+ return START_ROUTES
1306
+ reply_markup = default_markup(user)
1307
+ dbMgr = DBManager()
1308
+ if selection == "GAU":
1309
+ activeUsers = dbMgr.getUsers(fieldName="userId")
1310
+ if activeUsers is not None:
1311
+ menuText = f"Number of all registered users in the DB: {len(activeUsers)}"
1312
+ elif selection == "GAP":
1313
+ payingUsers = dbMgr.getPayingUsers()
1314
+ if payingUsers is not None and len(payingUsers) > 0:
1315
+ menuText = "Here are all the paying users:"
1316
+ menuText = f"{menuText}\n{"UserID".ljust(10,'#')} : {"Subs.".ljust(5,'#')} : {"Bal.".ljust(5,'#')}"
1317
+ for payingUser in payingUsers:
1318
+ menuText = f"{menuText}\n{str(payingUser.userid).ljust(10,'#')} : {str(payingUser.subscriptionmodel).ljust(5,'#')} : {str(payingUser.balance).ljust(5,'#')}"
1319
+ elif selection == "UUB":
1320
+ user_states[user.id] = f"{selection}_awaiting_input_1" # Set user state
1321
+ menuText = "Please enter a userID for whom to update balance:"
1322
+ elif selection in ["EUS", "DUS"]:
1323
+ user_states[user.id] = f"{selection}_awaiting_input_1" # Set user state
1324
+ menuText = "Please enter a userID for whom to update subscription:"
1325
+ elif selection == "GAS":
1326
+ scanners = dbMgr.scannerJobsWithActiveUsers()
1327
+ if scanners is not None:
1328
+ if len(scanners) > 0:
1329
+ menuText = f"Number of all scans running today in the DB: {len(scanners)}"
1330
+ for scanner in scanners:
1331
+ scanID = scanner.scannerId
1332
+ subUsers = ", ".join(scanner.userIds)
1333
+ menuText = f"{menuText}\nScanner: {scanID} : Users: {subUsers}"
1334
+ else:
1335
+ menuText = "No users are subscribed for alerts today!"
1336
+ editMessageText(query=query,editedText=menuText,reply_markup=reply_markup)
1337
+ return START_ROUTES
1338
+
1274
1339
  def default_markup(user=None,monitorIndex=0):
1275
1340
  mns = m0.renderForMenu(selectedMenu=None,
1276
1341
  skip=TOP_LEVEL_SCANNER_SKIP_MENUS[:len(TOP_LEVEL_SCANNER_SKIP_MENUS)-1],
@@ -1279,14 +1344,22 @@ def default_markup(user=None,monitorIndex=0):
1279
1344
  )
1280
1345
  if (PKDateUtilities.isTradingTime() and not PKDateUtilities.isTodayHoliday()[0]) or ("PKDevTools_Default_Log_Level" in os.environ.keys()) or sys.argv[0].endswith(".py"):
1281
1346
  mns.append(menu().create(f"MI_{monitorIndex}", "👩‍💻 🚀 Intraday Monitor", 2))
1347
+ hskMenus = []
1282
1348
  if user is not None and user.username == OWNER_USER:
1283
- mns.append(menu().create(f"DV_0", ("✅ Enable Logging" if not configManager.logsEnabled else "🚫 Disable Logging"), 2))
1284
- mns.append(menu().create(f"DV_1", "🔄 Restart Bot", 2))
1349
+ hskMenus.append(menu().create(f"DV_0", ("✅ Enable Logging" if not configManager.logsEnabled else "🚫 Disable Logging"), 2))
1350
+ hskMenus.append(menu().create(f"DV_1", "🔄 Restart Bot", 2))
1351
+ hskMenus.append(menu().create(f"HSK_GAU", "Get Active Users", 2))
1352
+ hskMenus.append(menu().create(f"HSK_GAP", "Get Paying Users", 2))
1353
+ hskMenus.append(menu().create(f"HSK_GAS", "Get Alerting Users", 2))
1354
+ hskMenus.append(menu().create(f"HSK_EUS", "Enable User Subs", 2))
1355
+ hskMenus.append(menu().create(f"HSK_DUS", "Disable User Subs", 2))
1356
+ hskMenus.append(menu().create(f"HSK_UUB", "Update User Balance", 2))
1357
+
1285
1358
  keyboard = []
1286
1359
  inlineMenus = []
1287
1360
  lastRowMenus = []
1288
1361
  rowIndex = 0
1289
- iconDict = {"X":"🕵️‍♂️ 🔍 ","B":"📈 🎯 ","P":"🧨 💥 ","MI":"","DV":"","VS":"🔔 📣 ","start":"🟢 🏁 "}
1362
+ iconDict = {"X":"🕵️‍♂️ 🔍 ","B":"📈 🎯 ","P":"🧨 💥 ","MI":"","DV":"","VS":"🔔 📣 ","start":"🟢 🏁 ", "HS":"🕵️‍♂️ "}
1290
1363
  for mnu in mns:
1291
1364
  if mnu.menuKey[0:2] in TOP_LEVEL_SCANNER_MENUS:
1292
1365
  rowIndex +=1
@@ -1314,6 +1387,21 @@ def default_markup(user=None,monitorIndex=0):
1314
1387
  if len(inlineMenus) > 0:
1315
1388
  keyboard.append(inlineMenus)
1316
1389
  keyboard.append(lastRowMenus)
1390
+ rowIndex = 0
1391
+ inlineMenus = []
1392
+ for hskMenu in hskMenus:
1393
+ rowIndex +=1
1394
+ inlineMenus.append(
1395
+ InlineKeyboardButton(
1396
+ iconDict.get(str(hskMenu.menuKey[0:2])) + hskMenu.menuText.split("(")[0],
1397
+ callback_data="C" + str(hskMenu.menuKey),
1398
+ )
1399
+ )
1400
+ if rowIndex % 2 == 0:
1401
+ keyboard.append(inlineMenus)
1402
+ inlineMenus = []
1403
+ if len(inlineMenus) > 0:
1404
+ keyboard.append(inlineMenus)
1317
1405
  reply_markup = InlineKeyboardMarkup(keyboard)
1318
1406
  return reply_markup
1319
1407
 
@@ -1965,6 +2053,22 @@ def help_command(update: Update, context: CallbackContext) -> None:
1965
2053
  # Get user that sent /start and log his name
1966
2054
  user = updateCarrier.from_user
1967
2055
 
2056
+ if user.id in user_states:
2057
+ if "_awaiting_input_1" in user_states[user.id]:
2058
+ hskCmd = user_states[user.id].split("_")[0]
2059
+ user_states[user.id] = f"{hskCmd}_awaiting_input_2_{updateCarrier.text}"
2060
+ update.message.reply_text(f"{'Balance' if hskCmd == 'UUB' else 'Subscription'} to be updated for entered userID: {updateCarrier.text} ✅\nPlease enter the {'Balance' if hskCmd == 'UUB' else 'Subscription'} value:")
2061
+ return START_ROUTES
2062
+ elif "_awaiting_input_2_" in user_states[user.id]:
2063
+ hskCmd = user_states[user.id].split("_")[0]
2064
+ userID = user_states[user.id].split("_")[-1]
2065
+ results = updateSubscription(int(userID),float(updateCarrier.text),subtype="remove" if hskCmd=="DUS" else "add")
2066
+ if results is None:
2067
+ update.message.reply_text(f"✅ {'Balance' if hskCmd == 'UUB' else 'Subscription'} update for userID: {userID} with balance value: {updateCarrier.text} triggered!\nPlease check with Get Paying users in a few minutes!")
2068
+ # Clear user state
2069
+ del user_states[user.id]
2070
+ return START_ROUTES
2071
+
1968
2072
  cmds = m0.renderForMenu(
1969
2073
  selectedMenu=None,
1970
2074
  skip=TOP_LEVEL_SCANNER_SKIP_MENUS[:len(TOP_LEVEL_SCANNER_SKIP_MENUS)-1],
@@ -2184,6 +2288,7 @@ def runpkscreenerbot(availability=True) -> None:
2184
2288
  CallbackQueryHandler(subscribeToScannerAlerts, pattern="^" + str("SUB_")),
2185
2289
  CallbackQueryHandler(viewSubscriptionOptions, pattern="^" + str("VS_")),
2186
2290
  CallbackQueryHandler(cancelAlertSubscription, pattern="^" + str("CAN_")),
2291
+ CallbackQueryHandler(handleHousekeeping, pattern="^" + str("CHSK_")),
2187
2292
  # CallbackQueryHandler(Level2, pattern="^" + str("CG_")),
2188
2293
  CallbackQueryHandler(end, pattern="^" + str("CZ") + "$"),
2189
2294
  CallbackQueryHandler(start, pattern="^"),
@@ -19,7 +19,7 @@ pandas_ta #>=0.3.14b0
19
19
  # and https://github.com/pyinstaller/pyinstaller/issues/7269
20
20
  pefile>=2023.2.7,<2024.8.26
21
21
  Pillow #>=9.5.0,<=9.5.0 # Keep at this version because getsize_multiline is deprecated/removed in higher versions
22
- PKDevTools>=0.13.20250126.235
22
+ PKDevTools>=0.13.20250126.236
23
23
  PKNSETools>=0.1.20250122.138
24
24
  Pyarrow #>=17.0.0
25
25
  pyppeteer #>=2.0.0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pkscreener
3
- Version: 0.46.20250214.718
3
+ Version: 0.46.20250218.720
4
4
  Summary: A Python-based stock screener for NSE, India with alerts to Telegram Channel (pkscreener)
5
5
  Home-page: https://github.com/pkjmesra/pkscreener
6
- Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250214.718.zip
6
+ Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250218.720.zip
7
7
  Author: pkjmesra
8
8
  Author-email: pkjmesra@gmail.com
9
9
  License: OSI Approved (MIT)
@@ -33,7 +33,7 @@ Requires-Dist: pandas
33
33
  Requires-Dist: pandas_ta
34
34
  Requires-Dist: pefile<2024.8.26,>=2023.2.7
35
35
  Requires-Dist: Pillow
36
- Requires-Dist: PKDevTools>=0.13.20250126.235
36
+ Requires-Dist: PKDevTools>=0.13.20250126.236
37
37
  Requires-Dist: PKNSETools>=0.1.20250122.138
38
38
  Requires-Dist: Pyarrow
39
39
  Requires-Dist: pyppeteer
@@ -392,15 +392,15 @@ After you have finished the run, go to that copied path, zip the contents of the
392
392
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
393
393
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
394
394
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
395
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli.exe
395
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli.exe
396
396
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
397
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_x64.bin
397
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.bin
398
398
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
399
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_arm64.bin
399
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.bin
400
400
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
401
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_x64.run
401
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.run
402
402
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
403
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.717/pkscreenercli_arm64.run
403
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.run
404
404
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
405
405
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
406
406
  [pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
@@ -0,0 +1,58 @@
1
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
2
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
3
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
4
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/README.txt,sha256=A2XdEU8Ft9FVlQrxfdfBKdGOl_WSSy09xc-d9gN6kvw,32701
6
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
7
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
9
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
10
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreenerbot.py,sha256=GT4ckZVmvfBsPLT0s_BsaUr6MtOat4ex-NAfUuT1_Ns,116824
11
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
12
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/requirements.txt,sha256=dQ-B6I7-ueXFLeOmUgBNt99O8UaeNOFvW8-VRvxlx4M,1457
13
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
14
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
15
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
16
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
17
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
18
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
19
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
20
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
21
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
22
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
23
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
24
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
25
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
26
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=GQOPLuUhgcrnVa0mI8ZvXqQ4vPFW00FHW_vMfICnko8,22079
27
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
28
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
29
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
30
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
31
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
32
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
33
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
34
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
35
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
36
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
37
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
38
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
39
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
40
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
41
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=ZbnPzgvT5Je9X0Dm6bewSp8u7Fj_szNucaYnit_AtCg,11465
42
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
43
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
44
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
45
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=LteoSl8r4mI2GMvVKAmdmzMe-Axy3jeyNAaIsgp48s4,221101
46
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
47
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
48
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
49
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
50
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
51
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/__init__.py,sha256=XwZ1OxXHV2qGnSYbGH2mvqT9cfWQgruDxZrXhIMYTNs,28
52
+ pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
53
+ pkscreener-0.46.20250218.720.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
54
+ pkscreener-0.46.20250218.720.dist-info/METADATA,sha256=s5HMmQBrRXHeaye86TadPRlq_oW_XZcVsu83wNwVrZo,34639
55
+ pkscreener-0.46.20250218.720.dist-info/WHEEL,sha256=aDUArjEbIuDQzblE24IvdIsBzRhJEjiXmuNUYQ-gpaA,104
56
+ pkscreener-0.46.20250218.720.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
+ pkscreener-0.46.20250218.720.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
+ pkscreener-0.46.20250218.720.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- VERSION='0.46.20250214.718'
@@ -1,58 +0,0 @@
1
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
2
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
3
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
4
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/README.txt,sha256=zaXpAy3bI9KFJQt0v_98G0_OTVBMu2KZHnRLkiyg4Bg,32701
6
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
7
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
9
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
10
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreenerbot.py,sha256=br4hCHdOYqck0nO4FS2ApQ43wH8DydAEFja0ExOovIM,111801
11
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
12
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/requirements.txt,sha256=FN4W519f9djXoatr7VpWIbrwQUMmHvMvXO54_0SG2w8,1457
13
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
14
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
15
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
16
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
17
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
18
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
19
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
20
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
21
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
22
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
23
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
24
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
25
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
26
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=GQOPLuUhgcrnVa0mI8ZvXqQ4vPFW00FHW_vMfICnko8,22079
27
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
28
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
29
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
30
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
31
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
32
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
33
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
34
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
35
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
36
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
37
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
38
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
39
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
40
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
41
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=ZbnPzgvT5Je9X0Dm6bewSp8u7Fj_szNucaYnit_AtCg,11465
42
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
43
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
44
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
45
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=LteoSl8r4mI2GMvVKAmdmzMe-Axy3jeyNAaIsgp48s4,221101
46
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
47
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
48
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
49
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
50
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
51
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/__init__.py,sha256=K7IWpgyLVwEQTUhJXK35poUNOFheF_w5e4jBdM113EY,28
52
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
53
- pkscreener-0.46.20250214.718.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
54
- pkscreener-0.46.20250214.718.dist-info/METADATA,sha256=W1upiicoP6t3UNREtus0xaTgpRhrC4Es77D-F2UUa18,34639
55
- pkscreener-0.46.20250214.718.dist-info/WHEEL,sha256=aDUArjEbIuDQzblE24IvdIsBzRhJEjiXmuNUYQ-gpaA,104
56
- pkscreener-0.46.20250214.718.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
- pkscreener-0.46.20250214.718.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
- pkscreener-0.46.20250214.718.dist-info/RECORD,,