pkscreener 0.46.20250908.764__cp312-cp312-manylinux2014_x86_64.whl → 0.46.20250908.766__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.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/README.txt +5 -5
  2. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/AssetsManager.py +1 -1
  3. pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/__init__.py +1 -0
  4. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/pkscreenerbot.py +23 -21
  5. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/requirements.txt +1 -1
  6. {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.766.dist-info}/METADATA +8 -8
  7. pkscreener-0.46.20250908.766.dist-info/RECORD +58 -0
  8. pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/__init__.py +0 -1
  9. pkscreener-0.46.20250908.764.dist-info/RECORD +0 -58
  10. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  11. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  12. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/LICENSE.txt +0 -0
  13. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/LogoWM.txt +0 -0
  14. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/__init__.py +0 -0
  15. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  16. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  17. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  18. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  19. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  20. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  21. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
  22. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  23. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  24. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
  25. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  26. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  27. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
  28. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  29. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  30. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  31. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  32. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
  33. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  34. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  35. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  36. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  37. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
  38. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  39. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  40. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  41. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  42. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
  43. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
  44. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  45. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  46. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
  47. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
  48. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  49. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  50. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/Utility.py +0 -0
  51. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  52. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/classes/keys.py +0 -0
  53. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/courbd.ttf +0 -0
  54. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/globals.py +0 -0
  55. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/pkscreener.ini +0 -0
  56. {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.766.data}/purelib/pkscreener/pkscreenercli.py +0 -0
  57. {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.766.dist-info}/WHEEL +0 -0
  58. {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.766.dist-info}/entry_points.txt +0 -0
  59. {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.766.dist-info}/licenses/LICENSE +0 -0
  60. {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.766.dist-info}/top_level.txt +0 -0
@@ -331,15 +331,15 @@ If you are a 3rd year or final year engineering graduate or pursuing masters in
331
331
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
332
332
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
333
333
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
334
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli.exe
334
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli.exe
335
335
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
336
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_x64.bin
336
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_x64.bin
337
337
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
338
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_arm64.bin
338
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_arm64.bin
339
339
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
340
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_x64.run
340
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_x64.run
341
341
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
342
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_arm64.run
342
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_arm64.run
343
343
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
344
344
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
345
345
  [pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
@@ -189,7 +189,7 @@ class PKAssetsManager:
189
189
  def afterMarketStockDataExists(intraday=False, forceLoad=False):
190
190
  exists, cache_file = Archiver.afterMarketStockDataExists(intraday=intraday,
191
191
  forceLoad=forceLoad,
192
- date_suffix=False)
192
+ date_suffix=True)
193
193
  return exists, cache_file
194
194
 
195
195
  @Halo(text='', spinner='dots')
@@ -0,0 +1 @@
1
+ VERSION='0.46.20250908.766'
@@ -61,6 +61,7 @@ MINUTES_2_IN_SECONDS = 120
61
61
  OWNER_USER = "Itsonlypk"
62
62
  APOLOGY_TEXT = "Apologies! The @nse_pkscreener_bot is NOT available for the time being! We are working with our host GitHub and other data source providers to sort out pending invoices and restore the services soon! Thanks for your patience and support! 🙏"
63
63
 
64
+ from pkscreener.classes import VERSION
64
65
  from PKDevTools.classes.Environment import PKEnvironment
65
66
  from PKDevTools.classes.PKDateUtilities import PKDateUtilities
66
67
  from PKDevTools.classes.ColorText import colorText
@@ -279,7 +280,7 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
279
280
  if len(args) > 0: # UTR
280
281
  matchedTran = PKGmailReader.matchUTR(utr=args[0])
281
282
  if matchedTran is not None:
282
- 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!"
283
+ updatedResults = f"We have found the following transaction for the provided UTR:\n{matchedTran}\nYour subscription is being enabled soon!\nPlease check with /OTP in the next couple of minutes!\nThank you for trusting PKScreener!"
283
284
  try:
284
285
  results = updateSubscription(user.id,int(float(matchedTran.get("amountPaid"))))
285
286
  if results is not None:
@@ -289,15 +290,16 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
289
290
  updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
