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.
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/README.txt +5 -5
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/AssetsManager.py +5 -1
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConfigManager.py +1 -1
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Fetcher.py +28 -2
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Utility.py +6 -1
- pkscreener-0.46.20250226.747.data/purelib/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/globals.py +2 -1
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreenerbot.py +2 -1
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreenercli.py +12 -1
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/requirements.txt +3 -1
- {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/METADATA +7 -7
- pkscreener-0.46.20250226.747.dist-info/RECORD +58 -0
- {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/WHEEL +1 -1
- pkscreener-0.46.20250225.739.data/purelib/pkscreener/classes/__init__.py +0 -1
- pkscreener-0.46.20250225.739.dist-info/RECORD +0 -58
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250225.739.data → pkscreener-0.46.20250226.747.data}/purelib/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/LICENSE +0 -0
- {pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/entry_points.txt +0 -0
- {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.
|
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.
|
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.
|
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.
|
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.
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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 +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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250225.739.dist-info → pkscreener-0.46.20250226.747.dist-info}/top_level.txt
RENAMED
File without changes
|