pkscreener 0.46.20250908.764__cp310-cp310-macosx_10_9_x86_64.whl → 0.46.20250908.767__cp310-cp310-macosx_10_9_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.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/README.txt +5 -5
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/AssetsManager.py +1 -1
- pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/globals.py +16 -3
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/pkscreenerbot.py +23 -21
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/requirements.txt +1 -1
- {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/METADATA +8 -8
- pkscreener-0.46.20250908.767.dist-info/RECORD +58 -0
- pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/__init__.py +0 -1
- pkscreener-0.46.20250908.764.dist-info/RECORD +0 -58
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/Utility.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250908.764.data → pkscreener-0.46.20250908.767.data}/purelib/pkscreener/pkscreenercli.py +0 -0
- {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/LICENSE +0 -0
- {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/WHEEL +0 -0
- {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/entry_points.txt +0 -0
- {pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/top_level.txt +0 -0
@@ -331,15 +331,15 @@ If you are a 3rd year or final year engineering graduate or pursuing masters in
|
|
331
331
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
332
332
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
333
333
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
334
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
334
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli.exe
|
335
335
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
336
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
336
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_x64.bin
|
337
337
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
338
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
338
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_arm64.bin
|
339
339
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
340
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
340
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_x64.run
|
341
341
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
342
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
342
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_arm64.run
|
343
343
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
344
344
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
345
345
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -189,7 +189,7 @@ class PKAssetsManager:
|
|
189
189
|
def afterMarketStockDataExists(intraday=False, forceLoad=False):
|
190
190
|
exists, cache_file = Archiver.afterMarketStockDataExists(intraday=intraday,
|
191
191
|
forceLoad=forceLoad,
|
192
|
-
date_suffix=
|
192
|
+
date_suffix=True)
|
193
193
|
return exists, cache_file
|
194
194
|
|
195
195
|
@Halo(text='', spinner='dots')
|
@@ -0,0 +1 @@
|
|
1
|
+
VERSION='0.46.20250908.767'
|
@@ -1819,10 +1819,23 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
1819
1819
|
PKAnalyticsService().send_event("app_exit")
|
1820
1820
|
sys.exit(0)
|
1821
1821
|
elif indexOption == "N":
|
1822
|
+
import pandas as pd
|
1822
1823
|
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
|
1823
|
-
|
1824
|
-
|
1825
|
-
)
|
1824
|
+
if stockDictPrimary is None or (len(stockDictPrimary.keys()) == 0):
|
1825
|
+
stockDictPrimary,stockDictSecondary = loadDatabaseOrFetch(downloadOnly=False, listStockCodes=["NIFTY 50"], menuOption=menuOption,indexOption=indexOption)
|
1826
|
+
hostData = stockDictPrimary.get("NIFTY 50") if (stockDictPrimary is not None and len(stockDictPrimary) > 0) else None
|
1827
|
+
columns = hostData["columns"]
|
1828
|
+
data = pd.DataFrame(
|
1829
|
+
hostData["data"], columns=columns, index=hostData["index"]
|
1830
|
+
)
|
1831
|
+
data.reset_index(inplace=True)
|
1832
|
+
if "Datetime" in data.columns and "Date" not in data.columns:
|
1833
|
+
data.rename(columns={"Datetime": "Date"}, inplace=True)
|
1834
|
+
else:
|
1835
|
+
data.rename(columns={"index": "Date"}, inplace=True)
|
1836
|
+
data.set_index("Date", inplace=True)
|
1837
|
+
data.index = pd.to_datetime(data.index)
|
1838
|
+
prediction, pText, sText = screener.getNiftyPrediction(df=data)
|
1826
1839
|
warningText = "\nNifty AI prediction works best if you request after market is closed. It may not be accurate while market is still open!" if "open" in Utility.marketStatus() else ""
|
1827
1840
|
try:
|
1828
1841
|
todayHoliday, todayOccassion = PKDateUtilities.isHoliday(PKDateUtilities.currentDateTime())
|
@@ -61,6 +61,7 @@ MINUTES_2_IN_SECONDS = 120
|
|
61
61
|
OWNER_USER = "Itsonlypk"
|
62
62
|
APOLOGY_TEXT = "Apologies! The @nse_pkscreener_bot is NOT available for the time being! We are working with our host GitHub and other data source providers to sort out pending invoices and restore the services soon! Thanks for your patience and support! 🙏"
|
63
63
|
|
64
|
+
from pkscreener.classes import VERSION
|
64
65
|
from PKDevTools.classes.Environment import PKEnvironment
|
65
66
|
from PKDevTools.classes.PKDateUtilities import PKDateUtilities
|
66
67
|
from PKDevTools.classes.ColorText import colorText
|
@@ -279,7 +280,7 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
|
|
279
280
|
if len(args) > 0: # UTR
|
280
281
|
matchedTran = PKGmailReader.matchUTR(utr=args[0])
|
281
282
|
if matchedTran is not None:
|
282
|
-
updatedResults = f"We have found the following transaction for the provided UTR:\n{matchedTran}\
|
283
|
+
updatedResults = f"We have found the following transaction for the provided UTR:\n{matchedTran}\nYour subscription is being enabled soon!\nPlease check with /OTP in the next couple of minutes!\nThank you for trusting PKScreener!"
|
283
284
|
try:
|
284
285
|
results = updateSubscription(user.id,int(float(matchedTran.get("amountPaid"))))
|
285
286
|
if results is not None:
|
@@ -289,15 +290,16 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
|
|
289
290
|
updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
|
290
291
|
pass
|
291
292
|
else:
|
292
|
-
updatedResults = "We could not find any transaction details with the provided UTR.\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\
|
293
|
+
updatedResults = "We could not find any transaction details with the provided UTR.\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
|
293
294
|
else:
|
294
|
-
updatedResults = "Did you forget to include the UTR number with /Check ?\nYou should use it like this:\n
|
295
|
+
updatedResults = "Did you forget to include the UTR number with /Check ?\nYou should use it like this:\n/Check UTR_Here\nUPI transaction reference number is a 12-digit alphanumeric/numeric code that serves as a unique identifier for transactions. It is also known as the Unique Transaction Reference (UTR) number.\nYou can find your UPI reference number in the UPI-enabled app you used to make the transaction.\nFor example, you can find your UPI reference number in the History section of Google Pay. \nIn the Paytm app, you can find it by clicking View Details.\nIf you still cannot find it, please drop a message with transaction details/snapshot to @ItsOnlyPK to enable subscription."
|
295
296
|
update.message.reply_text(sanitiseTexts(updatedResults), reply_markup=default_markup(user=user),parse_mode="HTML")
|
296
297
|
shareUpdateWithChannel(update=update, context=context, optionChoices=f"/otp\n{updatedResults}")
|
297
298
|
return START_ROUTES
|
298
299
|
|
299
300
|
def editMessageText(query,editedText,reply_markup):
|
300
|
-
|
301
|
+
# .replace(microsecond=0).isoformat()
|
302
|
+
editedText = f"PKScreener <b>v{VERSION}</b>\n{PKDateUtilities.currentDateTime()}:\n{editedText}"
|
301
303
|
if query is not None and hasattr(query, "edit_message_text"):
|
302
304
|
query.edit_message_text(text=editedText, reply_markup=reply_markup,parse_mode="HTML")
|
303
305
|
|
@@ -360,7 +362,7 @@ def start(update: Update, context: CallbackContext, updatedResults=None, monitor
|
|
360
362
|
menuText = f"{menuText}\nClick /start if you want to restart the session."
|
361
363
|
else:
|
362
364
|
if not isUserSubscribed(user):
|
363
|
-
updatedResults = f"Thank you for choosing Intraday Monitor!\
|
365
|
+
updatedResults = f"Thank you for choosing Intraday Monitor!\nThis scan request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n/OTP\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1"
|
364
366
|
updatedResults = f"{updatedResults}\nClick /start if you want to restart the session."
|
365
367
|
chosenBotMenuOption = f"{chosenBotMenuOption}\nInt. Monitor. MonitorIndex:{monitorIndex}\n{updatedResults}"
|
366
368
|
menuText = updatedResults
|
@@ -666,7 +668,7 @@ def viewSubscriptionOptions(update:Update,context:CallbackContext,sendOTP=False)
|
|
666
668
|
subscriptionModelNames = f"{subscriptionModelNames}\n₹ {str(value).ljust(6)}: {name} (Only Basic Scans are free)\n"
|
667
669
|
else:
|
668
670
|
subscriptionModelNames = f"{subscriptionModelNames}\n₹ {str(value).ljust(6)}: {name}"
|
669
|
-
subscriptionModelNames = f"{subscriptionModelNames}</pre>\nPlease pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'><b>sponsor</b></a>\
|
671
|
+
subscriptionModelNames = f"{subscriptionModelNames}</pre>\nPlease pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'><b>sponsor</b></a>\nPlease send\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically enable subscription after making payment via UPI\n. If it is not auto-enabled, please drop a message to @ItsOnlyPK on Telegram after paying to enable subscription manually."
|
670
672
|
|
671
673
|
subscriptionModelName = PKUserSusbscriptions().subscriptionValueKeyPairs[subsModel]
|
672
674
|
if subscriptionModelName != PKSubscriptionModel.No_Subscription.name:
|
@@ -679,7 +681,7 @@ def viewSubscriptionOptions(update:Update,context:CallbackContext,sendOTP=False)
|
|
679
681
|
if otpValue == 0:
|
680
682
|
updatedResults = f"We are having difficulty generating OTP for your {userText}. Please try again later or reach out to @ItsOnlyPK."
|
681
683
|
else:
|
682
|
-
updatedResults = f"Please use the following to login to PKScreener:\n{userText}\n<b>OTP</b> : <code>{otpValue}</code>\
|
684
|
+
updatedResults = f"Please use the following to login to PKScreener:\n{userText}\n<b>OTP</b> : <code>{otpValue}</code>\nCurrent subscription : <b>{subscriptionModelName}</b>.\nCurrent alerts balance: <b>₹ {alertUser.balance if alertUser is not None else 0}</b> {scannerJobsSubscribed}. {subscriptionModelNames}"
|
683
685
|
else:
|
684
686
|
updatedResults = f"Current subscription: <b>{subscriptionModelName}</b>.\nCurrent alerts balance: <b>₹ {alertUser.balance if alertUser is not None else 0}</b> {scannerJobsSubscribed}. {subscriptionModelNames}"
|
685
687
|
|
@@ -734,7 +736,7 @@ def subscribeToScannerAlerts(update: Update, context: CallbackContext) -> str:
|
|
734
736
|
menuText = ""
|
735
737
|
requiredBalance = 40 if str(scanId).upper().startswith("P") else 31
|
736
738
|
# upi://pay?pa=PKScreener@APL&pn=PKScreener&cu=INR
|
737
|
-
payWall = "Please pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>\
|
739
|
+
payWall = "Please pay to subscribe:\n1. Using UPI(India) to <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> or\n2. Proudly <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>\nPlease use\n/check UPI_UTR_HERE_After_Making_Payment to share transaction reference number to automatically update your balance after making payment via UPI.\nAfter that you can try re-subscribing!\nIf you still face any problem, please drop a message to @ItsOnlyPK along with UTR and Scan details on Telegram after paying to enable subscription manually."
|
738
740
|
if alertUser is not None and alertUser.balance >= 0:
|
739
741
|
# User has some balance
|
740
742
|
if len(alertUser.scannerJobs) > 0:
|
@@ -1250,7 +1252,7 @@ def Level2(update: Update, context: CallbackContext) -> str:
|
|
1250
1252
|
)
|
1251
1253
|
optionChoices = f"{optionChoices}{f' > {selection[4]}' if len(selection) > 4 else ''}".replace(" > >","").strip()
|
1252
1254
|
expectedTime = f"{'10 to 15' if '> 15' in optionChoices else '1 to 2'}"
|
1253
|
-
menuText = f"Thank you for choosing {optionChoices.replace(' > > ','')}. You will receive the notification/results in about {expectedTime} minutes. It generally takes 1-2 minutes for NSE (2000+) stocks and 10-15 minutes for NASDAQ (7300+).\
|
1255
|
+
menuText = f"Thank you for choosing {optionChoices.replace(' > > ','')}. You will receive the notification/results in about {expectedTime} minutes. It generally takes 1-2 minutes for NSE (2000+) stocks and 10-15 minutes for NASDAQ (7300+).\nPKScreener had been free for a long time, but owing to cost/budgeting issues, only a basic set of features will always remain free for everyone. Consider donating to help cover the basic server costs or subscribe to premium, if not subscribed yet:\nUPI (India): <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a>\nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
|
1254
1256
|
|
1255
1257
|
reply_markup = default_markup(user=user)
|
1256
1258
|
options = ":".join(selection)
|
@@ -1446,7 +1448,7 @@ def launchScreener(options, user, context, optionChoices, update):
|
|
1446
1448
|
isBasicScanRequest = True
|
1447
1449
|
break
|
1448
1450
|
if not isBasicScanRequest:
|
1449
|
-
responseText = f"Thank you for choosing {scanRequest}!\
|
1451
|
+
responseText = f"Thank you for choosing {scanRequest}!\nThis {'Backtest' if str(scanRequest).startswith('B') else 'Scan'} request is, however, protected and is only available to premium subscribers. It seems like you are not subscribed to the paid/premium subscription to PKScreener.\nPlease checkout all premium options by sending out a request:\n/OTP\nFor basic/unpaid users, you can try out the following:\n/X_0 StockCode1,StockCode2,etc.\n/X_N\n/X_1\n"
|
1450
1452
|
if update is not None and update.message is not None:
|
1451
1453
|
update.message.reply_text(sanitiseTexts(responseText),reply_markup=default_markup(user=user),parse_mode="HTML")
|
1452
1454
|
else:
|
@@ -1462,10 +1464,10 @@ def launchScreener(options, user, context, optionChoices, update):
|
|
1462
1464
|
optionChoices = optionChoices[:-1]
|
1463
1465
|
if str(optionChoices).split("_")[2] == "6" and str(optionChoices).split("_")[3] == "7":
|
1464
1466
|
optionChoices = f"{optionChoices}_3" # Lorenzian Any/All
|
1465
|
-
responseText = f"Thank you for choosing {optionChoices}!\
|
1466
|
-
responseText = f"{responseText}\
|
1467
|
-
responseText = f"{responseText}\
|
1468
|
-
responseText = f"{responseText}\
|
1467
|
+
responseText = f"Thank you for choosing {optionChoices}!\nHere are the results:\nInsights: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Insights_DateSorted.html"
|
1468
|
+
responseText = f"{responseText}\nSummary: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_Summary_StockSorted.html"
|
1469
|
+
responseText = f"{responseText}\nStock-wise: https://pkjmesra.github.io/PKScreener/Backtest-Reports/PKScreener_{optionChoices}_backtest_result_StockSorted.html"
|
1470
|
+
responseText = f"{responseText}\nOther Reports: https://pkjmesra.github.io/PKScreener/BacktestReports.html"
|
1469
1471
|
if update is not None and update.message is not None:
|
1470
1472
|
update.message.reply_text(sanitiseTexts(responseText),reply_markup=default_markup(user=user),parse_mode="HTML")
|
1471
1473
|
else:
|
@@ -1536,7 +1538,7 @@ def BBacktests(update: Update, context: CallbackContext) -> str:
|
|
1536
1538
|
]
|
1537
1539
|
]
|
1538
1540
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
1539
|
-
responseText = "Backtesting NOT implemented yet in this Bot!\
|
1541
|
+
responseText = "Backtesting NOT implemented yet in this Bot!\nYou can use backtesting by downloading the software from https://github.com/pkjmesra/PKScreener/"
|
1540
1542
|
responseText = f"{responseText}\nClick /start if you want to restart the session."
|
1541
1543
|
editMessageText(query=query,editedText=sanitiseTexts(responseText),reply_markup=default_markup(user=user))
|
1542
1544
|
registerUser(user)
|
@@ -1572,7 +1574,7 @@ def end(update: Update, context: CallbackContext) -> str:
|
|
1572
1574
|
"""
|
1573
1575
|
query = update.callback_query
|
1574
1576
|
query.answer()
|
1575
|
-
responseText = "See https://github.com/pkjmesra/PKScreener/ for more details or join https://t.me/PKScreener. \
|
1577
|
+
responseText = "See https://github.com/pkjmesra/PKScreener/ for more details or join https://t.me/PKScreener. \nSee you next time!"
|
1576
1578
|
responseText = f"{responseText}\nClick /start if you want to restart the session."
|
1577
1579
|
editMessageText(query=query,editedText=sanitiseTexts(responseText),reply_markup=default_markup(query.from_user))
|
1578
1580
|
return ConversationHandler.END
|
@@ -1636,9 +1638,9 @@ def error_handler(update: object, context: CallbackContext) -> None:
|
|
1636
1638
|
message = (
|
1637
1639
|
f"An exception was raised while handling an update\n"
|
1638
1640
|
f"<pre>update = {html.escape(json.dumps(update_str, indent=2, ensure_ascii=False))}"
|
1639
|
-
"</pre>\n
|
1640
|
-
f"<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>\n
|
1641
|
-
f"<pre>context.user_data = {html.escape(str(context.user_data))}</pre>\n
|
1641
|
+
"</pre>\n"
|
1642
|
+
f"<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>\n"
|
1643
|
+
f"<pre>context.user_data = {html.escape(str(context.user_data))}</pre>\n"
|
1642
1644
|
f"<pre>{html.escape(tb_string)}</pre>"
|
1643
1645
|
)
|
1644
1646
|
|
@@ -2031,7 +2033,7 @@ def sendRequestSubmitted(optionChoices, update, context):
|
|
2031
2033
|
return
|
2032
2034
|
# Get user that sent /start and log his name
|
2033
2035
|
user = updateCarrier.from_user
|
2034
|
-
menuText = f"Thank you for choosing {optionChoices}. You will receive the notification/results in about 1-2 minutes! \
|
2036
|
+
menuText = f"Thank you for choosing {optionChoices}. You will receive the notification/results in about 1-2 minutes! \nConsider donating to help keep this project going:\nUPI: <a href='https://tinyurl.com/v7h3t233'>PKScreener@APL</a> \nor <a href='https://github.com/sponsors/pkjmesra?frequency=recurring&sponsor=pkjmesra'>sponsor</a>"
|
2035
2037
|
update.message.reply_text(sanitiseTexts(menuText),reply_markup=default_markup(user=user),parse_mode="HTML")
|
2036
2038
|
# help_command(update=update, context=context)
|
2037
2039
|
shareUpdateWithChannel(
|
@@ -2098,7 +2100,7 @@ def help_command(update: Update, context: CallbackContext) -> None:
|
|
2098
2100
|
"""Send a message when the command /help is issued."""
|
2099
2101
|
if update is not None and update.message is not None:
|
2100
2102
|
update.message.reply_text(
|
2101
|
-
sanitiseTexts(f"You can begin by typing in /start (Recommended) and hit send!\nOR\nChoose an option:\n{cmdText}\
|
2103
|
+
sanitiseTexts(f"You can begin by typing in /start (Recommended) and hit send!\nOR\nChoose an option:\n{cmdText}\nWe recommend you start by clicking on this /start"),
|
2102
2104
|
reply_markup=default_markup(user=user),parse_mode="HTML"
|
2103
2105
|
) # \n\nThis bot restarts every hour starting at 5:30am IST until 10:30pm IST to keep it running on free servers. If it does not respond, please try again in a minutes to avoid the restart duration!
|
2104
2106
|
query = update.message
|
@@ -19,7 +19,7 @@ pandas-ta-classic #>=0.4.67b0
|
|
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.20250908.
|
22
|
+
PKDevTools>=0.13.20250908.303
|
23
23
|
PKNSETools>=0.1.20250122.139
|
24
24
|
Pyarrow #>=17.0.0
|
25
25
|
pyppeteer #>=2.0.0
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pkscreener
|
3
|
-
Version: 0.46.20250908.
|
3
|
+
Version: 0.46.20250908.767
|
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.20250908.
|
6
|
+
Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250908.767.zip
|
7
7
|
Author: pkjmesra
|
8
8
|
Author-email: pkjmesra@gmail.com
|
9
9
|
License: OSI Approved (MIT)
|
@@ -33,7 +33,7 @@ Requires-Dist: pandas
|
|
33
33
|
Requires-Dist: pandas-ta-classic
|
34
34
|
Requires-Dist: pefile <2024.8.26,>=2023.2.7
|
35
35
|
Requires-Dist: Pillow
|
36
|
-
Requires-Dist: PKDevTools >=0.13.20250908.
|
36
|
+
Requires-Dist: PKDevTools >=0.13.20250908.303
|
37
37
|
Requires-Dist: PKNSETools >=0.1.20250122.139
|
38
38
|
Requires-Dist: Pyarrow
|
39
39
|
Requires-Dist: pyppeteer
|
@@ -384,15 +384,15 @@ If you are a 3rd year or final year engineering graduate or pursuing masters in
|
|
384
384
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
385
385
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
386
386
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
387
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
387
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli.exe
|
388
388
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
389
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
389
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_x64.bin
|
390
390
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
391
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
391
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_arm64.bin
|
392
392
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
393
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
393
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_x64.run
|
394
394
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
395
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
395
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250908.766/pkscreenercli_arm64.run
|
396
396
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
397
397
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
398
398
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -0,0 +1,58 @@
|
|
1
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/LICENSE-Others.txt,sha256=GvIyMMu6lIBXiJP_9wgmqMWotJAgqoYJbGNjprIwRTg,271838
|
3
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/README.txt,sha256=JaQhJtYa9IVPPNGw8MJWTUZGLPJCeWtBWiAYPGQbVL0,33153
|
6
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/__init__.py,sha256=n6lLvxcQaR3LyqttsXiUEwtlpL3MmQjuZS3zhvyG3Xc,1651
|
7
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/globals.py,sha256=cfJ9Bd-J2tZG6ZmklVonz0GVmjFX2z_8PzMWrPaaNZw,247246
|
9
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/pkscreenerbot.py,sha256=bPUJN68nI__UQK77Bh2mYX3TBPEEK_MBC8hthRDWxZA,118148
|
11
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/pkscreenercli.py,sha256=BSzG5Yr3JfPQpxlT9qMNJplLTbBYcadW0O9UE7O9EBI,58801
|
12
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/requirements.txt,sha256=jDlHXl7e51B0Cx4OjJsnlqw7z6r5-FMfhWeORK0Gj70,1503
|
13
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/AssetsManager.py,sha256=Q2X3UXiyyYPjM6ObXG9nnT4HJOqhG9nkoFcqwT_NJfE,32132
|
15
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Backtest.py,sha256=BaNHaaraXD0SG7WfJVc2kj5XuFEroQX8nm-GhZt5g8E,10530
|
16
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=8wo6rTXJ1C3im27yzNRgTTKk8FvZpJFzDC6fesfrkCE,17074
|
19
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ConfigManager.py,sha256=sfm_5maWIL5-pfOYcQp-hd11CAo-L3e5UX8I0aPn6PA,54406
|
21
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=WgPLO2gYJhnTLXm6yu1z9pLJcGy_fNCGBkwewrrunUo,12181
|
23
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Fetcher.py,sha256=2qlLvCfMAIsl1b-j6Mr0qRKq5d5vhqh8bRCJwws7fNE,16591
|
24
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ImageUtility.py,sha256=h1h9fiJJV6Mkdo0kfrEEbQPwgXH0j4fsczVh_Uky5mA,37032
|
26
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=p12ZYGhfK__ddIwbu1_VZ1CSptba8ZHZj5dcx5IL9Tk,22141
|
27
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/MarketStatus.py,sha256=ZhNi3LUyIOtOwWIoidI0bxidDlYJAKymMyQb7oDPClA,3786
|
28
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/MenuOptions.py,sha256=abK_ZsKg8pND_5ZVdLsY4sjaVerButVsWsHSdWdjPGM,64558
|
29
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
|
32
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=YgSKGzdMkVGtapK_7A0AUPZZ7L9cLV3Yz-X7TgZpu1U,34157
|
35
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=QHZq5flm4N5_uzVxjiuJqnB_5PL89MEpXAcxVCIZhNg,26795
|
37
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
|
42
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Pktalib.py,sha256=PkNDMbRZc4kf5f0SZg_mn6TWo4iIjVXqmr9SWFE4aEs,33474
|
43
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=tk7gGheJRxYLA54qCRZSs0uBgGZFN0Oh5NPSXYcf7Z4,48339
|
45
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=xzqBdYuTtni9-jOp8rS-MV1rVGdpw67ygX_gUzsmu88,221864
|
46
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/StockScreener.py,sha256=4LgU-LbTfkwUDhi9yRAT2imN3CXt3JVdwXXzkKG2QII,68004
|
47
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/Utility.py,sha256=FAioF11ssWAl3yzhsXZQBmykj5No8U6ii9DZEaazUHQ,13886
|
50
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
|
51
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/__init__.py,sha256=wAJWhbWykjMoWlg3mvLeoHBQT3IhFkdemogZE61NjIE,28
|
52
|
+
pkscreener-0.46.20250908.767.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
+
pkscreener-0.46.20250908.767.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
+
pkscreener-0.46.20250908.767.dist-info/METADATA,sha256=znITCMawx1QcfLbxZS3Vw4M63avtAcLD7k62_hTLrLU,34884
|
55
|
+
pkscreener-0.46.20250908.767.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
|
56
|
+
pkscreener-0.46.20250908.767.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
+
pkscreener-0.46.20250908.767.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
+
pkscreener-0.46.20250908.767.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.46.20250908.764'
|
@@ -1,58 +0,0 @@
|
|
1
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/LICENSE-Others.txt,sha256=GvIyMMu6lIBXiJP_9wgmqMWotJAgqoYJbGNjprIwRTg,271838
|
3
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/README.txt,sha256=Jv6r_UyWzEVtpv0xAwt0Z43qlEmd8E3wuVLhk33jzBQ,33153
|
6
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/__init__.py,sha256=n6lLvxcQaR3LyqttsXiUEwtlpL3MmQjuZS3zhvyG3Xc,1651
|
7
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/globals.py,sha256=Qf-pUQ5ylzMoWRpQBP1CpRml_-rwoyyEn0kqDebcMOo,246321
|
9
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreenerbot.py,sha256=rDwe92q42lSYltE_2KBjF2wSMFhj9SXiEty-npx3D_E,118037
|
11
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/pkscreenercli.py,sha256=BSzG5Yr3JfPQpxlT9qMNJplLTbBYcadW0O9UE7O9EBI,58801
|
12
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/requirements.txt,sha256=7Q3U8pDNfLtnNamrawD8mVD811E5OoVVk5ENHxnHNGg,1503
|
13
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/AssetsManager.py,sha256=OcwZPOWRMMhL8gzkEC8TMyanHQBEVweUV7S49s0AJaY,32133
|
15
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Backtest.py,sha256=BaNHaaraXD0SG7WfJVc2kj5XuFEroQX8nm-GhZt5g8E,10530
|
16
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=8wo6rTXJ1C3im27yzNRgTTKk8FvZpJFzDC6fesfrkCE,17074
|
19
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConfigManager.py,sha256=sfm_5maWIL5-pfOYcQp-hd11CAo-L3e5UX8I0aPn6PA,54406
|
21
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=WgPLO2gYJhnTLXm6yu1z9pLJcGy_fNCGBkwewrrunUo,12181
|
23
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Fetcher.py,sha256=2qlLvCfMAIsl1b-j6Mr0qRKq5d5vhqh8bRCJwws7fNE,16591
|
24
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ImageUtility.py,sha256=h1h9fiJJV6Mkdo0kfrEEbQPwgXH0j4fsczVh_Uky5mA,37032
|
26
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=p12ZYGhfK__ddIwbu1_VZ1CSptba8ZHZj5dcx5IL9Tk,22141
|
27
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MarketStatus.py,sha256=ZhNi3LUyIOtOwWIoidI0bxidDlYJAKymMyQb7oDPClA,3786
|
28
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/MenuOptions.py,sha256=abK_ZsKg8pND_5ZVdLsY4sjaVerButVsWsHSdWdjPGM,64558
|
29
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=qLXibEx18kMjZno7EVhyZBblnXWWo1bC2Kjrd8OskgE,7526
|
32
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=YgSKGzdMkVGtapK_7A0AUPZZ7L9cLV3Yz-X7TgZpu1U,34157
|
35
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=QHZq5flm4N5_uzVxjiuJqnB_5PL89MEpXAcxVCIZhNg,26795
|
37
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=SIEpkMscmUav7dXDcRUDZmlb5LeRo6b-Tx-h15ED_88,11589
|
42
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Pktalib.py,sha256=PkNDMbRZc4kf5f0SZg_mn6TWo4iIjVXqmr9SWFE4aEs,33474
|
43
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=tk7gGheJRxYLA54qCRZSs0uBgGZFN0Oh5NPSXYcf7Z4,48339
|
45
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=xzqBdYuTtni9-jOp8rS-MV1rVGdpw67ygX_gUzsmu88,221864
|
46
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/StockScreener.py,sha256=4LgU-LbTfkwUDhi9yRAT2imN3CXt3JVdwXXzkKG2QII,68004
|
47
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/Utility.py,sha256=FAioF11ssWAl3yzhsXZQBmykj5No8U6ii9DZEaazUHQ,13886
|
50
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=YRUiZSq83SEx2qB0wTBDE4KFaYqEz1Qu4FSCAzl6xzU,5663
|
51
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/__init__.py,sha256=DLvsitDgYNK7jhT7weGs9Kmmk2-jmZMYsudR-fknRl4,28
|
52
|
-
pkscreener-0.46.20250908.764.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
-
pkscreener-0.46.20250908.764.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
-
pkscreener-0.46.20250908.764.dist-info/METADATA,sha256=cRi15BzvFEx7hQd_9shwv8usEY-Q5lkhTnaLxw7duw8,34884
|
55
|
-
pkscreener-0.46.20250908.764.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
|
56
|
-
pkscreener-0.46.20250908.764.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
-
pkscreener-0.46.20250908.764.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
-
pkscreener-0.46.20250908.764.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250908.764.dist-info → pkscreener-0.46.20250908.767.dist-info}/top_level.txt
RENAMED
File without changes
|