290
291
  pass
291
292
  else:
292
- updatedResults = "We could not find any transaction details with the provided UTR.\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\n\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
293
+ updatedResults = "We could not find any transaction details with the provided UTR.\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
293
294
  else:
294
- updatedResults = "Did you forget to include the UTR number with /Check ?\nYou should use it like this:\n\n/Check UTR_Here\n\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\n\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
295
+ updatedResults = "Did you forget to include the UTR number with /Check ?\nYou should use it like this:\n/Check UTR_Here\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
295
296
  update.message.reply_text(sanitiseTexts(updatedResults), reply_markup=default_markup(user=user),parse_mode="HTML")
296
297
  shareUpdateWithChannel(update=update, context=context, optionChoices=f"/otp\n{updatedResults}")
297
298
  return START_ROUTES
298
299
 
299
300
  def editMessageText(query,editedText,reply_markup):
300
- editedText = f"{PKDateUtilities.currentDateTime()}:\n{editedText}"
301
+ # .replace(microsecond=0).isoformat()
302
+ editedText = f"PKScreener <b>v{VERSION}</b>\n{PKDateUtilities.currentDateTime()}:\n{editedText}"
301
303
  if query is not None and hasattr(query, "edit_message_text"):
302
304
  query.edit_message_text(text=editedText, reply_markup=reply_markup,parse_mode="HTML")
303
305
 
@@ -360,7 +362,7 @@ def start(update: Update, context: CallbackContext, updatedResults=None, monitor
360
362
  menuText = f"{menuText}\nClick /start if you want to restart the session."
361
363
  else:
362
364
  if not isUserSubscribed(user):
363
- updatedResults = f"Thank you for choosing Intraday Monitor!\n\nThis scan request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n/OTP\n\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1"
365
+ updatedResults = f"Thank you for choosing Intraday Monitor!\nThis scan request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n/OTP\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1"
364
366
  updatedResults = f"{updatedResults}\nClick /start if you want to restart the session."
365
367
  chosenBotMenuOption = f"{chosenBotMenuOption}\nInt. Monitor. MonitorIndex:{monitorIndex}\n{updatedResults}"
366
368
  menuText = updatedResults
@@ -666,7 +668,7 @@ def viewSubscriptionOptions(update:Update,context:CallbackContext,sendOTP=False)
666
668
  subscriptionModelNames = f"{subscriptionModelNames}\n₹ {str(value).ljust(6)}: {name} (Only Basic Scans are free)\n"
667
669
  else:
668
670
  subscriptionModelNames = f"{subscriptionModelNames}\n₹ {str(value).ljust(6)}: {name}"
669
- subscriptionModelNames = f"{subscriptionModelNames}</pre>\nPlease pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'><b>sponsor</b></a>\n\nPlease drop a message to @ItsOnlyPK on Telegram after paying to enable subscription manually or use \n\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically enable subscription after making payment via UPI\n"
671
+ subscriptionModelNames = f"{subscriptionModelNames}</pre>\nPlease pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'><b>sponsor</b></a>\nPlease send\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically enable subscription after making payment via UPI\n. If it is not auto-enabled, please drop a message to @ItsOnlyPK on Telegram after paying to enable subscription manually."
670
672
 
671
673
  subscriptionModelName = PKUserSusbscriptions().subscriptionValueKeyPairs[subsModel]
672
674
  if subscriptionModelName != PKSubscriptionModel.No_Subscription.name:
@@ -679,7 +681,7 @@ def viewSubscriptionOptions(update:Update,context:CallbackContext,sendOTP=False)
679
681
  if otpValue == 0:
680
682
  updatedResults = f"We are having difficulty generating OTP for your {userText}. Please try again later or reach out to @ItsOnlyPK."
681
683
  else:
682
- updatedResults = f"Please use the following to login to PKScreener:\n{userText}\n<b>OTP</b> : <code>{otpValue}</code>\n\nCurrent subscription : <b>{subscriptionModelName}</b>.\nCurrent alerts balance: <b>₹ {alertUser.balance if alertUser is not None else 0}</b> {scannerJobsSubscribed}. {subscriptionModelNames}"
684
+ updatedResults = f"Please use the following to login to PKScreener:\n{userText}\n<b>OTP</b> : <code>{otpValue}</code>\nCurrent subscription : <b>{subscriptionModelName}</b>.\nCurrent alerts balance: <b>₹ {alertUser.balance if alertUser is not None else 0}</b> {scannerJobsSubscribed}. {subscriptionModelNames}"
683
685
  else:
684
686
  updatedResults = f"Current subscription: <b>{subscriptionModelName}</b>.\nCurrent alerts balance: <b>₹ {alertUser.balance if alertUser is not None else 0}</b> {scannerJobsSubscribed}. {subscriptionModelNames}"
685
687
 
@@ -734,7 +736,7 @@ def subscribeToScannerAlerts(update: Update, context: CallbackContext) -> str:
734
736
  menuText = ""
735
737
  requiredBalance = 40 if str(scanId).upper().startswith("P") else 31
736
738
  # upi://pay?pa=PKScreener@APL&pn=PKScreener&cu=INR
737
- payWall = "Please pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>\n\nPlease drop a message to @ItsOnlyPK along with UTR and Scan details on Telegram after paying to enable subscription manually or use \n\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically update your balance after making payment via UPI.\nAfter that you can try re-subscribing!"
739
+ payWall = "Please pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>\nPlease use\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically update your balance after making payment via UPI.\nAfter that you can try re-subscribing!\nIf you still face any problem, please drop a message to @ItsOnlyPK along with UTR and Scan details on Telegram after paying to enable subscription manually."
738
740
  if alertUser is not None and alertUser.balance >= 0:
739
741
  # User has some balance
740
742
  if len(alertUser.scannerJobs) > 0:
@@ -1250,7 +1252,7 @@ def Level2(update: Update, context: CallbackContext) -> str:
1250
1252
  )
