pkscreener 0.46.20250225.739__cp312-cp312-win_amd64.whl → 0.46.20250226.747__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.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/README.txt +5 -5
  2. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/AssetsManager.py +5 -1
  3. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConfigManager.py +1 -1
  4. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Fetcher.py +28 -2
  5. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Utility.py +6 -1
  6. pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/__init__.py +1 -0
  7. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/globals.py +2 -1
  8. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreenerbot.py +2 -1
  9. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreenercli.py +12 -1
  10. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/requirements.txt +3 -1
  11. {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/METADATA +7 -7
  12. pkscreener-0.46.20250226.747.dist-info/RECORD +58 -0
  13. {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/WHEEL +1 -1
  14. pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/__init__.py +0 -1
  15. pkscreener-0.46.20250225.739.dist-info/RECORD +0 -58
  16. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  17. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  18. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LICENSE.txt +0 -0
  19. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LogoWM.txt +0 -0
  20. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/__init__.py +0 -0
  21. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  22. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  23. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  24. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  25. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  26. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  27. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  28. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  29. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  30. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  31. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
  32. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  33. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  34. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  35. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  36. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
  37. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  38. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  39. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  40. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  41. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
  42. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  43. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  44. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  45. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  46. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
  47. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
  48. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  49. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  50. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
  51. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
  52. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  53. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  54. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  55. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/keys.py +0 -0
  56. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/courbd.ttf +0 -0
  57. {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreener.ini +0 -0
  58. {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/LICENSE +0 -0
  59. {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/entry_points.txt +0 -0
  60. {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.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.20250224.738/pkscreenercli.exe
331
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_x64.bin
333
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_arm64.bin
335
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_x64.run
337
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_arm64.run
339
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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
@@ -42,6 +42,7 @@ from PKDevTools.classes.ColorText import colorText
42
42
  from PKDevTools.classes.MarketHours import MarketHours
43
43
  from PKDevTools.classes.Committer import Committer
44
44
  from PKDevTools.classes.SuppressOutput import SuppressOutput
45
+ from PKDevTools.classes.PKBackupRestore import start_backup
45
46
 
46
47
  import pkscreener.classes.Fetcher as Fetcher
47
48
  from pkscreener.classes.PKTask import PKTask
@@ -131,6 +132,7 @@ class PKAssetsManager:
131
132
  df.to_excel(writer, sheet_name=sheetName[-31:]) # sheetname cannot be beyond 31 character
132
133
  # Close the Pandas Excel writer and output the Excel file.
133
134
  writer.close()
135
+ df.to_csv(filePath.replace(".xlsx",".csv"))
134
136
  isSaved = True
135
137
  except KeyboardInterrupt: # pragma: no cover
136
138
  raise KeyboardInterrupt
@@ -357,6 +359,7 @@ class PKAssetsManager:
357
359
  # return stockDict
358
360
  if downloadOnly or isTrading:
359
361
  # We don't want to download from local stale pkl file or stale file at server
362
+ start_backup()
360
363
  return stockDict
361
364
 
362
365
  default_logger().debug(
@@ -393,6 +396,7 @@ class PKAssetsManager:
393
396
  stockDict, _ = PKAssetsManager.downloadLatestData(stockDict,configManager,leftOutStocks,exchangeSuffix=exchangeSuffix,downloadOnly=downloadOnly,numStocksPerIteration=len(leftOutStocks) if leftOutStocks is not None else 0)
394
397
  if stockDataLoaded and downloadOnly:
395
398
  PKAssetsManager.saveStockData(stockDict,configManager,initialLoadCount,isIntraday,downloadOnly, forceSave=stockDataLoaded)
399
+ start_backup()
396
400
  return stockDict
397
401
 
398
402
  @Halo(text=' [+] Loading data from local cache...', spinner='dots')
@@ -562,7 +566,7 @@ class PKAssetsManager:
562
566
  f"Stock data cache file:{cache_file} on server has length ->{filesize} {'Mb' if chunksize >= MB else ('Kb' if chunksize >= KB else 'bytes')}"
563
567
  )
564
568
  if not retrial and not stockDataLoaded:
565
- # Don't try for more than once.
569
+ # Don't try for more than once.
566
570
  stockDict = PKAssetsManager.loadStockData(
567
571
  stockDict,
568
572
  configManager,
@@ -105,7 +105,7 @@ class tools(SingletonMixin, metaclass=SingletonType):
105
105
  self.vcpLegsToCheckForConsolidation = 3
106
106
  self.enableAdditionalVCPFilters = True
107
107
  self.enableAdditionalVCPEMAFilters = False
108
- self.enableUsageAnalytics = False
108
+ self.enableUsageAnalytics = True
109
109
  # This determines how many days apart the backtest calculations are run.
110
110
  # For example, for weekly backtest calculations, set this to 5 (5 days = 1 week)
111
111
  # For fortnightly, set this to 10 and so on (10 trading sessions = 2 weeks)
@@ -26,7 +26,7 @@
26
26
  import os
27
27
  import sys
28
28
  import warnings
29
-
29
+ import logging
30
30
  from time import sleep
31
31
  warnings.simplefilter("ignore", DeprecationWarning)
32
32
  warnings.simplefilter("ignore", FutureWarning)
@@ -57,9 +57,29 @@ from PKDevTools.classes.SuppressOutput import SuppressOutput
57
57
  from PKNSETools.PKNSEStockDataFetcher import nseStockDataFetcher
58
58
  from pkscreener.classes.PKTask import PKTask
59
59
  from PKDevTools.classes.OutputControls import OutputControls
60
+ from PKDevTools.classes import Archiver
60
61
  # This Class Handles Fetching of Stock Data over the internet
61
62
 
63
+ from requests import Session
64
+ from requests_cache import CacheMixin, SQLiteCache
65
+ from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
66
+ from pyrate_limiter import Duration, RequestRate, Limiter
67
+ class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
68
+ pass
62
69
 
70
+ # https://help.yahooinc.com/dsp-api/docs/rate-limits
71
+ # Define multiple rate limits
72
+ TRY_FACTOR = 50
73
+ yf_limiter = Limiter(
74
+ RequestRate(60*TRY_FACTOR, Duration.MINUTE), # Max 60 requests per minute
75
+ RequestRate(360*TRY_FACTOR, Duration.HOUR), # Max 360 requests per hour
76
+ RequestRate(8000*TRY_FACTOR, Duration.DAY) # Max 8000 requests per day
77
+ )
78
+ yf_session = CachedLimiterSession(
79
+ limiter=yf_limiter,
80
+ bucket_class=MemoryQueueBucket,
81
+ backend=SQLiteCache(db_path=os.path.join(Archiver.get_user_data_dir(),"yfinance.cache")),
82
+ )
63
83
  class screenerStockDataFetcher(nseStockDataFetcher):
64
84
  _tickersInfoDict={}
65
85
  def fetchStockDataWithArgs(self, *args):
@@ -132,6 +152,10 @@ class screenerStockDataFetcher(nseStockDataFetcher):
132
152
  if yfVersion == "0.2.28":
133
153
  YfData.user_agent_headers = {
134
154
  'User-Agent': random.choice(USER_AGENTS)}
155
+ if "PKDevTools_Default_Log_Level" in os.environ.keys():
156
+ from yfinance import utils
157
+ yflogger = utils.get_yf_logger()
158
+ yflogger.setLevel(int(os.environ.get("PKDevTools_Default_Log_Level"),logging.DEBUG))
135
159
  data = yf.download(
136
160
  tickers=stockCode,
137
161
  period=period,
@@ -144,7 +168,8 @@ class screenerStockDataFetcher(nseStockDataFetcher):
144
168
  start=start,
145
169
  end=end,
146
170
  auto_adjust=True,
147
- threads=len(stockCode) if not isinstance(stockCode,str) else True
171
+ threads=len(stockCode) if not isinstance(stockCode,str) else True,
172
+ session=yf_session
148
173
  )
149
174
  if isinstance(stockCode,str):
150
175
  if (data is None or data.empty):
@@ -188,6 +213,7 @@ class screenerStockDataFetcher(nseStockDataFetcher):
188
213
  default_logger().debug(e,exc_info=True)
189
214
  pass
190
215
  except YFRateLimitError as e:
216
+ default_logger().debug(f"YFRateLimitError Hit! \n{e}")
191
217
  # if attempt <= 2:
192
218
  # default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
193
219
  # sleep(attempt*2) # Exponential backoff
@@ -173,7 +173,12 @@ class tools:
173
173
  #'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
174
174
  }
175
175
  resp = fetcher.fetchURL(cache_url, headers=headers, stream=True)
176
- if (resp is None or (resp is not None and resp.status_code != 200)) and (repoOwner=="pkjmesra" and directory=="actions-data-download"):
176
+ filesize = 0
177
+ if resp is not None and resp.status_code == 200:
178
+ contentLength = resp.headers.get("content-length")
179
+ filesize = int(contentLength) if contentLength is not None else 0
180
+ # File size should be more than at least 10 MB
181
+ if (resp is None or (resp is not None and resp.status_code != 200) or filesize <= 10*1024*1024) and (repoOwner=="pkjmesra" and directory=="actions-data-download"):
177
182
  return tools.tryFetchFromServer(cache_file,repoOwner=repoName)
178
183
  return resp
179
184
 
@@ -0,0 +1 @@
1
+ VERSION='0.46.20250226.747'
@@ -1897,7 +1897,8 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
1897
1897
  userPassedArgs.options = (f"{userPassedArgs.options}:" if len(userPassedArgs.options) > 0 else '') + f"{selectedChoice[choice]}"
1898
1898
  if userPassedArgs.pipedmenus is not None:
1899
1899
  return addOrRunPipedMenus()
1900
-
1900
+
1901
+ loadedStockData = loadedStockData and stockDictPrimary is not None and len(stockDictPrimary) > 0
1901
1902
  if (menuOption in ["X", "B", "G", "S", "F"] and not loadedStockData) or (
1902
1903
  # not downloadOnly
1903
1904
  # and not PKDateUtilities.isTradingTime()
@@ -2264,7 +2264,7 @@ def addCommandsForMenuItems(application):
2264
2264
  # message_id=job.context.message_id
2265
2265
  # )
2266
2266
 
2267
- @ping(interval=300,instance=PKAnalyticsService())
2267
+ @ping(interval=300,instance=PKAnalyticsService(),prefix="bot_")
2268
2268
  def runpkscreenerbot(availability=True) -> None:
2269
2269
  """Run the bot."""
2270
2270
  # Create the Application and pass it your bot's token.
@@ -2291,6 +2291,7 @@ def runpkscreenerbot(availability=True) -> None:
2291
2291
  states={
2292
2292
  START_ROUTES: [
2293
2293
  CallbackQueryHandler(XScanners, pattern="^" + str("CX") + "$"),
2294
+ CallbackQueryHandler(otp, pattern="^" + str("OTP") + "$"),
2294
2295
  CallbackQueryHandler(XScanners, pattern="^" + str("CB") + "$"),
2295
2296
  CallbackQueryHandler(PScanners, pattern="^" + str("CP") + "$"),
2296
2297
  CallbackQueryHandler(XScanners, pattern="^" + str("CMI_")),
@@ -933,7 +933,10 @@ def pkscreenercli():
933
933
  OutputControls().printOutput(e)
934
934
  traceback.print_exc()
935
935
  pass
936
- # finally:
936
+ finally:
937
+ from PKDevTools.classes.PKBackupRestore import restore_backup
938
+ restore_backup()
939
+ sleep(3)
937
940
  # import threading
938
941
  # from pkscreener.globals import tryLoadDataOnBackgroundThread
939
942
  # ping_thread = threading.Thread(target=tryLoadDataOnBackgroundThread, daemon=True)
@@ -1220,6 +1223,14 @@ def scheduleNextRun():
1220
1223
  cron_runs += 1
1221
1224
 
1222
1225
  if __name__ == "__main__":
1226
+ if "RUNNER" in os.environ.keys():
1227
+ try:
1228
+ owner = os.popen('git ls-remote --get-url origin | cut -d/ -f4').read().replace("\n","")
1229
+ repo = os.popen('git ls-remote --get-url origin | cut -d/ -f5').read().replace(".git","").replace("\n","")
1230
+ if owner.lower() not in ["pkjmesra","pkscreener"]:
1231
+ sys.exit(0)
1232
+ except:
1233
+ pass
1223
1234
  try:
1224
1235
  pkscreenercli()
1225
1236
  except KeyboardInterrupt: # pragma: no cover
@@ -19,13 +19,15 @@ 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.245
22
+ PKDevTools>=0.13.20250126.259
23
23
  PKNSETools>=0.1.20250122.139
24
24
  Pyarrow #>=17.0.0
25
25
  pyppeteer #>=2.0.0
26
26
  pytz #>=2024.2
27
27
  python-telegram-bot>=13.4,<20.0
28
28
  requests_cache #>=1.2.1
29
+ requests_ratelimiter
30
+ pyrate_limiter
29
31
  rich #>=13.9.2
30
32
  scikit-learn #>=1.5.2
31
33
  scipy #<=1.12.0 # cdflib removed from #>=1.13.0 which breaks the build
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pkscreener
3
- Version: 0.46.20250225.739
3
+ Version: 0.46.20250226.747
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.20250225.739.zip
6
+ Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250226.747.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.20250224.738/pkscreenercli.exe
360
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_x64.bin
362
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_arm64.bin
364
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_x64.run
366
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250224.738/pkscreenercli_arm64.run
368
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.746/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.20250226.747.data/purelib/pkscreener/Disclaimer.txt,sha256=x7M9Clrb9qACqOa-Vnwh9wliISLgudW5Kv_dgEk3N_Q,1405
2
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/LICENSE-Others.txt,sha256=0put8oIYbAYz98IGnp2F1CpHoyR_iyk0PRYG5D-U1K0,277059
3
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/LICENSE.txt,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
4
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/README.txt,sha256=YOYtzbcfV9s_ywjp9RU-arnT_wWk92XvfZ3UEbk4UQo,33186
6
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/__init__.py,sha256=cH0zxpSdH-dhmZihoe5mpE2NRRmF2Na_KaGMO9u33Rg,1669
7
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/globals.py,sha256=ppg71W7M-xbVND_IG7xo-OxrAuC4GXxjRsemY3bGRpk,250393
9
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/pkscreener.ini,sha256=v0MV7kLxi0ehh1a013wg6TLXDeeLRO8PKapICSU1u-k,2451
10
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/pkscreenerbot.py,sha256=YpUNK_LHJsGb8auFzaat7ua2RiERftdgvRVGwMiLr78,120222
11
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/pkscreenercli.py,sha256=pS9g2lEuQT5tdntZiwlYygE4XqXmJ6vr8Hn6JPM8dMc,60001
12
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/requirements.txt,sha256=7_UE3MWTipG-GBk3D3T1sBFChDi5VZr6-wXO5oKVvr8,1541
13
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ArtTexts.py,sha256=UzU0v3LX4PsWcx_ATv5M-T4v93uLz2hmvyDtew6qzZk,19708
14
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/AssetsManager.py,sha256=qTRozvsZbkE-EHxlFB6_ztmDbgQi5dVh2CmWvAeDNt4,33918
15
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Backtest.py,sha256=VoNronl--07E477I9lhwfEjI4vK5VHu_tcDRO1K96hU,10784
16
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Barometer.py,sha256=aZWu0TFbwRBvnkyN_Ws4a_2FYNhKKuqEpoQAqokthPc,9640
17
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=Dev8eCx8eGNqDsbXj-t68hLSDpKDICcyb9yH_n_IbYg,3086
18
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=IFVUXzx175aqZlL7JlmNl308aeIkSD6Hugl4M9zg9Io,17419
19
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Changelog.py,sha256=S0hNTDYptWUxFrdTzqinjFLIywVAuKlYR1aCjepADn0,1511
20
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ConfigManager.py,sha256=PSR1FSrbfWMPgZGu5sSo2y6Aw9054XIXDl6_o1T_WWs,54425
21
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=QZLPA0li0bfs1zNijfq_utovulY5fl4vXWk89CBpL5Q,10291
22
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=y4TSXhT1FxKOSJ4fvEnVmXthtU870j9IFDh0vkNOxC4,12418
23
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Fetcher.py,sha256=utMQPdtzbj9fui9Jad-dt5ZCr7mlivJ1Wpl5EKuI2X4,16766
24
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/GlobalStore.py,sha256=UCYctbau2ZAShkWOLA7-p52Pg_irghCWRoa6UrIKYQQ,3799
25
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ImageUtility.py,sha256=DKPiM7u-fGPujD63VLCWUsvesgflVYDiLqyw_KWOK8g,37629
26
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=eu1B6Zl9SIQCSB43D3z7I1laKCp7NKTGSgIzv-4G1U4,22512
27
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/MarketStatus.py,sha256=oBDTCTGazzOEhcclugxOOtyhu2VVT2XQ-t-GmY_pT7g,3823
28
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/MenuOptions.py,sha256=RIPQ9mVC9I07GZubrmOtUAQg10GbCoYwF3fnvV1dvqY,65741
29
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Messenger.py,sha256=yKqq3eE2JkvTOeKcNZoPpCgxQ9FjcEeB1iHIKwwq8dA,8572
30
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=jSjVqgiZ4CGVkieJMekNLHZGx_eOGN-Xg4RF3eZO_Nk,13816
31
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=dCBXn2pw2WVdBcG8OjzW_2jJVtO2UTcBRBJmEuVUwYY,7695
32
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKDataService.py,sha256=InEI3AGt_ykYfbwq2v1_NWUefTqPluKHSh_4ksFSUzE,3456
33
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=wh48WLLFxBAFHML5Sq5G5-UFP96snJ9yKJgpKWuQ2Zs,2253
34
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=2-J3vqdEJ_PRoU6CPw4BLOFLl1R5loivCG80Ywe7pWs,34696
35
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=L3O3EwIZBE9PpdDFIGH-2Ec9Gi3IlzCd6RfQSXUd6So,5695
36
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=Vlv5snbT6vA7t6jO2WBvxV0JDPHQf2iTbrT2ndkSnVQ,27317
37
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=wDMORWmyglcu06woVNpgDlESsMIiYX96MXO0VoBlLYg,1694
38
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKScheduler.py,sha256=Od3Niv6Q_aHarau9agCVt7h194votlaDX4j1Xv-_ru4,8994
39
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=BIICJx79QjGFPrnmQ34357jOGp79vuiknx6A_kC9y8Y,8466
40
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKTask.py,sha256=YPxzn0dA5ty7CtRFi1wQphC9vCdK8tB2_3DYHje9jgc,1907
41
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=VftNCzv44NyeLLOhuxUzzgre8zpT-nRL75B0jv-udDI,11783
42
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Pktalib.py,sha256=yko7TZMOsLoBv-LbTuT903CsGdyckhypXldh7uoAXmo,34179
43
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Portfolio.py,sha256=dxviO0G3OqJza4Nbpj5OCph8PZlfkRCkL3LfLJYgqu0,14196
44
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=cMQ-yZrBPWo4gACxFqj3HNG9rqmyqXkS88qpy77JP_s,49612
45
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=CoV2i5jJPL2hm4sIhQAPHbbfWw3vqgoShVmq4uir7k4,225756
46
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/StockScreener.py,sha256=frSJw1Dix0BGuXoitnfTm06b_G8asxnzQuuoNYG9mgk,68752
47
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/StockSentiment.py,sha256=kc5jdXRGm2nIvDK-2y4i_Y1w47_2zWpunjlQsKB7IBY,3640
48
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=MXJrQPD4yvKSI4p_RcnHt5oZg8AZ59ME7Jf-Nryoy5g,5055
49
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/Utility.py,sha256=TvYaN_kj9-zqis7ayS9ACq6gfU41NiYIG-gGqYDhHZw,14181
50
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=GS1Q_jwulpOjZv0w9ZDySRa5w51gJ8xDabbUpQGKVO0,5800
51
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/__init__.py,sha256=CmPbrHDZvtebAWYDDyJGxDXQdj5o1wvU5fOVv5OD2_M,28
52
+ pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/keys.py,sha256=tygV0iu8bKmSPo6HGj1Cb-rTtEWErGrsYRZY7SoCb1g,6957
53
+ pkscreener-0.46.20250226.747.dist-info/LICENSE,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
54
+ pkscreener-0.46.20250226.747.dist-info/METADATA,sha256=BGd5zPYcO-GoL_BqtMbQ10hmDwWtYEjqlvUWtGngKCI,34208
55
+ pkscreener-0.46.20250226.747.dist-info/WHEEL,sha256=SrHotcziYeA3Bbq3oh1aPgJQQxcMgZpb6O0Mt2GSXHc,101
56
+ pkscreener-0.46.20250226.747.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
+ pkscreener-0.46.20250226.747.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
+ pkscreener-0.46.20250226.747.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (75.8.1)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-win_amd64
5
5
 
@@ -1 +0,0 @@
1
- VERSION='0.46.20250225.739'
@@ -1,58 +0,0 @@
1
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/Disclaimer.txt,sha256=x7M9Clrb9qACqOa-Vnwh9wliISLgudW5Kv_dgEk3N_Q,1405
2
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/LICENSE-Others.txt,sha256=0put8oIYbAYz98IGnp2F1CpHoyR_iyk0PRYG5D-U1K0,277059
3
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/LICENSE.txt,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
4
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
5
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/README.txt,sha256=DA19v_0fzu0g4uKFcqpuzhy88b9BhhtLy95qvgGtP10,33186
6
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/__init__.py,sha256=cH0zxpSdH-dhmZihoe5mpE2NRRmF2Na_KaGMO9u33Rg,1669
7
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
8
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/globals.py,sha256=CAxG4U6Y14QJPByfeHZrUV4yhWADqFkiHdzftmG4D2M,250279
9
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/pkscreener.ini,sha256=v0MV7kLxi0ehh1a013wg6TLXDeeLRO8PKapICSU1u-k,2451
10
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/pkscreenerbot.py,sha256=1qspz8zHv0j6OUzF7DTyKlVE0gcuZDJFXgtVh0KUv5Y,120132
11
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/pkscreenercli.py,sha256=5a6u2Fdpr_I6vjwu15pkr-jhKOB2zl7RlARl96sX7Yo,59473
12
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/requirements.txt,sha256=hAdcLXQsZf4M21zn1iQ_dQzTxnUC4fGTEWNrtS4grqU,1503
13
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ArtTexts.py,sha256=UzU0v3LX4PsWcx_ATv5M-T4v93uLz2hmvyDtew6qzZk,19708
14
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/AssetsManager.py,sha256=knkEvuR-QGD7DZUrhheAXgwM8L_Te-ks9-ENRF2yUCc,33748
15
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Backtest.py,sha256=VoNronl--07E477I9lhwfEjI4vK5VHu_tcDRO1K96hU,10784
16
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Barometer.py,sha256=aZWu0TFbwRBvnkyN_Ws4a_2FYNhKKuqEpoQAqokthPc,9640
17
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=Dev8eCx8eGNqDsbXj-t68hLSDpKDICcyb9yH_n_IbYg,3086
18
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=IFVUXzx175aqZlL7JlmNl308aeIkSD6Hugl4M9zg9Io,17419
19
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Changelog.py,sha256=S0hNTDYptWUxFrdTzqinjFLIywVAuKlYR1aCjepADn0,1511
20
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ConfigManager.py,sha256=ZIxZ-IqWjIXpo_7SWRLx5e8sc0b92gGnc4qqMZVproM,54426
21
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=QZLPA0li0bfs1zNijfq_utovulY5fl4vXWk89CBpL5Q,10291
22
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=y4TSXhT1FxKOSJ4fvEnVmXthtU870j9IFDh0vkNOxC4,12418
23
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Fetcher.py,sha256=fw5dANIakYYkKySRbROpcumZT2f7zSETWiA-T1Oh7GQ,15466
24
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/GlobalStore.py,sha256=UCYctbau2ZAShkWOLA7-p52Pg_irghCWRoa6UrIKYQQ,3799
25
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ImageUtility.py,sha256=DKPiM7u-fGPujD63VLCWUsvesgflVYDiLqyw_KWOK8g,37629
26
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=eu1B6Zl9SIQCSB43D3z7I1laKCp7NKTGSgIzv-4G1U4,22512
27
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/MarketStatus.py,sha256=oBDTCTGazzOEhcclugxOOtyhu2VVT2XQ-t-GmY_pT7g,3823
28
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/MenuOptions.py,sha256=RIPQ9mVC9I07GZubrmOtUAQg10GbCoYwF3fnvV1dvqY,65741
29
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Messenger.py,sha256=yKqq3eE2JkvTOeKcNZoPpCgxQ9FjcEeB1iHIKwwq8dA,8572
30
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=jSjVqgiZ4CGVkieJMekNLHZGx_eOGN-Xg4RF3eZO_Nk,13816
31
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=dCBXn2pw2WVdBcG8OjzW_2jJVtO2UTcBRBJmEuVUwYY,7695
32
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKDataService.py,sha256=InEI3AGt_ykYfbwq2v1_NWUefTqPluKHSh_4ksFSUzE,3456
33
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=wh48WLLFxBAFHML5Sq5G5-UFP96snJ9yKJgpKWuQ2Zs,2253
34
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=2-J3vqdEJ_PRoU6CPw4BLOFLl1R5loivCG80Ywe7pWs,34696
35
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=L3O3EwIZBE9PpdDFIGH-2Ec9Gi3IlzCd6RfQSXUd6So,5695
36
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=Vlv5snbT6vA7t6jO2WBvxV0JDPHQf2iTbrT2ndkSnVQ,27317
37
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=wDMORWmyglcu06woVNpgDlESsMIiYX96MXO0VoBlLYg,1694
38
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKScheduler.py,sha256=Od3Niv6Q_aHarau9agCVt7h194votlaDX4j1Xv-_ru4,8994
39
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=BIICJx79QjGFPrnmQ34357jOGp79vuiknx6A_kC9y8Y,8466
40
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKTask.py,sha256=YPxzn0dA5ty7CtRFi1wQphC9vCdK8tB2_3DYHje9jgc,1907
41
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=VftNCzv44NyeLLOhuxUzzgre8zpT-nRL75B0jv-udDI,11783
42
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Pktalib.py,sha256=yko7TZMOsLoBv-LbTuT903CsGdyckhypXldh7uoAXmo,34179
43
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Portfolio.py,sha256=dxviO0G3OqJza4Nbpj5OCph8PZlfkRCkL3LfLJYgqu0,14196
44
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=cMQ-yZrBPWo4gACxFqj3HNG9rqmyqXkS88qpy77JP_s,49612
45
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=CoV2i5jJPL2hm4sIhQAPHbbfWw3vqgoShVmq4uir7k4,225756
46
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/StockScreener.py,sha256=frSJw1Dix0BGuXoitnfTm06b_G8asxnzQuuoNYG9mgk,68752
47
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/StockSentiment.py,sha256=kc5jdXRGm2nIvDK-2y4i_Y1w47_2zWpunjlQsKB7IBY,3640
48
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=MXJrQPD4yvKSI4p_RcnHt5oZg8AZ59ME7Jf-Nryoy5g,5055
49
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/Utility.py,sha256=6JpIich2-knaZ4sjsjyMoO_4S622KK-Jte2Hi4eYIOs,13870
50
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=GS1Q_jwulpOjZv0w9ZDySRa5w51gJ8xDabbUpQGKVO0,5800
51
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/__init__.py,sha256=PBpHtk1InmtKJMg0SV5DFgFWJhUv5qYfPxYtawm1q1E,28
52
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/keys.py,sha256=tygV0iu8bKmSPo6HGj1Cb-rTtEWErGrsYRZY7SoCb1g,6957
53
- pkscreener-0.46.20250225.739.dist-info/LICENSE,sha256=q80QYQZCkhPymkaQKXZJwOFYU6X-4lUHRzCGYERdLpA,1099
54
- pkscreener-0.46.20250225.739.dist-info/METADATA,sha256=lfd9WHYD3Dxt0jvjt3nm_QFhMaNAdJkVhYlY81hGGug,34208
55
- pkscreener-0.46.20250225.739.dist-info/WHEEL,sha256=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,101
56
- pkscreener-0.46.20250225.739.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
57
- pkscreener-0.46.20250225.739.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
58
- pkscreener-0.46.20250225.739.dist-info/RECORD,,