pkscreener 0.46.20250224.738__cp312-cp312-manylinux2014_x86_64.whl → 0.46.20250225.741__cp312-cp312-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/README.txt +5 -5
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/AssetsManager.py +1 -1
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ConfigManager.py +1 -1
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Fetcher.py +27 -2
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +6 -2
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Utility.py +6 -1
- pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/globals.py +3 -2
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/pkscreenerbot.py +9 -1
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/requirements.txt +3 -1
- {pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/METADATA +10 -8
- pkscreener-0.46.20250225.741.dist-info/RECORD +58 -0
- {pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/WHEEL +1 -1
- pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/__init__.py +0 -1
- pkscreener-0.46.20250224.738.dist-info/RECORD +0 -58
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250224.738.data → pkscreener-0.46.20250225.741.data}/purelib/pkscreener/pkscreenercli.py +0 -0
- {pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/LICENSE +0 -0
- {pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/entry_points.txt +0 -0
- {pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.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.739/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.739/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.739/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.739/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.739/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
|
@@ -562,7 +562,7 @@ class PKAssetsManager:
|
|
562
562
|
f"Stock data cache file:{cache_file} on server has length ->{filesize} {'Mb' if chunksize >= MB else ('Kb' if chunksize >= KB else 'bytes')}"
|
563
563
|
)
|
564
564
|
if not retrial and not stockDataLoaded:
|
565
|
-
|
565
|
+
# Don't try for more than once.
|
566
566
|
stockDict = PKAssetsManager.loadStockData(
|
567
567
|
stockDict,
|
568
568
|
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)
|
@@ -59,7 +59,26 @@ from pkscreener.classes.PKTask import PKTask
|
|
59
59
|
from PKDevTools.classes.OutputControls import OutputControls
|
60
60
|
# This Class Handles Fetching of Stock Data over the internet
|
61
61
|
|
62
|
+
from requests import Session
|
63
|
+
from requests_cache import CacheMixin, SQLiteCache
|
64
|
+
from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
|
65
|
+
from pyrate_limiter import Duration, RequestRate, Limiter
|
66
|
+
class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
|
67
|
+
pass
|
62
68
|
|
69
|
+
# https://help.yahooinc.com/dsp-api/docs/rate-limits
|
70
|
+
# Define multiple rate limits
|
71
|
+
TRY_FACTOR = 50
|
72
|
+
yf_limiter = Limiter(
|
73
|
+
RequestRate(60*TRY_FACTOR, Duration.MINUTE), # Max 60 requests per minute
|
74
|
+
RequestRate(360*TRY_FACTOR, Duration.HOUR), # Max 360 requests per hour
|
75
|
+
RequestRate(8000*TRY_FACTOR, Duration.DAY) # Max 8000 requests per day
|
76
|
+
)
|
77
|
+
yf_session = CachedLimiterSession(
|
78
|
+
limiter=yf_limiter,
|
79
|
+
bucket_class=MemoryQueueBucket,
|
80
|
+
backend=SQLiteCache("yfinance.cache"),
|
81
|
+
)
|
63
82
|
class screenerStockDataFetcher(nseStockDataFetcher):
|
64
83
|
_tickersInfoDict={}
|
65
84
|
def fetchStockDataWithArgs(self, *args):
|
@@ -132,6 +151,10 @@ class screenerStockDataFetcher(nseStockDataFetcher):
|
|
132
151
|
if yfVersion == "0.2.28":
|
133
152
|
YfData.user_agent_headers = {
|
134
153
|
'User-Agent': random.choice(USER_AGENTS)}
|
154
|
+
if "PKDevTools_Default_Log_Level" in os.environ.keys():
|
155
|
+
from yfinance import utils
|
156
|
+
yflogger = utils.get_yf_logger()
|
157
|
+
yflogger.setLevel(int(os.environ.get("PKDevTools_Default_Log_Level"),logging.DEBUG))
|
135
158
|
data = yf.download(
|
136
159
|
tickers=stockCode,
|
137
160
|
period=period,
|
@@ -144,7 +167,8 @@ class screenerStockDataFetcher(nseStockDataFetcher):
|
|
144
167
|
start=start,
|
145
168
|
end=end,
|
146
169
|
auto_adjust=True,
|
147
|
-
threads=len(stockCode) if not isinstance(stockCode,str) else True
|
170
|
+
threads=len(stockCode) if not isinstance(stockCode,str) else True,
|
171
|
+
session=yf_session
|
148
172
|
)
|
149
173
|
if isinstance(stockCode,str):
|
150
174
|
if (data is None or data.empty):
|
@@ -188,6 +212,7 @@ class screenerStockDataFetcher(nseStockDataFetcher):
|
|
188
212
|
default_logger().debug(e,exc_info=True)
|
189
213
|
pass
|
190
214
|
except YFRateLimitError as e:
|
215
|
+
default_logger().debug(f"YFRateLimitError Hit! \n{e}")
|
191
216
|
# if attempt <= 2:
|
192
217
|
# default_logger().debug(f"YFRateLimitError Hit! Going for attempt : {attempt+1}")
|
193
218
|
# sleep(attempt*2) # Exponential backoff
|
@@ -87,12 +87,16 @@ class PKMarketOpenCloseAnalyser:
|
|
87
87
|
daily_exists, daily_cache_file, stockDict = PKMarketOpenCloseAnalyser.ensureDailyStockDataExists(listStockCodes=listStockCodes)
|
88
88
|
updatedCandleData = PKMarketOpenCloseAnalyser.updatedCandleData
|
89
89
|
allDailyCandles = PKMarketOpenCloseAnalyser.allDailyCandles
|
90
|
+
if updatedCandleData is not None and len(updatedCandleData) < 1:
|
91
|
+
updatedCandleData = None
|
92
|
+
if allDailyCandles is not None and len(allDailyCandles) < 1:
|
93
|
+
allDailyCandles = None
|
90
94
|
if ((int_exists or len(stockDictInt) > 0) and (daily_exists or len(stockDict) > 0)) and (updatedCandleData is None or allDailyCandles is None):
|
91
95
|
allDailyCandles = PKMarketOpenCloseAnalyser.getLatestDailyCandleData(daily_cache_file,stockDict)
|
92
96
|
morningIntradayCandle = PKMarketOpenCloseAnalyser.getIntradayCandleFromMorning(int_cache_file,sliceWindowDatetime=sliceWindowDatetime,stockDictInt=stockDictInt)
|
93
97
|
updatedCandleData = PKMarketOpenCloseAnalyser.combineDailyStockDataWithMorningSimulation(allDailyCandles,morningIntradayCandle)
|
94
|
-
|
95
|
-
|
98
|
+
PKMarketOpenCloseAnalyser.updatedCandleData = updatedCandleData
|
99
|
+
PKMarketOpenCloseAnalyser.allDailyCandles = allDailyCandles
|
96
100
|
AssetsManager.PKAssetsManager.saveStockData(updatedCandleData,PKMarketOpenCloseAnalyser.configManager,1,False,False, True)
|
97
101
|
return updatedCandleData, allDailyCandles
|
98
102
|
|
@@ -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.20250225.741'
|
@@ -1874,7 +1874,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
1874
1874
|
|
1875
1875
|
if str(menuOption).upper() == "C":
|
1876
1876
|
stockDictPrimary,endOfdayCandles = PKMarketOpenCloseAnalyser.getStockDataForSimulation()
|
1877
|
-
if stockDictPrimary is None or endOfdayCandles is None:
|
1877
|
+
if stockDictPrimary is None or endOfdayCandles is None or len(stockDictPrimary) < 1 or len(endOfdayCandles) < 1:
|
1878
1878
|
OutputControls().printOutput(f"Cannot proceed! Stock data is unavailable. Please check the error logs/messages !")
|
1879
1879
|
return None, None
|
1880
1880
|
if indexOption > 0:
|
@@ -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()
|
@@ -1361,7 +1361,8 @@ def default_markup(user=None,monitorIndex=0):
|
|
1361
1361
|
inlineMenus = []
|
1362
1362
|
lastRowMenus = []
|
1363
1363
|
rowIndex = 0
|
1364
|
-
|
1364
|
+
# https://emojidb.org/otp-emojis
|
1365
|
+
iconDict = {"X":"🕵️♂️ 🔍 ","B":"📈 🎯 ","P":"🧨 💥 ","MI":"","DV":"","VS":"🔔 📣 ","start":"🟢 🏁 ", "HS":"🕵️♂️ ","otp":"🔐 "}
|
1365
1366
|
for mnu in mns:
|
1366
1367
|
if mnu.menuKey[0:2] in TOP_LEVEL_SCANNER_MENUS:
|
1367
1368
|
rowIndex +=1
|
@@ -1386,6 +1387,12 @@ def default_markup(user=None,monitorIndex=0):
|
|
1386
1387
|
callback_data="start",
|
1387
1388
|
)
|
1388
1389
|
)
|
1390
|
+
lastRowMenus.append(
|
1391
|
+
InlineKeyboardButton(
|
1392
|
+
iconDict.get("otp") + "Get OTP",
|
1393
|
+
callback_data="OTP",
|
1394
|
+
)
|
1395
|
+
)
|
1389
1396
|
if len(inlineMenus) > 0:
|
1390
1397
|
keyboard.append(inlineMenus)
|
1391
1398
|
keyboard.append(lastRowMenus)
|
@@ -2284,6 +2291,7 @@ def runpkscreenerbot(availability=True) -> None:
|
|
2284
2291
|
states={
|
2285
2292
|
START_ROUTES: [
|
2286
2293
|
CallbackQueryHandler(XScanners, pattern="^" + str("CX") + "$"),
|
2294
|
+
CallbackQueryHandler(otp, pattern="^" + str("OTP") + "$"),
|
2287
2295
|
CallbackQueryHandler(XScanners, pattern="^" + str("CB") + "$"),
|
2288
2296
|
CallbackQueryHandler(PScanners, pattern="^" + str("CP") + "$"),
|
2289
2297
|
CallbackQueryHandler(XScanners, pattern="^" + str("CMI_")),
|
@@ -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.245
|
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.20250225.741
|
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.20250225.741.zip
|
7
7
|
Author: pkjmesra
|
8
8
|
Author-email: pkjmesra@gmail.com
|
9
9
|
License: OSI Approved (MIT)
|
@@ -33,13 +33,15 @@ Requires-Dist: pandas
|
|
33
33
|
Requires-Dist: pandas_ta
|
34
34
|
Requires-Dist: pefile<2024.8.26,>=2023.2.7
|
35
35
|
Requires-Dist: Pillow
|
36
|
-
Requires-Dist: PKDevTools>=0.13.20250126.
|
36
|
+
Requires-Dist: PKDevTools>=0.13.20250126.245
|
37
37
|
Requires-Dist: PKNSETools>=0.1.20250122.139
|
38
38
|
Requires-Dist: Pyarrow
|
39
39
|
Requires-Dist: pyppeteer
|
40
40
|
Requires-Dist: pytz
|
41
41
|
Requires-Dist: python-telegram-bot<20.0,>=13.4
|
42
42
|
Requires-Dist: requests_cache
|
43
|
+
Requires-Dist: requests_ratelimiter
|
44
|
+
Requires-Dist: pyrate_limiter
|
43
45
|
Requires-Dist: rich
|
44
46
|
Requires-Dist: scikit-learn
|
45
47
|
Requires-Dist: scipy
|
@@ -392,15 +394,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
392
394
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
393
395
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
394
396
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
395
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
397
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.739/pkscreenercli.exe
|
396
398
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
397
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
399
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.739/pkscreenercli_x64.bin
|
398
400
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
399
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
401
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.739/pkscreenercli_arm64.bin
|
400
402
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
401
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
403
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.739/pkscreenercli_x64.run
|
402
404
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
403
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
405
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250225.739/pkscreenercli_arm64.run
|
404
406
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
405
407
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
406
408
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -0,0 +1,58 @@
|
|
1
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/README.txt,sha256=ldY19tZD6dTAqwOGYtrqCCNH0BNYFo0IxaKsIBeO7o0,32802
|
6
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/globals.py,sha256=5fH-6qujZ14hct8UyLazBc8TyQVjKBGwfZcdHIVkMAE,246083
|
9
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/pkscreenerbot.py,sha256=gqUMbk52OxT5ha6jjSqDYBEVSCk036tz0efWw-TwQiE,117860
|
11
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/pkscreenercli.py,sha256=qtoY8PVFzxgHa7I8wQeTngM-Yyjwlq6fjMDGjwy7jck,58244
|
12
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/requirements.txt,sha256=MUxmAl6WZkUOhnyI6pGG6YGdH6rAdB43E4dIUB3iybQ,1493
|
13
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/AssetsManager.py,sha256=HRZ29hSiWpJo0Cc1AN9cMq4maA6ieuq6WjNPYCPMx0o,33147
|
15
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ConfigManager.py,sha256=AyIsuS3j3XGlypO9O3d53ICpmOUCwvABgO131IilwyY,53564
|
21
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=uyVVi1gtI7My-ADbiYpxXQMhAR5DiR5g9DJJ1fqTK-w,12181
|
23
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Fetcher.py,sha256=LRSLusHOCcZomCkcQhHi_v9u4vc1C1Ein87KC6APNe4,16326
|
24
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=uO4A84j_0wpfdjbwfAxTWjsmji4kHSjz5L8lshNOs-U,22141
|
27
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
|
32
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=zUsJEGB4NHo0ftozOBrT2ZFakU35oTSUjtAja2rA0v0,34157
|
35
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=zFsg2oW3vjlZYtEW3jsUS9XCTXPrL47dY5psQ9iJoIA,26795
|
37
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
|
42
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
|
43
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=YSg4cynnDcn7cUK6VUBRpMmcNsKG3_CCzTSyobiCk2k,221479
|
46
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/StockScreener.py,sha256=vng1HlO5iB48-SoaCcxJMbKRpnKCJmyULLZg411wskQ,67563
|
47
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/Utility.py,sha256=vLW6foXhUmj5mY4wedlqIcB-zT8O9kUm79vDR6c_LwQ,13868
|
50
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
|
51
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/__init__.py,sha256=yYpkt7JRLCjt_ubNJYE1wDS6KYs_KEqMArjtlzCDK6Y,28
|
52
|
+
pkscreener-0.46.20250225.741.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
+
pkscreener-0.46.20250225.741.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
+
pkscreener-0.46.20250225.741.dist-info/METADATA,sha256=0XMXxKHqeF-4npPmje-yYcEPv2qa-XYE9Y2B5T7V_88,34806
|
55
|
+
pkscreener-0.46.20250225.741.dist-info/WHEEL,sha256=sSFyKywBJwdWCC2df2hrZuZBSWX42jKxIeb_iGXlFM8,104
|
56
|
+
pkscreener-0.46.20250225.741.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
+
pkscreener-0.46.20250225.741.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
+
pkscreener-0.46.20250225.741.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.46.20250224.738'
|
@@ -1,58 +0,0 @@
|
|
1
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/README.txt,sha256=2W733PeMtrkxJpRWfpFOJJ5q3W6NdNmlndph3l2Vb1w,32802
|
6
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/globals.py,sha256=VLoe1ffG-0mzhFamZzysj9Ehz8KEPDTw_7cY9NP6yfY,245913
|
9
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/pkscreenerbot.py,sha256=pA-ybGLp6PABW-vru3teaBcIxd7lCPkTxvtcUKSte0Y,117585
|
11
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/pkscreenercli.py,sha256=qtoY8PVFzxgHa7I8wQeTngM-Yyjwlq6fjMDGjwy7jck,58244
|
12
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/requirements.txt,sha256=M0sBcu78hXoHjm1fCiEghwEaMRvPxHhMGTeFJM6MgXU,1457
|
13
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/AssetsManager.py,sha256=1QpIz-8cFdSPupAqaYeEJhZIaNLG-Fhmcp0FEOhix3Y,33151
|
15
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
|
21
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=uyVVi1gtI7My-ADbiYpxXQMhAR5DiR5g9DJJ1fqTK-w,12181
|
23
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Fetcher.py,sha256=kPnLndeH6OYdoMRxUPjamDTXYUIsU5QjyaYEp-uNu0M,15143
|
24
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=uO4A84j_0wpfdjbwfAxTWjsmji4kHSjz5L8lshNOs-U,22141
|
27
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
|
32
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=rZUrGpy3icHm6E9m3Cr-xwaPav3VD8SsL_4bcW762ww,33947
|
35
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=zFsg2oW3vjlZYtEW3jsUS9XCTXPrL47dY5psQ9iJoIA,26795
|
37
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
|
42
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
|
43
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=YSg4cynnDcn7cUK6VUBRpMmcNsKG3_CCzTSyobiCk2k,221479
|
46
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/StockScreener.py,sha256=vng1HlO5iB48-SoaCcxJMbKRpnKCJmyULLZg411wskQ,67563
|
47
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
|
50
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
|
51
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/__init__.py,sha256=8Gdk0rV3m91udq6Iir4bPLzajnsFbRoRXSzdPWUWds0,28
|
52
|
-
pkscreener-0.46.20250224.738.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
-
pkscreener-0.46.20250224.738.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
-
pkscreener-0.46.20250224.738.dist-info/METADATA,sha256=VOLyxI-sH_s7OiLhhjamW4b-3ao8sjSlDBTX2q3CFAQ,34740
|
55
|
-
pkscreener-0.46.20250224.738.dist-info/WHEEL,sha256=aDUArjEbIuDQzblE24IvdIsBzRhJEjiXmuNUYQ-gpaA,104
|
56
|
-
pkscreener-0.46.20250224.738.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
-
pkscreener-0.46.20250224.738.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
-
pkscreener-0.46.20250224.738.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.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250224.738.dist-info → pkscreener-0.46.20250225.741.dist-info}/top_level.txt
RENAMED
File without changes
|