1251
1253
  optionChoices = f"{optionChoices}{f' > {selection[4]}' if len(selection) > 4 else ''}".replace(" > >","").strip()
1252
1254
  expectedTime = f"{'10 to 15' if '> 15' in optionChoices else '1 to 2'}"
1253
- menuText = f"Thank you for choosing {optionChoices.replace(' > > ','')}. You will receive the notification/results in about {expectedTime} minutes. It generally takes 1-2 minutes for NSE (2000+) stocks and 10-15 minutes for NASDAQ (7300+).\n\nPKScreener had been free for a long time, but owing to cost/budgeting issues, only a basic set of features will always remain free for everyone. Consider donating to help cover the basic server costs or subscribe to premium, if not subscribed yet:\n\nUPI (India): <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> \n\nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
1255
+ menuText = f"Thank you for choosing {optionChoices.replace(' > > ','')}. You will receive the notification/results in about {expectedTime} minutes. It generally takes 1-2 minutes for NSE (2000+) stocks and 10-15 minutes for NASDAQ (7300+).\nPKScreener had been free for a long time, but owing to cost/budgeting issues, only a basic set of features will always remain free for everyone. Consider donating to help cover the basic server costs or subscribe to premium, if not subscribed yet:\nUPI (India): <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a>\nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
1254
1256
 
1255
1257
  reply_markup = default_markup(user=user)
1256
1258
  options = ":".join(selection)
@@ -1446,7 +1448,7 @@ def launchScreener(options, user, context, optionChoices, update):
1446
1448
  isBasicScanRequest = True
1447
1449
  break
1448
1450
  if not isBasicScanRequest:
1449
- responseText = f"Thank you for choosing {scanRequest}!\n\nThis {'Backtest' if str(scanRequest).startswith('B') else 'Scan'} request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n\n/OTP\n\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1\n"
1451
+ responseText = f"Thank you for choosing {scanRequest}!\nThis {'Backtest' if str(scanRequest).startswith('B') else 'Scan'} request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n/OTP\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1\n"
1450
1452
  if update is not None and update.message is not None:
1451
1453
  update.message.reply_text(sanitiseTexts(responseText),reply_markup=default_markup(user=user),parse_mode="HTML")
1452
1454
  else:
