pkscreener 0.46.20250214.718__cp310-cp310-macosx_13_0_arm64.whl → 0.46.20250218.720__cp310-cp310-macosx_13_0_arm64.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.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/README.txt +5 -5
- pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreenerbot.py +128 -23
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/requirements.txt +1 -1
- {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/METADATA +8 -8
- pkscreener-0.46.20250218.720.dist-info/RECORD +58 -0
- pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/__init__.py +0 -1
- pkscreener-0.46.20250214.718.dist-info/RECORD +0 -58
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/AssetsManager.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MarketMonitor.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PKUserRegistration.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Pktalib.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/ScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/Utility.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/globals.py +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250214.718.data → pkscreener-0.46.20250218.720.data}/purelib/pkscreener/pkscreenercli.py +0 -0
- {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/LICENSE +0 -0
- {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/WHEEL +0 -0
- {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/entry_points.txt +0 -0
- {pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.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.20250218.719/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.20250218.719/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.20250218.719/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.20250218.719/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.20250218.719/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
|
@@ -0,0 +1 @@
|
|
1
|
+
VERSION='0.46.20250218.720'
|
@@ -165,6 +165,7 @@ PIPED_SCAN_SKIP_COMMAND_MENUS =["2", "3", "M", "0", "4"]
|
|
165
165
|
PIPED_SCAN_SKIP_INDEX_MENUS =["W","N","E","S","0","Z","M","15"]
|
166
166
|
UNSUPPORTED_COMMAND_MENUS =["22","M","Z","0",str(MAX_MENU_OPTION)]
|
167
167
|
SUPPORTED_COMMAND_MENUS = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45"]
|
168
|
+
user_states = {}
|
168
169
|
|
169
170
|
def registerUser(user,forceFetch=False):
|
170
171
|
otpValue, subsModel,subsValidity,alertUser = 0,0,None,None
|
@@ -213,6 +214,32 @@ def sanitiseTexts(text):
|
|
213
214
|
return text[:MAX_MSG_LENGTH]
|
214
215
|
return text
|
215
216
|
|
217
|
+
def updateSubscription(userid,subvalue,subtype = "add"):
|
218
|
+
workflow_name = "w18-workflow-sub-data.yml"
|
219
|
+
branch = "main"
|
220
|
+
updatedResults = None
|
221
|
+
try:
|
222
|
+
workflow_postData = (
|
223
|
+
'{"ref":"'
|
224
|
+
+ branch
|
225
|
+
+ '","inputs":{"userid":"'
|
226
|
+
+ f"{userid}"
|
227
|
+
+ '","subtype":"'
|
228
|
+
+ f"{subtype}"
|
229
|
+
+ '","subvalue":"'
|
230
|
+
+ f"{subvalue}"
|
231
|
+
+ '"}}'
|
232
|
+
)
|
233
|
+
ghp_token = PKEnvironment().allSecrets["PKG"]
|
234
|
+
resp = run_workflow(workflowType="O",repo="PKScreener",owner="pkjmesra",branch=branch,ghp_token=ghp_token,workflow_name=workflow_name,workflow_postData=workflow_postData)
|
235
|
+
if resp is not None and resp.status_code != 204:
|
236
|
+
updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
|
237
|
+
except Exception as e:
|
238
|
+
logger.error(e)
|
239
|
+
updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
|
240
|
+
pass
|
241
|
+
return updatedResults
|
242
|
+
|
216
243
|
def matchUTR(update: Update, context: CallbackContext) -> str:
|
217
244
|
global bot_available
|
218
245
|
updateCarrier = None
|
@@ -250,27 +277,10 @@ def matchUTR(update: Update, context: CallbackContext) -> str:
|
|
250
277
|
matchedTran = PKGmailReader.matchUTR(utr=args[0])
|
251
278
|
if matchedTran is not None:
|
252
279
|
updatedResults = f"We have found the following transaction for the provided UTR:\n{matchedTran}\n\nYour subscription is being enabled soon!\n\nPlease check with /OTP in the next couple of minutes!\n\nThank you for trusting PKScreener!"
|
253
|
-
workflow_name = "w18-workflow-sub-data.yml"
|
254
|
-
subtype = "add"
|
255
|
-
userid = user.id
|
256
|
-
branch = "main"
|
257
280
|
try:
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
+ branch
|
262
|
-
+ '","inputs":{"userid":"'
|
263
|
-
+ f"{userid}"
|
264
|
-
+ '","subtype":"'
|
265
|
-
+ f"{subtype}"
|
266
|
-
+ '","subvalue":"'
|
267
|
-
+ f"{subvalue}"
|
268
|
-
+ '"}}'
|
269
|
-
)
|
270
|
-
ghp_token = PKEnvironment().allSecrets["PKG"]
|
271
|
-
resp = run_workflow(workflowType="O",repo="PKScreener",owner="pkjmesra",branch=branch,ghp_token=ghp_token,workflow_name=workflow_name,workflow_postData=workflow_postData)
|
272
|
-
if resp is not None and resp.status_code != 204:
|
273
|
-
updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
|
281
|
+
results = updateSubscription(user.id,int(float(matchedTran.get("amountPaid"))))
|
282
|
+
if results is not None:
|
283
|
+
updatedResults = results
|
274
284
|
except Exception as e:
|
275
285
|
logger.error(e)
|
276
286
|
updatedResults = f"{updatedResults} Uh oh! We ran into a problem enabling your subscription.\nPlease reach out to @ItsOnlyPK to resolve."
|
@@ -1271,6 +1281,61 @@ def Level2(update: Update, context: CallbackContext) -> str:
|
|
1271
1281
|
registerUser(user)
|
1272
1282
|
return START_ROUTES
|
1273
1283
|
|
1284
|
+
def handleHousekeeping(update: Update, context: CallbackContext) -> str:
|
1285
|
+
updateCarrier = None
|
1286
|
+
menuText = "Not implemented yet..."
|
1287
|
+
shouldSendUpdate = False
|
1288
|
+
if update is None:
|
1289
|
+
return
|
1290
|
+
else:
|
1291
|
+
if update.callback_query is not None:
|
1292
|
+
updateCarrier = update.callback_query
|
1293
|
+
if update.message is not None:
|
1294
|
+
updateCarrier = update.message
|
1295
|
+
if updateCarrier is None:
|
1296
|
+
return
|
1297
|
+
# Get user that sent /start and log his name
|
1298
|
+
user = updateCarrier.from_user
|
1299
|
+
query = update.callback_query
|
1300
|
+
query.answer()
|
1301
|
+
preSelection = (query.data.upper().replace("C", ""))
|
1302
|
+
selection = preSelection.split("_")[1]
|
1303
|
+
if query is None:
|
1304
|
+
start(update, context)
|
1305
|
+
return START_ROUTES
|
1306
|
+
reply_markup = default_markup(user)
|
1307
|
+
dbMgr = DBManager()
|
1308
|
+
if selection == "GAU":
|
1309
|
+
activeUsers = dbMgr.getUsers(fieldName="userId")
|
1310
|
+
if activeUsers is not None:
|
1311
|
+
menuText = f"Number of all registered users in the DB: {len(activeUsers)}"
|
1312
|
+
elif selection == "GAP":
|
1313
|
+
payingUsers = dbMgr.getPayingUsers()
|
1314
|
+
if payingUsers is not None and len(payingUsers) > 0:
|
1315
|
+
menuText = "Here are all the paying users:"
|
1316
|
+
menuText = f"{menuText}\n{"UserID".ljust(10,'#')} : {"Subs.".ljust(5,'#')} : {"Bal.".ljust(5,'#')}"
|
1317
|
+
for payingUser in payingUsers:
|
1318
|
+
menuText = f"{menuText}\n{str(payingUser.userid).ljust(10,'#')} : {str(payingUser.subscriptionmodel).ljust(5,'#')} : {str(payingUser.balance).ljust(5,'#')}"
|
1319
|
+
elif selection == "UUB":
|
1320
|
+
user_states[user.id] = f"{selection}_awaiting_input_1" # Set user state
|
1321
|
+
menuText = "Please enter a userID for whom to update balance:"
|
1322
|
+
elif selection in ["EUS", "DUS"]:
|
1323
|
+
user_states[user.id] = f"{selection}_awaiting_input_1" # Set user state
|
1324
|
+
menuText = "Please enter a userID for whom to update subscription:"
|
1325
|
+
elif selection == "GAS":
|
1326
|
+
scanners = dbMgr.scannerJobsWithActiveUsers()
|
1327
|
+
if scanners is not None:
|
1328
|
+
if len(scanners) > 0:
|
1329
|
+
menuText = f"Number of all scans running today in the DB: {len(scanners)}"
|
1330
|
+
for scanner in scanners:
|
1331
|
+
scanID = scanner.scannerId
|
1332
|
+
subUsers = ", ".join(scanner.userIds)
|
1333
|
+
menuText = f"{menuText}\nScanner: {scanID} : Users: {subUsers}"
|
1334
|
+
else:
|
1335
|
+
menuText = "No users are subscribed for alerts today!"
|
1336
|
+
editMessageText(query=query,editedText=menuText,reply_markup=reply_markup)
|
1337
|
+
return START_ROUTES
|
1338
|
+
|
1274
1339
|
def default_markup(user=None,monitorIndex=0):
|
1275
1340
|
mns = m0.renderForMenu(selectedMenu=None,
|
1276
1341
|
skip=TOP_LEVEL_SCANNER_SKIP_MENUS[:len(TOP_LEVEL_SCANNER_SKIP_MENUS)-1],
|
@@ -1279,14 +1344,22 @@ def default_markup(user=None,monitorIndex=0):
|
|
1279
1344
|
)
|
1280
1345
|
if (PKDateUtilities.isTradingTime() and not PKDateUtilities.isTodayHoliday()[0]) or ("PKDevTools_Default_Log_Level" in os.environ.keys()) or sys.argv[0].endswith(".py"):
|
1281
1346
|
mns.append(menu().create(f"MI_{monitorIndex}", "👩💻 🚀 Intraday Monitor", 2))
|
1347
|
+
hskMenus = []
|
1282
1348
|
if user is not None and user.username == OWNER_USER:
|
1283
|
-
|
1284
|
-
|
1349
|
+
hskMenus.append(menu().create(f"DV_0", ("✅ Enable Logging" if not configManager.logsEnabled else "🚫 Disable Logging"), 2))
|
1350
|
+
hskMenus.append(menu().create(f"DV_1", "🔄 Restart Bot", 2))
|
1351
|
+
hskMenus.append(menu().create(f"HSK_GAU", "Get Active Users", 2))
|
1352
|
+
hskMenus.append(menu().create(f"HSK_GAP", "Get Paying Users", 2))
|
1353
|
+
hskMenus.append(menu().create(f"HSK_GAS", "Get Alerting Users", 2))
|
1354
|
+
hskMenus.append(menu().create(f"HSK_EUS", "Enable User Subs", 2))
|
1355
|
+
hskMenus.append(menu().create(f"HSK_DUS", "Disable User Subs", 2))
|
1356
|
+
hskMenus.append(menu().create(f"HSK_UUB", "Update User Balance", 2))
|
1357
|
+
|
1285
1358
|
keyboard = []
|
1286
1359
|
inlineMenus = []
|
1287
1360
|
lastRowMenus = []
|
1288
1361
|
rowIndex = 0
|
1289
|
-
iconDict = {"X":"🕵️♂️ 🔍 ","B":"📈 🎯 ","P":"🧨 💥 ","MI":"","DV":"","VS":"🔔 📣 ","start":"🟢 🏁 "}
|
1362
|
+
iconDict = {"X":"🕵️♂️ 🔍 ","B":"📈 🎯 ","P":"🧨 💥 ","MI":"","DV":"","VS":"🔔 📣 ","start":"🟢 🏁 ", "HS":"🕵️♂️ "}
|
1290
1363
|
for mnu in mns:
|
1291
1364
|
if mnu.menuKey[0:2] in TOP_LEVEL_SCANNER_MENUS:
|
1292
1365
|
rowIndex +=1
|
@@ -1314,6 +1387,21 @@ def default_markup(user=None,monitorIndex=0):
|
|
1314
1387
|
if len(inlineMenus) > 0:
|
1315
1388
|
keyboard.append(inlineMenus)
|
1316
1389
|
keyboard.append(lastRowMenus)
|
1390
|
+
rowIndex = 0
|
1391
|
+
inlineMenus = []
|
1392
|
+
for hskMenu in hskMenus:
|
1393
|
+
rowIndex +=1
|
1394
|
+
inlineMenus.append(
|
1395
|
+
InlineKeyboardButton(
|
1396
|
+
iconDict.get(str(hskMenu.menuKey[0:2])) + hskMenu.menuText.split("(")[0],
|
1397
|
+
callback_data="C" + str(hskMenu.menuKey),
|
1398
|
+
)
|
1399
|
+
)
|
1400
|
+
if rowIndex % 2 == 0:
|
1401
|
+
keyboard.append(inlineMenus)
|
1402
|
+
inlineMenus = []
|
1403
|
+
if len(inlineMenus) > 0:
|
1404
|
+
keyboard.append(inlineMenus)
|
1317
1405
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
1318
1406
|
return reply_markup
|
1319
1407
|
|
@@ -1965,6 +2053,22 @@ def help_command(update: Update, context: CallbackContext) -> None:
|
|
1965
2053
|
# Get user that sent /start and log his name
|
1966
2054
|
user = updateCarrier.from_user
|
1967
2055
|
|
2056
|
+
if user.id in user_states:
|
2057
|
+
if "_awaiting_input_1" in user_states[user.id]:
|
2058
|
+
hskCmd = user_states[user.id].split("_")[0]
|
2059
|
+
user_states[user.id] = f"{hskCmd}_awaiting_input_2_{updateCarrier.text}"
|
2060
|
+
update.message.reply_text(f"{'Balance' if hskCmd == 'UUB' else 'Subscription'} to be updated for entered userID: {updateCarrier.text} ✅\nPlease enter the {'Balance' if hskCmd == 'UUB' else 'Subscription'} value:")
|
2061
|
+
return START_ROUTES
|
2062
|
+
elif "_awaiting_input_2_" in user_states[user.id]:
|
2063
|
+
hskCmd = user_states[user.id].split("_")[0]
|
2064
|
+
userID = user_states[user.id].split("_")[-1]
|
2065
|
+
results = updateSubscription(int(userID),float(updateCarrier.text),subtype="remove" if hskCmd=="DUS" else "add")
|
2066
|
+
if results is None:
|
2067
|
+
update.message.reply_text(f"✅ {'Balance' if hskCmd == 'UUB' else 'Subscription'} update for userID: {userID} with balance value: {updateCarrier.text} triggered!\nPlease check with Get Paying users in a few minutes!")
|
2068
|
+
# Clear user state
|
2069
|
+
del user_states[user.id]
|
2070
|
+
return START_ROUTES
|
2071
|
+
|
1968
2072
|
cmds = m0.renderForMenu(
|
1969
2073
|
selectedMenu=None,
|
1970
2074
|
skip=TOP_LEVEL_SCANNER_SKIP_MENUS[:len(TOP_LEVEL_SCANNER_SKIP_MENUS)-1],
|
@@ -2184,6 +2288,7 @@ def runpkscreenerbot(availability=True) -> None:
|
|
2184
2288
|
CallbackQueryHandler(subscribeToScannerAlerts, pattern="^" + str("SUB_")),
|
2185
2289
|
CallbackQueryHandler(viewSubscriptionOptions, pattern="^" + str("VS_")),
|
2186
2290
|
CallbackQueryHandler(cancelAlertSubscription, pattern="^" + str("CAN_")),
|
2291
|
+
CallbackQueryHandler(handleHousekeeping, pattern="^" + str("CHSK_")),
|
2187
2292
|
# CallbackQueryHandler(Level2, pattern="^" + str("CG_")),
|
2188
2293
|
CallbackQueryHandler(end, pattern="^" + str("CZ") + "$"),
|
2189
2294
|
CallbackQueryHandler(start, pattern="^"),
|
@@ -19,7 +19,7 @@ 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.236
|
23
23
|
PKNSETools>=0.1.20250122.138
|
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.
|
3
|
+
Version: 0.46.20250218.720
|
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.20250218.720.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
|
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.236
|
37
37
|
Requires-Dist: PKNSETools >=0.1.20250122.138
|
38
38
|
Requires-Dist: Pyarrow
|
39
39
|
Requires-Dist: pyppeteer
|
@@ -380,15 +380,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
380
380
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
381
381
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
382
382
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
383
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
383
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli.exe
|
384
384
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
385
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
385
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.bin
|
386
386
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
387
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
387
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.bin
|
388
388
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
389
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
389
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_x64.run
|
390
390
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
391
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
391
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250218.719/pkscreenercli_arm64.run
|
392
392
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
393
393
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
394
394
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -0,0 +1,58 @@
|
|
1
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/README.txt,sha256=A2XdEU8Ft9FVlQrxfdfBKdGOl_WSSy09xc-d9gN6kvw,32701
|
6
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
|
9
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreenerbot.py,sha256=GT4ckZVmvfBsPLT0s_BsaUr6MtOat4ex-NAfUuT1_Ns,116824
|
11
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
|
12
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/requirements.txt,sha256=dQ-B6I7-ueXFLeOmUgBNt99O8UaeNOFvW8-VRvxlx4M,1457
|
13
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
|
15
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
|
21
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
|
23
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
|
24
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=GQOPLuUhgcrnVa0mI8ZvXqQ4vPFW00FHW_vMfICnko8,22079
|
27
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
|
32
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
|
35
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
|
37
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=ZbnPzgvT5Je9X0Dm6bewSp8u7Fj_szNucaYnit_AtCg,11465
|
42
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
|
43
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=LteoSl8r4mI2GMvVKAmdmzMe-Axy3jeyNAaIsgp48s4,221101
|
46
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
|
47
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
|
50
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
|
51
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/__init__.py,sha256=XwZ1OxXHV2qGnSYbGH2mvqT9cfWQgruDxZrXhIMYTNs,28
|
52
|
+
pkscreener-0.46.20250218.720.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
+
pkscreener-0.46.20250218.720.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
+
pkscreener-0.46.20250218.720.dist-info/METADATA,sha256=707aGSws1RH5hirb6FzqBBsPf85FVY-SEcfboiTtG3A,34391
|
55
|
+
pkscreener-0.46.20250218.720.dist-info/WHEEL,sha256=e371LA3b7MNA0F-VeyIqNDak9eYypgZ6oD_mcY6JoTQ,110
|
56
|
+
pkscreener-0.46.20250218.720.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
+
pkscreener-0.46.20250218.720.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
+
pkscreener-0.46.20250218.720.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.46.20250214.718'
|
@@ -1,58 +0,0 @@
|
|
1
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/README.txt,sha256=zaXpAy3bI9KFJQt0v_98G0_OTVBMu2KZHnRLkiyg4Bg,32701
|
6
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
|
9
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreenerbot.py,sha256=br4hCHdOYqck0nO4FS2ApQ43wH8DydAEFja0ExOovIM,111801
|
11
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
|
12
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/requirements.txt,sha256=FN4W519f9djXoatr7VpWIbrwQUMmHvMvXO54_0SG2w8,1457
|
13
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
|
15
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
|
21
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
|
23
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
|
24
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=GQOPLuUhgcrnVa0mI8ZvXqQ4vPFW00FHW_vMfICnko8,22079
|
27
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
|
32
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
|
35
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
|
37
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=ZbnPzgvT5Je9X0Dm6bewSp8u7Fj_szNucaYnit_AtCg,11465
|
42
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
|
43
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=LteoSl8r4mI2GMvVKAmdmzMe-Axy3jeyNAaIsgp48s4,221101
|
46
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
|
47
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
|
50
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
|
51
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/__init__.py,sha256=K7IWpgyLVwEQTUhJXK35poUNOFheF_w5e4jBdM113EY,28
|
52
|
-
pkscreener-0.46.20250214.718.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
-
pkscreener-0.46.20250214.718.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
-
pkscreener-0.46.20250214.718.dist-info/METADATA,sha256=r7JHWShxiYi0-KH5UEWwulE8T6RJiffn5DeWquGJm8o,34391
|
55
|
-
pkscreener-0.46.20250214.718.dist-info/WHEEL,sha256=e371LA3b7MNA0F-VeyIqNDak9eYypgZ6oD_mcY6JoTQ,110
|
56
|
-
pkscreener-0.46.20250214.718.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
-
pkscreener-0.46.20250214.718.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
-
pkscreener-0.46.20250214.718.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
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250214.718.dist-info → pkscreener-0.46.20250218.720.dist-info}/top_level.txt
RENAMED
File without changes
|