pkscreener 0.46.20250222.733__cp312-cp312-win_amd64.whl → 0.46.20250222.735__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.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/README.txt +5 -5
  2. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/AssetsManager.py +1 -1
  3. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Fetcher.py +29 -20
  4. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKAnalytics.py +11 -11
  5. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/StockScreener.py +17 -13
  6. pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/__init__.py +1 -0
  7. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/pkscreenerbot.py +2 -1
  8. {pkscreener-0.46.20250222.733.dist-info → pkscreener-0.46.20250222.735.dist-info}/METADATA +7 -7
  9. pkscreener-0.46.20250222.735.dist-info/RECORD +58 -0
  10. pkscreener-0.46.20250222.733.data/purelib/pkscreener/classes/__init__.py +0 -1
  11. pkscreener-0.46.20250222.733.dist-info/RECORD +0 -58
  12. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  13. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  14. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/LICENSE.txt +0 -0
  15. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/LogoWM.txt +0 -0
  16. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/__init__.py +0 -0
  17. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  18. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  19. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  20. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  21. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  22. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  23. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
  24. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  25. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  26. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  27. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  28. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
  29. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  30. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  31. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  32. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  33. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  34. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  35. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  36. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  37. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
  38. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  39. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  40. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  41. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  42. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
  43. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
  44. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  45. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  46. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
  47. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  48. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  49. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/Utility.py +0 -0
  50. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  51. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/classes/keys.py +0 -0
  52. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/courbd.ttf +0 -0
  53. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/globals.py +0 -0
  54. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/pkscreener.ini +0 -0
  55. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/pkscreenercli.py +0 -0
  56. {pkscreener-0.46.20250222.733.data → pkscreener-0.46.20250222.735.data}/purelib/pkscreener/requirements.txt +0 -0
  57. {pkscreener-0.46.20250222.733.dist-info → pkscreener-0.46.20250222.735.dist-info}/LICENSE +0 -0
  58. {pkscreener-0.46.20250222.733.dist-info → pkscreener-0.46.20250222.735.dist-info}/WHEEL +0 -0
  59. {pkscreener-0.46.20250222.733.dist-info → pkscreener-0.46.20250222.735.dist-info}/entry_points.txt +0 -0
  60. {pkscreener-0.46.20250222.733.dist-info → pkscreener-0.46.20250222.735.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.20250222.732/pkscreenercli.exe
331
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_x64.bin
333
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_arm64.bin
335
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_x64.run
337
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_arm64.run
339
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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
@@ -268,7 +268,7 @@ class PKAssetsManager:
268
268
  def had_rate_limit_errors():
269
269
  """Checks if any stored errors are YFRateLimitError."""
270
270
  err = ",".join(list(shared._ERRORS.values()))
271
- hitRateLimit = "YFRateLimitError" in err
271
+ hitRateLimit = "YFRateLimitError" in err or "Too Many Requests" in err
272
272
  if hitRateLimit:
273
273
  OutputControls().printOutput(
274
274
  colorText.FAIL
@@ -35,13 +35,19 @@ import yfinance as yf
35
35
  from yfinance import shared
36
36
  # from yfinance.const import USER_AGENTS
37
37
  from PKDevTools.classes.Utils import USER_AGENTS
38
- from yfinance.data import YfData
39
38
  import random
40
- from yfinance.exceptions import YFPricesMissingError, YFInvalidPeriodError, YFRateLimitError
41
- # class YFPricesMissingError(Exception):
42
- # pass
43
- # class YFInvalidPeriodError(Exception):
44
- # pass
39
+ from yfinance.version import version as yfVersion
40
+ if yfVersion == "0.2.28":
41
+ from yfinance.data import TickerData as YfData
42
+ class YFPricesMissingError(Exception):
43
+ pass
44
+ class YFInvalidPeriodError(Exception):
45
+ pass
46
+ class YFRateLimitError(Exception):
47
+ pass
48
+ else:
49
+ from yfinance.data import YfData
50
+ from yfinance.exceptions import YFPricesMissingError, YFInvalidPeriodError, YFRateLimitError
45
51
  from concurrent.futures import ThreadPoolExecutor
46
52
  from PKDevTools.classes.PKDateUtilities import PKDateUtilities
47
53
  from PKDevTools.classes.ColorText import colorText
@@ -123,8 +129,9 @@ class screenerStockDataFetcher(nseStockDataFetcher):
123
129
  data = None
124
130
  with SuppressOutput(suppress_stdout=(not printCounter), suppress_stderr=(not printCounter)):
125
131
  try:
126
- # YfData.user_agent_headers = {
127
- # 'User-Agent': random.choice(USER_AGENTS)}
132
+ if yfVersion == "0.2.28":
133
+ YfData.user_agent_headers = {
134
+ 'User-Agent': random.choice(USER_AGENTS)}
128
135
  data = yf.download(
129
136
  tickers=stockCode,
130
137
  period=period,
@@ -136,7 +143,8 @@ class screenerStockDataFetcher(nseStockDataFetcher):
136
143
  timeout=self.configManager.generalTimeout/4,
137
144
  start=start,
138
145
  end=end,
139
- auto_adjust=True
146
+ auto_adjust=True,
147
+ threads=len(stockCode) if not isinstance(stockCode,str) else True
140
148
  )
141
149
  if isinstance(stockCode,str):
142
150
  if (data is None or data.empty):
@@ -165,25 +173,26 @@ class screenerStockDataFetcher(nseStockDataFetcher):
165
173
  # we'd have received a multiindex dataframe
166
174
  listStockCodes = multiIndex.get_level_values(0)
167
175
  data = data.get(listStockCodes[0])
168
- else:
169
- if (data is None or data.empty):
170
- if len(shared._ERRORS) > 0:
171
- default_logger().debug(shared._ERRORS)
172
- for ticker in shared._ERRORS:
173
- err = shared._ERRORS.get(ticker)
174
- if "YFRateLimitError" in err:
175
- if attempt <= 2:
176
- default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
176
+ # else:
177
+ # if (data is None or data.empty):
178
+ # if len(shared._ERRORS) > 0:
179
+ # default_logger().debug(shared._ERRORS)
180
+ # for ticker in shared._ERRORS:
181
+ # err = shared._ERRORS.get(ticker)
182
+ # if "YFRateLimitError" in err:
183
+ # if attempt <= 2:
184
+ # default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
177
185
  # sleep(attempt*2) # Exponential backoff
178
186
  # return self.fetchStockData(stockCode=stockCode,period=period,duration=duration,printCounter=printCounter, start=start,end=end,screenResultsCounter=screenResultsCounter,screenCounter=screenCounter,totalSymbols=totalSymbols,exchangeSuffix=exchangeSuffix,attempt=attempt+1)
179
187
  except (KeyError,YFPricesMissingError) as e: # pragma: no cover
180
188
  default_logger().debug(e,exc_info=True)
181
189
  pass
182
190
  except YFRateLimitError as e:
183
- if attempt <= 2:
184
- default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
191
+ # if attempt <= 2:
192
+ # default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
185
193
  # sleep(attempt*2) # Exponential backoff
186
194
  # return self.fetchStockData(stockCode=stockCode,period=period,duration=duration,printCounter=printCounter, start=start,end=end,screenResultsCounter=screenResultsCounter,screenCounter=screenCounter,totalSymbols=totalSymbols,exchangeSuffix=exchangeSuffix,attempt=attempt+1)
195
+ pass
187
196
  except (YFInvalidPeriodError,Exception) as e: # pragma: no cover
188
197
  default_logger().debug(e,exc_info=True)
189
198
  if printCounter and type(screenCounter) != int:
@@ -46,7 +46,6 @@ from pkscreener.classes.ConfigManager import tools, parser
46
46
  class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
47
47
  def __init__(self):
48
48
  super(PKAnalyticsService, self).__init__()
49
- self.username = ""
50
49
  self.locationInfo = ""
51
50
  self.os = platform.system()
52
51
  self.os_version = platform.release()
@@ -54,6 +53,7 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
54
53
  self.start_time = time.time()
55
54
  self.isRunner = "RUNNER" in os.environ.keys()
56
55
  self.onefile = getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
56
+ self.username = f"Unidentified-{self.os}"
57
57
  self.configManager = tools()
58
58
  self.configManager.getConfig(parser)
59
59
 
@@ -72,19 +72,19 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
72
72
 
73
73
  def getUserName(self):
74
74
  try:
75
- username = os.getlogin()
76
- if username is None or len(username) == 0:
77
- username = os.environ.get('username') if platform.startswith("win") else os.environ.get("USER")
78
- if username is None or len(username) == 0:
79
- username = os.environ.get('USERPROFILE')
80
- if username is None or len(username) == 0:
81
- username = os.path.expandvars("%userprofile%") if platform.startswith("win") else getpass.getuser()
75
+ self.username = os.getlogin()
76
+ if self.username is None or len(self.username) == 0:
77
+ self.username = os.environ.get('username') if platform.startswith("win") else os.environ.get("USER")
78
+ if self.username is None or len(self.username) == 0:
79
+ self.username = os.environ.get('USERPROFILE')
80
+ if self.username is None or len(self.username) == 0:
81
+ self.username = os.path.expandvars("%userprofile%") if platform.startswith("win") else getpass.getuser()
82
82
  except KeyboardInterrupt: # pragma: no cover
83
83
  raise KeyboardInterrupt
84
84
  except: # pragma: no cover
85
- username = f"Unidentified-{self.os}"
85
+ self.username = f"Unidentified-{self.os}"
86
86
  pass
87
- return username
87
+ return self.username
88
88
 
89
89
  def getApproxLocationInfo(self):
90
90
  try:
@@ -103,7 +103,7 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
103
103
  if isinstance(self.locationInfo,str):
104
104
  self.collectMetrics()
105
105
  event_params = {
106
- "user_id": self.username,
106
+ "user_id": str(self.username),
107
107
  "os": self.os,
108
108
  "os_version": self.os_version,
109
109
  "app_version": self.app_version,
@@ -981,19 +981,23 @@ class StockScreener:
981
981
  data.set_index("Date", inplace=True)
982
982
  data.drop("index",axis=1,inplace=True)
983
983
  else:
984
- data = fetcher.fetchStockData(
985
- stock,
986
- period,
987
- configManager.duration if duration is None else duration,
988
- hostRef.proxyServer,
989
- hostRef.processingResultsCounter,
990
- hostRef.processingCounter,
991
- totalSymbols,
992
- start=start,
993
- end=start,
994
- exchangeSuffix=".NS" if exchangeName == "INDIA" else "",
995
- printCounter=printCounter
996
- )
984
+ # The following code tries to re-fetch the missing stock data
985
+ # It has been commented because it's less likely to fetch the data again
986
+ # within seconds of the first try when we must have tried to fetch data
987
+ # in batches.
988
+ # data = fetcher.fetchStockData(
989
+ # stock,
990
+ # period,
991
+ # configManager.duration if duration is None else duration,
992
+ # hostRef.proxyServer,
993
+ # hostRef.processingResultsCounter,
994
+ # hostRef.processingCounter,
995
+ # totalSymbols,
996
+ # start=start,
997
+ # end=start,
998
+ # exchangeSuffix=".NS" if exchangeName == "INDIA" else "",
999
+ # printCounter=printCounter
1000
+ # )
997
1001
  if hostData is not None and data is not None:
998
1002
  # During the market trading hours, we don't want to go for MFI/FV value fetching
999
1003
  # So let's copy the old saved ones.
@@ -0,0 +1 @@
1
+ VERSION='0.46.20250222.735'
@@ -71,6 +71,7 @@ from pkscreener.classes.MenuOptions import MenuRenderStyle, menu, menus,MAX_MENU
71
71
  from pkscreener.classes.WorkflowManager import run_workflow
72
72
  import pkscreener.classes.ConfigManager as ConfigManager
73
73
  from pkscreener.classes.PKAnalytics import PKAnalyticsService
74
+ from PKDevTools.classes.FunctionTimeouts import ping
74
75
  try:
75
76
  from PKDevTools.classes.DBManager import DBManager
76
77
  from PKDevTools.classes.UserSubscriptions import PKUserSusbscriptions
@@ -2256,7 +2257,7 @@ def addCommandsForMenuItems(application):
2256
2257
  # message_id=job.context.message_id
2257
2258
  # )
2258
2259
 
2259
-
2260
+ @ping(interval=300,instance=PKAnalyticsService())
2260
2261
  def runpkscreenerbot(availability=True) -> None:
2261
2262
  """Run the bot."""
2262
2263
  # Create the Application and pass it your bot's token.
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pkscreener
3
- Version: 0.46.20250222.733
3
+ Version: 0.46.20250222.735
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.20250222.733.zip
6
+ Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250222.735.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.20250222.732/pkscreenercli.exe
360
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_x64.bin
362
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_arm64.bin
364
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_x64.run
366
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.20250222.732/pkscreenercli_arm64.run
368
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.734/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.735.data/purelib/pkscreener/Disclaimer.txt,sha256=x7M9Clrb9qACqOa-Vnwh9wliISLgudW5Kv_dgEk3N_Q,1405
2
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/LICENSE-Others.txt,sha256=0put8oIYbAYz98IGnp2F1CpHoyR_iyk0PRYG5D-U1K0,277059
3
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/LICENSE.txt,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
4
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/README.txt,sha256=94lB294MU6Ur7efAmN_BnoFxRhHN0622ZsPcRRQLHbM,33186
6
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/__init__.py,sha256=cH0zxpSdH-dhmZihoe5mpE2NRRmF2Na_KaGMO9u33Rg,1669
7
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/globals.py,sha256=cSqZCbZ1-fOkoZ2vREre4nEUA6LsfhOYkHIqe4Y-zk4,248501
9
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/pkscreener.ini,sha256=v0MV7kLxi0ehh1a013wg6TLXDeeLRO8PKapICSU1u-k,2451
10
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/pkscreenerbot.py,sha256=ak6OiqPWz3tj5Q_WIaEkUa--92jpVKC9BQz7skkq4Og,119925
11
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/pkscreenercli.py,sha256=SoOoyhd9HNIKkCBt31oEWuSAGp-t7d7-iU9PhLTD9Ng,59213
12
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/requirements.txt,sha256=Cd8myWLln3QOLuenjAkErEOOdnLlqRGLaYa3QKrTWTY,1503
13
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ArtTexts.py,sha256=UzU0v3LX4PsWcx_ATv5M-T4v93uLz2hmvyDtew6qzZk,19708
14
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/AssetsManager.py,sha256=zwbiaIZQs0gWHvSmK8NG949Gzcn8QXqOlRevadPq2og,36124
15
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Backtest.py,sha256=VoNronl--07E477I9lhwfEjI4vK5VHu_tcDRO1K96hU,10784
16
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Barometer.py,sha256=aZWu0TFbwRBvnkyN_Ws4a_2FYNhKKuqEpoQAqokthPc,9640
17
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=Dev8eCx8eGNqDsbXj-t68hLSDpKDICcyb9yH_n_IbYg,3086
18
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=IFVUXzx175aqZlL7JlmNl308aeIkSD6Hugl4M9zg9Io,17419
19
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Changelog.py,sha256=S0hNTDYptWUxFrdTzqinjFLIywVAuKlYR1aCjepADn0,1511
20
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ConfigManager.py,sha256=ZIxZ-IqWjIXpo_7SWRLx5e8sc0b92gGnc4qqMZVproM,54426
21
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=QZLPA0li0bfs1zNijfq_utovulY5fl4vXWk89CBpL5Q,10291
22
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=gNMAm4iQF0ClmVPBe6ZnsjWQ-rfnTq6R_mLBjA6GgyI,12330
23
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Fetcher.py,sha256=fw5dANIakYYkKySRbROpcumZT2f7zSETWiA-T1Oh7GQ,15466
24
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/GlobalStore.py,sha256=UCYctbau2ZAShkWOLA7-p52Pg_irghCWRoa6UrIKYQQ,3799
25
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ImageUtility.py,sha256=DKPiM7u-fGPujD63VLCWUsvesgflVYDiLqyw_KWOK8g,37629
26
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=eu1B6Zl9SIQCSB43D3z7I1laKCp7NKTGSgIzv-4G1U4,22512
27
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/MarketStatus.py,sha256=oBDTCTGazzOEhcclugxOOtyhu2VVT2XQ-t-GmY_pT7g,3823
28
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/MenuOptions.py,sha256=RIPQ9mVC9I07GZubrmOtUAQg10GbCoYwF3fnvV1dvqY,65741
29
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Messenger.py,sha256=yKqq3eE2JkvTOeKcNZoPpCgxQ9FjcEeB1iHIKwwq8dA,8572
30
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=jSjVqgiZ4CGVkieJMekNLHZGx_eOGN-Xg4RF3eZO_Nk,13816
31
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=dCBXn2pw2WVdBcG8OjzW_2jJVtO2UTcBRBJmEuVUwYY,7695
32
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKDataService.py,sha256=InEI3AGt_ykYfbwq2v1_NWUefTqPluKHSh_4ksFSUzE,3456
33
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=wh48WLLFxBAFHML5Sq5G5-UFP96snJ9yKJgpKWuQ2Zs,2253
34
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=zscdvHwDb5GQttqnR4Ed0SsVfOFeqKQgfIo6LWukgH0,34366
35
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=L3O3EwIZBE9PpdDFIGH-2Ec9Gi3IlzCd6RfQSXUd6So,5695
36
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=Vlv5snbT6vA7t6jO2WBvxV0JDPHQf2iTbrT2ndkSnVQ,27317
37
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=wDMORWmyglcu06woVNpgDlESsMIiYX96MXO0VoBlLYg,1694
38
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKScheduler.py,sha256=Od3Niv6Q_aHarau9agCVt7h194votlaDX4j1Xv-_ru4,8994
39
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=BIICJx79QjGFPrnmQ34357jOGp79vuiknx6A_kC9y8Y,8466
40
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKTask.py,sha256=YPxzn0dA5ty7CtRFi1wQphC9vCdK8tB2_3DYHje9jgc,1907
41
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=VftNCzv44NyeLLOhuxUzzgre8zpT-nRL75B0jv-udDI,11783
42
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Pktalib.py,sha256=yko7TZMOsLoBv-LbTuT903CsGdyckhypXldh7uoAXmo,34179
43
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Portfolio.py,sha256=dxviO0G3OqJza4Nbpj5OCph8PZlfkRCkL3LfLJYgqu0,14196
44
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=cMQ-yZrBPWo4gACxFqj3HNG9rqmyqXkS88qpy77JP_s,49612
45
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=CoV2i5jJPL2hm4sIhQAPHbbfWw3vqgoShVmq4uir7k4,225756
46
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/StockScreener.py,sha256=frSJw1Dix0BGuXoitnfTm06b_G8asxnzQuuoNYG9mgk,68752
47
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/StockSentiment.py,sha256=kc5jdXRGm2nIvDK-2y4i_Y1w47_2zWpunjlQsKB7IBY,3640
48
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=MXJrQPD4yvKSI4p_RcnHt5oZg8AZ59ME7Jf-Nryoy5g,5055
49
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/Utility.py,sha256=6JpIich2-knaZ4sjsjyMoO_4S622KK-Jte2Hi4eYIOs,13870
50
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=GS1Q_jwulpOjZv0w9ZDySRa5w51gJ8xDabbUpQGKVO0,5800
51
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/__init__.py,sha256=_1aywDRMSk7on1PVgMoOg_DCVZIsnCTcqcpj0y2sCA8,28
52
+ pkscreener-0.46.20250222.735.data/purelib/pkscreener/classes/keys.py,sha256=tygV0iu8bKmSPo6HGj1Cb-rTtEWErGrsYRZY7SoCb1g,6957
53
+ pkscreener-0.46.20250222.735.dist-info/LICENSE,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
54
+ pkscreener-0.46.20250222.735.dist-info/METADATA,sha256=ggziakxEsh8sSvhzFbkgFfaYJOkVtueaphbNfFhIEsI,34208
55
+ pkscreener-0.46.20250222.735.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
56
+ pkscreener-0.46.20250222.735.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
+ pkscreener-0.46.20250222.735.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
+ pkscreener-0.46.20250222.735.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- VERSION='0.46.20250222.733'
@@ -1,58 +0,0 @@
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,,