@@ -1462,10 +1464,10 @@ def launchScreener(options, user, context, optionChoices, update):
1462
1464
  optionChoices = optionChoices[:-1]
1463
1465
  if str(optionChoices).split("_")[2] == "6" and str(optionChoices).split("_")[3] == "7":
1464
1466
  optionChoices = f"{optionChoices}_3" # Lorenzian Any/All
1465
- responseText = f"Thank you for choosing {optionChoices}!\n\nHere are the results:\n\nInsights: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Insights_DateSorted.html"
1466
- responseText = f"{responseText}\n\nSummary: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Summary_StockSorted.html"
1467
- responseText = f"{responseText}\n\nStock-wise: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_backtest_result_StockSorted.html"
1468
- responseText = f"{responseText}\n\nOther Reports: https://pkjmesra.github.io/PKScreener/BacktestReports.html"
1467
+ responseText = f"Thank you for choosing {optionChoices}!\nHere are the results:\nInsights: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Insights_DateSorted.html"
1468
+ responseText = f"{responseText}\nSummary: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Summary_StockSorted.html"
1469
+ responseText = f"{responseText}\nStock-wise: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_backtest_result_StockSorted.html"
1470
+ responseText = f"{responseText}\nOther Reports: https://pkjmesra.github.io/PKScreener/BacktestReports.html"
1469
1471
  if update is not None and update.message is not None:
1470
1472
  update.message.reply_text(sanitiseTexts(responseText),reply_markup=default_markup(user=user),parse_mode="HTML")
1471
1473
  else:
@@ -1536,7 +1538,7 @@ def BBacktests(update: Update, context: CallbackContext) -> str:
1536
1538
  ]
1537
1539
  ]
1538
1540
  reply_markup = InlineKeyboardMarkup(keyboard)
1539
- responseText = "Backtesting NOT implemented yet in this Bot!\n\n\nYou can use backtesting by downloading the software from https://github.com/pkjmesra/PKScreener/"
1541
+ responseText = "Backtesting NOT implemented yet in this Bot!\nYou can use backtesting by downloading the software from https://github.com/pkjmesra/PKScreener/"
1540
1542
  responseText = f"{responseText}\nClick /start if you want to restart the session."
1541
1543
  editMessageText(query=query,editedText=sanitiseTexts(responseText),reply_markup=default_markup(user=user))
1542
1544
  registerUser(user)
