pkscreener 0.46.20250221.731__cp312-cp312-win_amd64.whl → 0.46.20250222.733__cp312-cp312-win_amd64.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.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/README.txt +5 -5
  2. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/MarketMonitor.py +1 -1
  3. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKAnalytics.py +15 -3
  4. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKScanRunner.py +1 -1
  5. pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/__init__.py +1 -0
  6. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/globals.py +10 -4
  7. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/pkscreenerbot.py +1 -1
  8. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/pkscreenercli.py +3 -1
  9. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/requirements.txt +1 -1
  10. {pkscreener-0.46.20250221.731.dist-info → pkscreener-0.46.20250222.733.dist-info}/METADATA +7 -7
  11. pkscreener-0.46.20250222.733.dist-info/RECORD +58 -0
  12. pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/__init__.py +0 -1
  13. pkscreener-0.46.20250221.731.dist-info/RECORD +0 -58
  14. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  15. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  16. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/LICENSE.txt +0 -0
  17. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/LogoWM.txt +0 -0
  18. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/__init__.py +0 -0
  19. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  20. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/AssetsManager.py +0 -0
  21. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  22. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  23. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  24. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  25. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  26. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
  27. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  28. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  29. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
  30. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  31. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  32. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  33. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  34. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  35. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  36. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  37. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  38. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  39. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  40. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  41. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  42. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  43. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  44. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
  45. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
  46. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  47. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  48. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
  49. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
  50. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  51. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  52. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/Utility.py +0 -0
  53. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  54. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/classes/keys.py +0 -0
  55. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/courbd.ttf +0 -0
  56. {pkscreener-0.46.20250221.731.data → pkscreener-0.46.20250222.733.data}/purelib/pkscreener/pkscreener.ini +0 -0
  57. {pkscreener-0.46.20250221.731.dist-info → pkscreener-0.46.20250222.733.dist-info}/LICENSE +0 -0
  58. {pkscreener-0.46.20250221.731.dist-info → pkscreener-0.46.20250222.733.dist-info}/WHEEL +0 -0
  59. {pkscreener-0.46.20250221.731.dist-info → pkscreener-0.46.20250222.733.dist-info}/entry_points.txt +0 -0
  60. {pkscreener-0.46.20250221.731.dist-info → pkscreener-0.46.20250222.733.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.20250221.729/pkscreenercli.exe
331
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/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.20250221.729/pkscreenercli_x64.bin
333
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/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.20250221.729/pkscreenercli_arm64.bin
335
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/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.20250221.729/pkscreenercli_x64.run
337
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/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.20250221.729/pkscreenercli_arm64.run
339
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/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
@@ -114,7 +114,7 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
114
114
  prevOutput_results = results_df[~results_df.index.duplicated(keep='first')]
115
115
  prevOutput_results = prevOutput_results.index
116
116
  prevOutput_results = ",".join(prevOutput_results)
117
- if len(self.monitorResultStocks.keys()) > self.monitorIndex and len(self.monitorResultStocks[str(self.monitorIndex)]) > 0 and prevOutput_results == "NONE":
117
+ if len(self.monitorResultStocks.keys()) > self.monitorIndex and str(self.monitorIndex) in self.monitorResultStocks.keys() and len(self.monitorResultStocks[str(self.monitorIndex)]) > 0 and prevOutput_results == "NONE":
118
118
  prevOutput_results = self.monitorResultStocks[str(self.monitorIndex)]
119
119
  addedStocks = list(set(prevOutput_results.split(',')) - set(lastSavedResults)) # Elements in new df but not in the saved df
120
120
  if len(self.alertStocks) != len(addedStocks) and len(addedStocks) > 0:
@@ -25,6 +25,7 @@
25
25
  """
26
26
 
27
27
  import os
28
+ import sys
28
29
  # import base64
29
30
  from sys import platform
30
31
  import platform
@@ -41,7 +42,7 @@ from PKDevTools.classes.Singleton import SingletonType, SingletonMixin
41
42
  from PKDevTools.classes.pubsub.publisher import PKUserService
42
43
  from PKDevTools.classes.pubsub.subscriber import notification_service
43
44
  from pkscreener.classes import VERSION
44
-
45
+ from pkscreener.classes.ConfigManager import tools, parser
45
46
  class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
46
47
  def __init__(self):
47
48
  super(PKAnalyticsService, self).__init__()
@@ -52,9 +53,14 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
52
53
  self.app_version = VERSION
53
54
  self.start_time = time.time()
54
55
  self.isRunner = "RUNNER" in os.environ.keys()
56
+ self.onefile = getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
57
+ self.configManager = tools()
58
+ self.configManager.getConfig(parser)
55
59
 
56
60
  def collectMetrics(self,user=None):
57
61
  try:
62
+ if not self.configManager.enableUsageAnalytics:
63
+ return
58
64
  self.userName = self.getUserName()
59
65
  metrics = self.getApproxLocationInfo()
60
66
  self.locationInfo = metrics
@@ -92,13 +98,19 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
92
98
  return data
93
99
 
94
100
  def send_event(self,event_name,params={}):
101
+ if not self.configManager.enableUsageAnalytics:
102
+ return
103
+ if isinstance(self.locationInfo,str):
104
+ self.collectMetrics()
95
105
  event_params = {
96
- "user_id": self.userName,
106
+ "user_id": self.username,
97
107
  "os": self.os,
98
108
  "os_version": self.os_version,
99
109
  "app_version": self.app_version,
100
110
  "elapsed_time": str(time.time() - self.start_time),
101
- "is_Runner": self.isRunner
111
+ "is_runner": self.isRunner,
112
+ "is_container": str(os.environ.get("PKSCREENER_DOCKER", "")).lower() in ("yes", "y", "on", "true", "1"),
113
+ "one_file_bundle": self.onefile
102
114
  }
103
115
  if len(params) > 0:
104
116
  for key in params:
@@ -412,7 +412,7 @@ class PKScanRunner:
412
412
  cleanup_on_sigterm()
413
413
  OutputControls().printOutput(
414
414
  colorText.FAIL
415
- + f"[+] Using Period:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.period}{colorText.END}{colorText.FAIL} and Duration:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.duration}{colorText.END}{colorText.FAIL} for scan! You can change this in user config."
415
+ + f"\n [+] Using Period:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.period}{colorText.END}{colorText.FAIL} and Duration:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.duration}{colorText.END}{colorText.FAIL} for scan! You can change this in user config."
416
416
  + colorText.END
417
417
  )
418
418
  start_time = time.time()
@@ -0,0 +1 @@
1
+ VERSION='0.46.20250222.733'
@@ -625,6 +625,7 @@ def initPostLevel0Execution(
625
625
  str(indexOption).upper() in ["S", "E", "W"]:
626
626
  ensureMenusLoaded(menuOption,indexOption,executeOption)
627
627
  if not PKPremiumHandler.hasPremium(m1.find(str(indexOption).upper())):
628
+ PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
628
629
  return None, None
629
630
  if indexOption == "" or indexOption is None:
630
631
  indexOption = int(configManager.defaultIndex)
@@ -679,10 +680,11 @@ def initPostLevel1Execution(indexOption, executeOption=None, skip=[], retrial=Fa
679
680
  )
680
681
  selectedMenu = m1.find(indexOption)
681
682
  m2.renderForMenu(selectedMenu=selectedMenu, skip=skip)
682
- stockIndexCode = "18"
683
+ stockIndexCode = str(len(level1_index_options_sectoral.keys()))
683
684
  if indexOption == "S":
684
685
  ensureMenusLoaded("X",indexOption,executeOption)
685
686
  if not PKPremiumHandler.hasPremium(selectedMenu):
687
+ PKAnalyticsService().send_event(f"non_premium_user_X_{indexOption}_{executeOption}")
686
688
  PKAnalyticsService().send_event("app_exit")
687
689
  sys.exit(0)
688
690
  indexKeys = level1_index_options_sectoral.keys()
@@ -711,6 +713,7 @@ def initPostLevel1Execution(indexOption, executeOption=None, skip=[], retrial=Fa
711
713
  OutputControls().printOutput(colorText.END, end="")
712
714
  ensureMenusLoaded("X",indexOption,executeOption)
713
715
  if not PKPremiumHandler.hasPremium(m2.find(str(executeOption))):
716
+ PKAnalyticsService().send_event(f"non_premium_user_X_{indexOption}_{executeOption}")
714
717
  return None, None
715
718
  if executeOption == "":
716
719
  executeOption = 1
@@ -922,7 +925,6 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
922
925
  mkt_monitor_dict = mp_manager.dict()
923
926
  # Let's start monitoring the market monitor
924
927
  startMarketMonitor(mkt_monitor_dict,keyboardInterruptEvent)
925
- PKAnalyticsService().send_event("market_monitor_started")
926
928
 
927
929
  keyboardInterruptEventFired = False
928
930
  if stockDictPrimary is None:
@@ -953,7 +955,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
953
955
  if menuOption in ["F", "M", "S", "B", "G", "C", "P", "D"] or selectedMenu.isPremium:
954
956
  ensureMenusLoaded(menuOption,indexOption,executeOption)
955
957
  if not PKPremiumHandler.hasPremium(selectedMenu):
956
- PKAnalyticsService().send_event(f"non_premium_user_{menuOption}")
958
+ PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
957
959
  PKAnalyticsService().send_event("app_exit")
958
960
  sys.exit(0)
959
961
  if menuOption in ["M", "D", "I", "L", "F"]:
@@ -1789,6 +1791,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
1789
1791
  if str(indexOption).isnumeric() and int(indexOption) > 1 and executeOption <= MAX_SUPPORTED_MENU_OPTION:
1790
1792
  ensureMenusLoaded(menuOption,indexOption,executeOption)
1791
1793
  if not PKPremiumHandler.hasPremium(m2.find(str(executeOption).upper())):
1794
+ PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
1792
1795
  PKAnalyticsService().send_event("app_exit")
1793
1796
  sys.exit(0)
1794
1797
  if (
@@ -1801,6 +1804,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
1801
1804
  try:
1802
1805
  if str(indexOption).upper() in ["W", "E", "S"]:
1803
1806
  if not PKPremiumHandler.hasPremium(m1.find(str(indexOption).upper())):
1807
+ PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
1804
1808
  PKAnalyticsService().send_event("app_exit")
1805
1809
  sys.exit(0)
1806
1810
  if indexOption == "W":
@@ -2201,6 +2205,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
2201
2205
  OutputControls().printOutput(colorText.END, end="")
2202
2206
  ensureMenusLoaded(menuOption,indexOption,executeOption)
2203
2207
  if not PKPremiumHandler.hasPremium(m0.find(str(pinOption).upper())):
2208
+ PKAnalyticsService().send_event(f"non_premium_user_pin_{menuOption}_{indexOption}_{executeOption}_{pinOption}")
2204
2209
  PKAnalyticsService().send_event("app_exit")
2205
2210
  sys.exit(0)
2206
2211
  if pinOption in ["1","2"]:
@@ -2868,7 +2873,8 @@ def updateMenuChoiceHierarchy():
2868
2873
  if ((":0:" in runOptionName or "_0_" in runOptionName) and userPassedArgs.progressstatus is not None) or userPassedArgs.progressstatus is not None:
2869
2874
  runOptionName = userPassedArgs.progressstatus.split("=>")[0].split(" [+] ")[1].strip()
2870
2875
  reportTitle = f"{runOptionName} | {reportTitle}" if runOptionName is not None else reportTitle
2871
- PKAnalyticsService().send_event(runOptionName)
2876
+ if len(runOptionName) >= 5:
2877
+ PKAnalyticsService().send_event(runOptionName)
2872
2878
  OutputControls().printOutput(
2873
2879
  colorText.FAIL
2874
2880
  + f" [+] You chose: {reportTitle} "
@@ -1427,7 +1427,7 @@ def launchScreener(options, user, context, optionChoices, update):
1427
1427
  userSubs = isUserSubscribed(user)
1428
1428
  try:
1429
1429
  PKAnalyticsService().send_event("bot_scan",{"bot_userid":str(user.id), "bot_username":str(user.username),"scan_id":str(scanRequest),"user_subscribed":userSubs})
1430
- except:
1430
+ except Exception as e:
1431
1431
  pass
1432
1432
  if not userSubs:
1433
1433
  basicSubscriptions = ["X_0","X_N","X_1_"]
@@ -311,7 +311,8 @@ argParser.add_argument(
311
311
  help="runs and tests all options",
312
312
  required=False,
313
313
  )
314
-
314
+ from PKDevTools.classes.FunctionTimeouts import ping
315
+ from pkscreener.classes.PKAnalytics import PKAnalyticsService
315
316
  def csv_split(s):
316
317
  return list(csv.reader([s], delimiter=' '))[0]
317
318
 
@@ -918,6 +919,7 @@ def updateConfig(args):
918
919
  configManager.duration = "1d"
919
920
  configManager.setConfig(ConfigManager.parser,default=True, showFileCreatedText=False)
920
921
 
922
+ @ping(interval=60,instance=PKAnalyticsService())
921
923
  def pkscreenercli():
922
924
  global originalStdOut, args
923
925
  if sys.platform.startswith("darwin"):
@@ -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.238
22
+ PKDevTools>=0.13.20250126.240
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.20250221.731
3
+ Version: 0.46.20250222.733
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.20250221.731.zip
6
+ Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250222.733.zip
7
7
  Author: pkjmesra
8
8
  Author-email: pkjmesra@gmail.com
9
9
  License: OSI Approved (MIT)
@@ -357,15 +357,15 @@ After you have finished the run, go to that copied path, zip the contents of the
357
357
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
358
358
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
359
359
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
360
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250221.729/pkscreenercli.exe
360
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli.exe
361
361
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
362
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250221.729/pkscreenercli_x64.bin
362
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.bin
363
363
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
364
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250221.729/pkscreenercli_arm64.bin
364
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.bin
365
365
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
366
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250221.729/pkscreenercli_x64.run
366
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.run
367
367
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
368
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250221.729/pkscreenercli_arm64.run
368
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.run
369
369
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
370
370
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
371
371
  [pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
@@ -0,0 +1,58 @@
1
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/Disclaimer.txt,sha256=x7M9Clrb9qACqOa-Vnwh9wliISLgudW5Kv_dgEk3N_Q,1405
2
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/LICENSE-Others.txt,sha256=0put8oIYbAYz98IGnp2F1CpHoyR_iyk0PRYG5D-U1K0,277059
3
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/LICENSE.txt,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
4
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/README.txt,sha256=i2Lx4pcggn_-6rdmQmsQtdr5zNp7EAKEElja3CpadVM,33186
6
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/__init__.py,sha256=cH0zxpSdH-dhmZihoe5mpE2NRRmF2Na_KaGMO9u33Rg,1669
7
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/globals.py,sha256=cSqZCbZ1-fOkoZ2vREre4nEUA6LsfhOYkHIqe4Y-zk4,248501
9
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/pkscreener.ini,sha256=v0MV7kLxi0ehh1a013wg6TLXDeeLRO8PKapICSU1u-k,2451
10
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/pkscreenerbot.py,sha256=gSpzD85sUA9rLpSU-9bHddaUqZKVWHuwEgGIU6DncEY,119822
11
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/pkscreenercli.py,sha256=SoOoyhd9HNIKkCBt31oEWuSAGp-t7d7-iU9PhLTD9Ng,59213
12
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/requirements.txt,sha256=Cd8myWLln3QOLuenjAkErEOOdnLlqRGLaYa3QKrTWTY,1503
13
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ArtTexts.py,sha256=UzU0v3LX4PsWcx_ATv5M-T4v93uLz2hmvyDtew6qzZk,19708
14
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/AssetsManager.py,sha256=T1RQVHR5mX6LxEXARYrs70iYEng7IsuU7oso308FsWw,36094
15
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Backtest.py,sha256=VoNronl--07E477I9lhwfEjI4vK5VHu_tcDRO1K96hU,10784
16
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Barometer.py,sha256=aZWu0TFbwRBvnkyN_Ws4a_2FYNhKKuqEpoQAqokthPc,9640
17
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=Dev8eCx8eGNqDsbXj-t68hLSDpKDICcyb9yH_n_IbYg,3086
18
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=IFVUXzx175aqZlL7JlmNl308aeIkSD6Hugl4M9zg9Io,17419
19
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Changelog.py,sha256=S0hNTDYptWUxFrdTzqinjFLIywVAuKlYR1aCjepADn0,1511
20
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ConfigManager.py,sha256=ZIxZ-IqWjIXpo_7SWRLx5e8sc0b92gGnc4qqMZVproM,54426
21
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=QZLPA0li0bfs1zNijfq_utovulY5fl4vXWk89CBpL5Q,10291
22
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=gNMAm4iQF0ClmVPBe6ZnsjWQ-rfnTq6R_mLBjA6GgyI,12330
23
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Fetcher.py,sha256=UA37RjcegNmdqHIC5bWW_9qzKn8McyU6mhELxmKuLzs,15080
24
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/GlobalStore.py,sha256=UCYctbau2ZAShkWOLA7-p52Pg_irghCWRoa6UrIKYQQ,3799
25
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ImageUtility.py,sha256=DKPiM7u-fGPujD63VLCWUsvesgflVYDiLqyw_KWOK8g,37629
26
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=eu1B6Zl9SIQCSB43D3z7I1laKCp7NKTGSgIzv-4G1U4,22512
27
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/MarketStatus.py,sha256=oBDTCTGazzOEhcclugxOOtyhu2VVT2XQ-t-GmY_pT7g,3823
28
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/MenuOptions.py,sha256=RIPQ9mVC9I07GZubrmOtUAQg10GbCoYwF3fnvV1dvqY,65741
29
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Messenger.py,sha256=yKqq3eE2JkvTOeKcNZoPpCgxQ9FjcEeB1iHIKwwq8dA,8572
30
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=jSjVqgiZ4CGVkieJMekNLHZGx_eOGN-Xg4RF3eZO_Nk,13816
31
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_Usp50uDe4LHPP3_DoXbz3ibVIfwvOiW9kVvqTGaqMk,7607
32
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKDataService.py,sha256=InEI3AGt_ykYfbwq2v1_NWUefTqPluKHSh_4ksFSUzE,3456
33
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=wh48WLLFxBAFHML5Sq5G5-UFP96snJ9yKJgpKWuQ2Zs,2253
34
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=zscdvHwDb5GQttqnR4Ed0SsVfOFeqKQgfIo6LWukgH0,34366
35
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=L3O3EwIZBE9PpdDFIGH-2Ec9Gi3IlzCd6RfQSXUd6So,5695
36
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=Vlv5snbT6vA7t6jO2WBvxV0JDPHQf2iTbrT2ndkSnVQ,27317
37
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=wDMORWmyglcu06woVNpgDlESsMIiYX96MXO0VoBlLYg,1694
38
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKScheduler.py,sha256=Od3Niv6Q_aHarau9agCVt7h194votlaDX4j1Xv-_ru4,8994
39
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=BIICJx79QjGFPrnmQ34357jOGp79vuiknx6A_kC9y8Y,8466
40
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKTask.py,sha256=YPxzn0dA5ty7CtRFi1wQphC9vCdK8tB2_3DYHje9jgc,1907
41
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=VftNCzv44NyeLLOhuxUzzgre8zpT-nRL75B0jv-udDI,11783
42
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Pktalib.py,sha256=yko7TZMOsLoBv-LbTuT903CsGdyckhypXldh7uoAXmo,34179
43
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Portfolio.py,sha256=dxviO0G3OqJza4Nbpj5OCph8PZlfkRCkL3LfLJYgqu0,14196
44
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=cMQ-yZrBPWo4gACxFqj3HNG9rqmyqXkS88qpy77JP_s,49612
45
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=CoV2i5jJPL2hm4sIhQAPHbbfWw3vqgoShVmq4uir7k4,225756
46
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/StockScreener.py,sha256=wL6RjojBvTqo9XUlh2qoCpERrKdGNTlcDtCTReA0jkI,68437
47
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/StockSentiment.py,sha256=kc5jdXRGm2nIvDK-2y4i_Y1w47_2zWpunjlQsKB7IBY,3640
48
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=MXJrQPD4yvKSI4p_RcnHt5oZg8AZ59ME7Jf-Nryoy5g,5055
49
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/Utility.py,sha256=6JpIich2-knaZ4sjsjyMoO_4S622KK-Jte2Hi4eYIOs,13870
50
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=GS1Q_jwulpOjZv0w9ZDySRa5w51gJ8xDabbUpQGKVO0,5800
51
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/__init__.py,sha256=tv12UabknuLx4aY8yjmVJTTttrIcjfk7fZctULQ9jeQ,28
52
+ pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/keys.py,sha256=tygV0iu8bKmSPo6HGj1Cb-rTtEWErGrsYRZY7SoCb1g,6957
53
+ pkscreener-0.46.20250222.733.dist-info/LICENSE,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
54
+ pkscreener-0.46.20250222.733.dist-info/METADATA,sha256=K7UJV9pnH_mBQRWMkRK-Qq9dGXEvIdIXPzzjstfMVb8,34208
55
+ pkscreener-0.46.20250222.733.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
56
+ pkscreener-0.46.20250222.733.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
+ pkscreener-0.46.20250222.733.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
+ pkscreener-0.46.20250222.733.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- VERSION='0.46.20250221.731'
@@ -1,58 +0,0 @@
1
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/Disclaimer.txt,sha256=x7M9Clrb9qACqOa-Vnwh9wliISLgudW5Kv_dgEk3N_Q,1405
2
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/LICENSE-Others.txt,sha256=0put8oIYbAYz98IGnp2F1CpHoyR_iyk0PRYG5D-U1K0,277059
3
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/LICENSE.txt,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
4
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/README.txt,sha256=qB9qE0IMkuYxQdqW-Tz9rfw5TsXIbGscSnAR3V6m8nc,33186
6
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/__init__.py,sha256=cH0zxpSdH-dhmZihoe5mpE2NRRmF2Na_KaGMO9u33Rg,1669
7
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/globals.py,sha256=fxYJXl8S5wsAkr4llaIT4ex-Y-wDS1J5KB8ka3NHEnk,247783
9
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/pkscreener.ini,sha256=v0MV7kLxi0ehh1a013wg6TLXDeeLRO8PKapICSU1u-k,2451
10
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/pkscreenerbot.py,sha256=lXZDwqs37nL_sh0L6ISBqLgYgn_r21snPtzwL3OpB1Y,119807
11
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/pkscreenercli.py,sha256=j5UBHU1YdKhLaT53uFlpZ73lvI41Iw_gjA_wrZaF5IA,59048
12
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/requirements.txt,sha256=o6AMyZRJ519ivj_X7srn1jaHEOHqACdktVS2r88i5H8,1503
13
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ArtTexts.py,sha256=UzU0v3LX4PsWcx_ATv5M-T4v93uLz2hmvyDtew6qzZk,19708
14
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/AssetsManager.py,sha256=T1RQVHR5mX6LxEXARYrs70iYEng7IsuU7oso308FsWw,36094
15
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Backtest.py,sha256=VoNronl--07E477I9lhwfEjI4vK5VHu_tcDRO1K96hU,10784
16
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Barometer.py,sha256=aZWu0TFbwRBvnkyN_Ws4a_2FYNhKKuqEpoQAqokthPc,9640
17
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=Dev8eCx8eGNqDsbXj-t68hLSDpKDICcyb9yH_n_IbYg,3086
18
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=IFVUXzx175aqZlL7JlmNl308aeIkSD6Hugl4M9zg9Io,17419
19
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Changelog.py,sha256=S0hNTDYptWUxFrdTzqinjFLIywVAuKlYR1aCjepADn0,1511
20
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ConfigManager.py,sha256=ZIxZ-IqWjIXpo_7SWRLx5e8sc0b92gGnc4qqMZVproM,54426
21
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=QZLPA0li0bfs1zNijfq_utovulY5fl4vXWk89CBpL5Q,10291
22
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=gNMAm4iQF0ClmVPBe6ZnsjWQ-rfnTq6R_mLBjA6GgyI,12330
23
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Fetcher.py,sha256=UA37RjcegNmdqHIC5bWW_9qzKn8McyU6mhELxmKuLzs,15080
24
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/GlobalStore.py,sha256=UCYctbau2ZAShkWOLA7-p52Pg_irghCWRoa6UrIKYQQ,3799
25
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ImageUtility.py,sha256=DKPiM7u-fGPujD63VLCWUsvesgflVYDiLqyw_KWOK8g,37629
26
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=--qQpmLt7XTljACGDWIIOZO01uWJpEbG78wyMRynTI4,22450
27
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/MarketStatus.py,sha256=oBDTCTGazzOEhcclugxOOtyhu2VVT2XQ-t-GmY_pT7g,3823
28
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/MenuOptions.py,sha256=RIPQ9mVC9I07GZubrmOtUAQg10GbCoYwF3fnvV1dvqY,65741
29
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Messenger.py,sha256=yKqq3eE2JkvTOeKcNZoPpCgxQ9FjcEeB1iHIKwwq8dA,8572
30
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=jSjVqgiZ4CGVkieJMekNLHZGx_eOGN-Xg4RF3eZO_Nk,13816
31
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=4XQmCwRsSHauu8tZNzPHER4QfXbRlRQAkK5I2Lx2XRk,6962
32
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKDataService.py,sha256=InEI3AGt_ykYfbwq2v1_NWUefTqPluKHSh_4ksFSUzE,3456
33
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=wh48WLLFxBAFHML5Sq5G5-UFP96snJ9yKJgpKWuQ2Zs,2253
34
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=zscdvHwDb5GQttqnR4Ed0SsVfOFeqKQgfIo6LWukgH0,34366
35
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=L3O3EwIZBE9PpdDFIGH-2Ec9Gi3IlzCd6RfQSXUd6So,5695
36
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=9Qy6xouK6qkNExeWF8LrxYXynI3Ju9UrSY5kI5W81Ok,27313
37
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=wDMORWmyglcu06woVNpgDlESsMIiYX96MXO0VoBlLYg,1694
38
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKScheduler.py,sha256=Od3Niv6Q_aHarau9agCVt7h194votlaDX4j1Xv-_ru4,8994
39
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=BIICJx79QjGFPrnmQ34357jOGp79vuiknx6A_kC9y8Y,8466
40
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKTask.py,sha256=YPxzn0dA5ty7CtRFi1wQphC9vCdK8tB2_3DYHje9jgc,1907
41
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=VftNCzv44NyeLLOhuxUzzgre8zpT-nRL75B0jv-udDI,11783
42
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Pktalib.py,sha256=yko7TZMOsLoBv-LbTuT903CsGdyckhypXldh7uoAXmo,34179
43
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Portfolio.py,sha256=dxviO0G3OqJza4Nbpj5OCph8PZlfkRCkL3LfLJYgqu0,14196
44
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=cMQ-yZrBPWo4gACxFqj3HNG9rqmyqXkS88qpy77JP_s,49612
45
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=CoV2i5jJPL2hm4sIhQAPHbbfWw3vqgoShVmq4uir7k4,225756
46
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/StockScreener.py,sha256=wL6RjojBvTqo9XUlh2qoCpERrKdGNTlcDtCTReA0jkI,68437
47
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/StockSentiment.py,sha256=kc5jdXRGm2nIvDK-2y4i_Y1w47_2zWpunjlQsKB7IBY,3640
48
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=MXJrQPD4yvKSI4p_RcnHt5oZg8AZ59ME7Jf-Nryoy5g,5055
49
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/Utility.py,sha256=6JpIich2-knaZ4sjsjyMoO_4S622KK-Jte2Hi4eYIOs,13870
50
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=GS1Q_jwulpOjZv0w9ZDySRa5w51gJ8xDabbUpQGKVO0,5800
51
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/__init__.py,sha256=_pcOz3mRS4PQa9-sx0w7PLwRisGX_T7fFp8W6WMqtKY,28
52
- pkscreener-0.46.20250221.731.data/purelib/pkscreener/classes/keys.py,sha256=tygV0iu8bKmSPo6HGj1Cb-rTtEWErGrsYRZY7SoCb1g,6957
53
- pkscreener-0.46.20250221.731.dist-info/LICENSE,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
54
- pkscreener-0.46.20250221.731.dist-info/METADATA,sha256=GFKuZ_RaxrE8ws8HRaQUzoMhopH8gzweD-anKB0u-Jg,34208
55
- pkscreener-0.46.20250221.731.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
56
- pkscreener-0.46.20250221.731.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
- pkscreener-0.46.20250221.731.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
- pkscreener-0.46.20250221.731.dist-info/RECORD,,