@@ -1572,7 +1574,7 @@ def end(update: Update, context: CallbackContext) -> str:
1572
1574
  """
1573
1575
  query = update.callback_query
1574
1576
  query.answer()
1575
- responseText = "See https://github.com/pkjmesra/PKScreener/ for more details or join https://t.me/PKScreener. \n\n\nSee you next time!"
1577
+ responseText = "See https://github.com/pkjmesra/PKScreener/ for more details or join https://t.me/PKScreener. \nSee you next time!"
1576
1578
  responseText = f"{responseText}\nClick /start if you want to restart the session."
1577
1579
  editMessageText(query=query,editedText=sanitiseTexts(responseText),reply_markup=default_markup(query.from_user))
1578
1580
  return ConversationHandler.END
@@ -1636,9 +1638,9 @@ def error_handler(update: object, context: CallbackContext) -> None:
1636
1638
  message = (
1637
1639
  f"An exception was raised while handling an update\n"
1638
1640
  f"<pre>update = {html.escape(json.dumps(update_str, indent=2, ensure_ascii=False))}"
1639
- "</pre>\n\n"
1640
- f"<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>\n\n"
1641
- f"<pre>context.user_data = {html.escape(str(context.user_data))}</pre>\n\n"
1641
+ "</pre>\n"
1642
+ f"<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>\n"
1643
+ f"<pre>context.user_data = {html.escape(str(context.user_data))}</pre>\n"
1642
1644
  f"<pre>{html.escape(tb_string)}</pre>"
1643
1645
  )
1644
1646
 
@@ -2031,7 +2033,7 @@ def sendRequestSubmitted(optionChoices, update, context):
2031
2033
  return
2032
2034
  # Get user that sent /start and log his name
2033
2035
  user = updateCarrier.from_user
2034
- menuText = f"Thank you for choosing {optionChoices}. You will receive the notification/results in about 1-2 minutes! \n\nConsider donating to help keep this project going:\nUPI: <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> \nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
2036
+ menuText = f"Thank you for choosing {optionChoices}. You will receive the notification/results in about 1-2 minutes! \nConsider donating to help keep this project going:\nUPI: <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> \nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
2035
2037
  update.message.reply_text(sanitiseTexts(menuText),reply_markup=default_markup(user=user),parse_mode="HTML")
2036
2038
  # help_command(update=update, context=context)
2037
2039
  shareUpdateWithChannel(
@@ -2098,7 +2100,7 @@ def help_command(update: Update, context: CallbackContext) -> None:
2098
2100
  """Send a message when the command /help is issued."""
2099
2101
  if update is not None and update.message is not None:
2100
2102
  update.message.reply_text(
2101
- sanitiseTexts(f"You can begin by typing in /start (Recommended) and hit send!\nOR\nChoose an option:\n{cmdText}\n\nWe recommend you start by clicking on this /start"),
2103
+ sanitiseTexts(f"You can begin by typing in /start (Recommended) and hit send!\nOR\nChoose an option:\n{cmdText}\nWe recommend you start by clicking on this /start"),
2102
2104
  reply_markup=default_markup(user=user),parse_mode="HTML"
2103
2105
  ) # \n\nThis bot restarts every hour starting at 5:30am IST until 10:30pm IST to keep it running on free servers. If it does not respond, please try again in a minutes to avoid the restart duration!
2104
2106
  query = update.message
@@ -19,7 +19,7 @@ pandas-ta-classic #>=0.4.67b0
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.20250908.302
22
+ PKDevTools>=0.13.20250908.303
23
23
  PKNSETools>=0.1.20250122.139
24
24
  Pyarrow #>=17.0.0
25
25
  pyppeteer #>=2.0.0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pkscreener
3
- Version: 0.46.20250908.764
3
+ Version: 0.46.20250908.766
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.20250908.764.zip
6
+ Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250908.766.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-classic
34
34
  Requires-Dist: pefile<2024.8.26,>=2023.2.7
35
35
  Requires-Dist: Pillow
36
- Requires-Dist: PKDevTools>=0.13.20250908.302
36
+ Requires-Dist: PKDevTools>=0.13.20250908.303
37
37
  Requires-Dist: PKNSETools>=0.1.20250122.139
38
38
  Requires-Dist: Pyarrow
39
39
  Requires-Dist: pyppeteer
@@ -397,15 +397,15 @@ If you are a 3rd year or final year engineering graduate or pursuing masters in
397
397
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
398
398
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
399
399
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
400
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli.exe
400
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli.exe
401
401
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
402
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_x64.bin
402
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_x64.bin
403
403
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
404
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_arm64.bin
404
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_arm64.bin
405
405
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
406
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_x64.run
406
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_x64.run
407
407
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
408
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250810.756/pkscreenercli_arm64.run
408
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.764/pkscreenercli_arm64.run
409
409
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
410
410
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
411
411
  [pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
@@ -0,0 +1,58 @@
1
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
2
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/LICENSE-Others.txt,sha256=GvIyMMu6lIBXiJP_9wgmqMWotJAgqoYJbGNjprIwRTg,271838
3
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
4
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/README.txt,sha256=_0TYyAVl3j8czatuQMoe1venBej41un41_GkQ3Rvxfc,33153
6
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/__init__.py,sha256=n6lLvxcQaR3LyqttsXiUEwtlpL3MmQjuZS3zhvyG3Xc,1651
7
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/globals.py,sha256=Qf-pUQ5ylzMoWRpQBP1CpRml_-rwoyyEn0kqDebcMOo,246321
9
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
10
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/pkscreenerbot.py,sha256=bPUJN68nI__UQK77Bh2mYX3TBPEEK_MBC8hthRDWxZA,118148
11
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/pkscreenercli.py,sha256=BSzG5Yr3JfPQpxlT9qMNJplLTbBYcadW0O9UE7O9EBI,58801
12
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/requirements.txt,sha256=jDlHXl7e51B0Cx4OjJsnlqw7z6r5-FMfhWeORK0Gj70,1503
13
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
14
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/AssetsManager.py,sha256=Q2X3UXiyyYPjM6ObXG9nnT4HJOqhG9nkoFcqwT_NJfE,32132
15
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Backtest.py,sha256=BaNHaaraXD0SG7WfJVc2kj5XuFEroQX8nm-GhZt5g8E,10530
16
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
17
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
18
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=8wo6rTXJ1C3im27yzNRgTTKk8FvZpJFzDC6fesfrkCE,17074
19
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
20
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ConfigManager.py,sha256=sfm_5maWIL5-pfOYcQp-hd11CAo-L3e5UX8I0aPn6PA,54406
21
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
22
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=WgPLO2gYJhnTLXm6yu1z9pLJcGy_fNCGBkwewrrunUo,12181
23
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Fetcher.py,sha256=2qlLvCfMAIsl1b-j6Mr0qRKq5d5vhqh8bRCJwws7fNE,16591
24
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
25
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ImageUtility.py,sha256=h1h9fiJJV6Mkdo0kfrEEbQPwgXH0j4fsczVh_Uky5mA,37032
26
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=p12ZYGhfK__ddIwbu1_VZ1CSptba8ZHZj5dcx5IL9Tk,22141
27
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/MarketStatus.py,sha256=ZhNi3LUyIOtOwWIoidI0bxidDlYJAKymMyQb7oDPClA,3786
28
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/MenuOptions.py,sha256=abK_ZsKg8pND_5ZVdLsY4sjaVerButVsWsHSdWdjPGM,64558
29
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
30
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
31
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
32
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
33
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
34
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=YgSKGzdMkVGtapK_7A0AUPZZ7L9cLV3Yz-X7TgZpu1U,34157
35
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
36
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=QHZq5flm4N5_uzVxjiuJqnB_5PL89MEpXAcxVCIZhNg,26795
37
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
38
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
39
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
40
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
41
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
42
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Pktalib.py,sha256=PkNDMbRZc4kf5f0SZg_mn6TWo4iIjVXqmr9SWFE4aEs,33474
43
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
44
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=tk7gGheJRxYLA54qCRZSs0uBgGZFN0Oh5NPSXYcf7Z4,48339
45
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=xzqBdYuTtni9-jOp8rS-MV1rVGdpw67ygX_gUzsmu88,221864
46
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/StockScreener.py,sha256=4LgU-LbTfkwUDhi9yRAT2imN3CXt3JVdwXXzkKG2QII,68004
47
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
48
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
49
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/Utility.py,sha256=FAioF11ssWAl3yzhsXZQBmykj5No8U6ii9DZEaazUHQ,13886
50
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
51
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/__init__.py,sha256=n8NNVIEMZm2xE_3NpjHtu1ATYaaKE9LPmSQyYVt9UGc,28
52
+ pkscreener-0.46.20250908.766.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
53
+ pkscreener-0.46.20250908.766.dist-info/licenses/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
54
+ pkscreener-0.46.20250908.766.dist-info/METADATA,sha256=ly1CFKY05uUTtm-vv-n_o7h-F0WWZQ0m_01nB1QkzlI,35155
55
+ pkscreener-0.46.20250908.766.dist-info/WHEEL,sha256=6TsICjgOR7isz_jYr-ssV7RSRmh1_0Z7_b5ESlzfzVY,104
56
+ pkscreener-0.46.20250908.766.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
+ pkscreener-0.46.20250908.766.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
+ pkscreener-0.46.20250908.766.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- VERSION='0.46.20250908.764'
@@ -1,58 +0,0 @@
1
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
2
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/LICENSE-Others.txt,sha256=GvIyMMu6lIBXiJP_9wgmqMWotJAgqoYJbGNjprIwRTg,271838
3
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
4
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/README.txt,sha256=Jv6r_UyWzEVtpv0xAwt0Z43qlEmd8E3wuVLhk33jzBQ,33153
6
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/__init__.py,sha256=n6lLvxcQaR3LyqttsXiUEwtlpL3MmQjuZS3zhvyG3Xc,1651
7
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/globals.py,sha256=Qf-pUQ5ylzMoWRpQBP1CpRml_-rwoyyEn0kqDebcMOo,246321
9
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
10
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreenerbot.py,sha256=rDwe92q42lSYltE_2KBjF2wSMFhj9SXiEty-npx3D_E,118037
11
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreenercli.py,sha256=BSzG5Yr3JfPQpxlT9qMNJplLTbBYcadW0O9UE7O9EBI,58801
12
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/requirements.txt,sha256=7Q3U8pDNfLtnNamrawD8mVD811E5OoVVk5ENHxnHNGg,1503
13
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
14
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/AssetsManager.py,sha256=OcwZPOWRMMhL8gzkEC8TMyanHQBEVweUV7S49s0AJaY,32133
15
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Backtest.py,sha256=BaNHaaraXD0SG7WfJVc2kj5XuFEroQX8nm-GhZt5g8E,10530
16
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
17
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
18
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=8wo6rTXJ1C3im27yzNRgTTKk8FvZpJFzDC6fesfrkCE,17074
19
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
20
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConfigManager.py,sha256=sfm_5maWIL5-pfOYcQp-hd11CAo-L3e5UX8I0aPn6PA,54406
21
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
22
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=WgPLO2gYJhnTLXm6yu1z9pLJcGy_fNCGBkwewrrunUo,12181
23
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Fetcher.py,sha256=2qlLvCfMAIsl1b-j6Mr0qRKq5d5vhqh8bRCJwws7fNE,16591
24
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
25
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ImageUtility.py,sha256=h1h9fiJJV6Mkdo0kfrEEbQPwgXH0j4fsczVh_Uky5mA,37032
26
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=p12ZYGhfK__ddIwbu1_VZ1CSptba8ZHZj5dcx5IL9Tk,22141
27
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MarketStatus.py,sha256=ZhNi3LUyIOtOwWIoidI0bxidDlYJAKymMyQb7oDPClA,3786
28
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MenuOptions.py,sha256=abK_ZsKg8pND_5ZVdLsY4sjaVerButVsWsHSdWdjPGM,64558
29
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
30
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
31
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
32
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
33
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
34
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=YgSKGzdMkVGtapK_7A0AUPZZ7L9cLV3Yz-X7TgZpu1U,34157
35
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
36
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=QHZq5flm4N5_uzVxjiuJqnB_5PL89MEpXAcxVCIZhNg,26795
37
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
38
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
39
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
40
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
41
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
42
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Pktalib.py,sha256=PkNDMbRZc4kf5f0SZg_mn6TWo4iIjVXqmr9SWFE4aEs,33474
43
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
44
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=tk7gGheJRxYLA54qCRZSs0uBgGZFN0Oh5NPSXYcf7Z4,48339
45
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=xzqBdYuTtni9-jOp8rS-MV1rVGdpw67ygX_gUzsmu88,221864
46
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/StockScreener.py,sha256=4LgU-LbTfkwUDhi9yRAT2imN3CXt3JVdwXXzkKG2QII,68004
47
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
48
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
49
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Utility.py,sha256=FAioF11ssWAl3yzhsXZQBmykj5No8U6ii9DZEaazUHQ,13886
50
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
51
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/__init__.py,sha256=DLvsitDgYNK7jhT7weGs9Kmmk2-jmZMYsudR-fknRl4,28
52
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
53
- pkscreener-0.46.20250908.764.dist-info/licenses/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
54
- pkscreener-0.46.20250908.764.dist-info/METADATA,sha256=EOC8FGhCH82-_Ag4pns6y66ecINRhaUQEiQA4nvR-Wc,35155
55
- pkscreener-0.46.20250908.764.dist-info/WHEEL,sha256=6TsICjgOR7isz_jYr-ssV7RSRmh1_0Z7_b5ESlzfzVY,104
56
- pkscreener-0.46.20250908.764.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
- pkscreener-0.46.20250908.764.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
- pkscreener-0.46.20250908.764.dist-info/RECORD,,