pkscreener 0.46.20250221.731__tar.gz → 0.46.20250222.733__tar.gz
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.20250221.731 → pkscreener-0.46.20250222.733}/PKG-INFO +8 -8
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/README.md +5 -5
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/README.txt +5 -5
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MarketMonitor.py +1 -1
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKAnalytics.py +15 -3
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKScanRunner.py +1 -1
- pkscreener-0.46.20250222.733/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/globals.py +10 -4
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/pkscreenerbot.py +1 -1
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/pkscreenercli.py +3 -1
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/requirements.txt +1 -1
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/PKG-INFO +8 -8
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/requires.txt +1 -1
- pkscreener-0.46.20250221.731/pkscreener/classes/__init__.py +0 -1
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/LICENSE +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/AssetsManager.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ConfigManager.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Fetcher.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKUserRegistration.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Pktalib.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Utility.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/SOURCES.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/dependency_links.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/entry_points.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/not-zip-safe +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/top_level.txt +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/setup.cfg +0 -0
- {pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/setup.py +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: pkscreener
|
3
|
-
Version: 0.46.
|
3
|
+
Version: 0.46.20250222.733
|
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.20250222.733.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.240
|
37
37
|
Requires-Dist: PKNSETools>=0.1.20250122.138
|
38
38
|
Requires-Dist: Pyarrow
|
39
39
|
Requires-Dist: pyppeteer
|
@@ -392,15 +392,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
392
392
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
393
393
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
394
394
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
395
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
395
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli.exe
|
396
396
|
[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.
|
397
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.bin
|
398
398
|
[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.
|
399
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.bin
|
400
400
|
[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.
|
401
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.run
|
402
402
|
[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.
|
403
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.run
|
404
404
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
405
405
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
406
406
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -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.20250222.732/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.20250222.732/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.20250222.732/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.20250222.732/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.20250222.732/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
|
@@ -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.20250222.732/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.20250222.732/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.20250222.732/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.20250222.732/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.20250222.732/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
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MarketMonitor.py
RENAMED
@@ -114,7 +114,7 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
114
114
|
prevOutput_results = results_df[~results_df.index.duplicated(keep='first')]
|
115
115
|
prevOutput_results = prevOutput_results.index
|
116
116
|
prevOutput_results = ",".join(prevOutput_results)
|
117
|
-
if len(self.monitorResultStocks.keys()) > self.monitorIndex and len(self.monitorResultStocks[str(self.monitorIndex)]) > 0 and prevOutput_results == "NONE":
|
117
|
+
if len(self.monitorResultStocks.keys()) > self.monitorIndex and str(self.monitorIndex) in self.monitorResultStocks.keys() and len(self.monitorResultStocks[str(self.monitorIndex)]) > 0 and prevOutput_results == "NONE":
|
118
118
|
prevOutput_results = self.monitorResultStocks[str(self.monitorIndex)]
|
119
119
|
addedStocks = list(set(prevOutput_results.split(',')) - set(lastSavedResults)) # Elements in new df but not in the saved df
|
120
120
|
if len(self.alertStocks) != len(addedStocks) and len(addedStocks) > 0:
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKAnalytics.py
RENAMED
@@ -25,6 +25,7 @@
|
|
25
25
|
"""
|
26
26
|
|
27
27
|
import os
|
28
|
+
import sys
|
28
29
|
# import base64
|
29
30
|
from sys import platform
|
30
31
|
import platform
|
@@ -41,7 +42,7 @@ from PKDevTools.classes.Singleton import SingletonType, SingletonMixin
|
|
41
42
|
from PKDevTools.classes.pubsub.publisher import PKUserService
|
42
43
|
from PKDevTools.classes.pubsub.subscriber import notification_service
|
43
44
|
from pkscreener.classes import VERSION
|
44
|
-
|
45
|
+
from pkscreener.classes.ConfigManager import tools, parser
|
45
46
|
class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
|
46
47
|
def __init__(self):
|
47
48
|
super(PKAnalyticsService, self).__init__()
|
@@ -52,9 +53,14 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
|
|
52
53
|
self.app_version = VERSION
|
53
54
|
self.start_time = time.time()
|
54
55
|
self.isRunner = "RUNNER" in os.environ.keys()
|
56
|
+
self.onefile = getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
|
57
|
+
self.configManager = tools()
|
58
|
+
self.configManager.getConfig(parser)
|
55
59
|
|
56
60
|
def collectMetrics(self,user=None):
|
57
61
|
try:
|
62
|
+
if not self.configManager.enableUsageAnalytics:
|
63
|
+
return
|
58
64
|
self.userName = self.getUserName()
|
59
65
|
metrics = self.getApproxLocationInfo()
|
60
66
|
self.locationInfo = metrics
|
@@ -92,13 +98,19 @@ class PKAnalyticsService(SingletonMixin, metaclass=SingletonType):
|
|
92
98
|
return data
|
93
99
|
|
94
100
|
def send_event(self,event_name,params={}):
|
101
|
+
if not self.configManager.enableUsageAnalytics:
|
102
|
+
return
|
103
|
+
if isinstance(self.locationInfo,str):
|
104
|
+
self.collectMetrics()
|
95
105
|
event_params = {
|
96
|
-
"user_id": self.
|
106
|
+
"user_id": self.username,
|
97
107
|
"os": self.os,
|
98
108
|
"os_version": self.os_version,
|
99
109
|
"app_version": self.app_version,
|
100
110
|
"elapsed_time": str(time.time() - self.start_time),
|
101
|
-
"
|
111
|
+
"is_runner": self.isRunner,
|
112
|
+
"is_container": str(os.environ.get("PKSCREENER_DOCKER", "")).lower() in ("yes", "y", "on", "true", "1"),
|
113
|
+
"one_file_bundle": self.onefile
|
102
114
|
}
|
103
115
|
if len(params) > 0:
|
104
116
|
for key in params:
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKScanRunner.py
RENAMED
@@ -412,7 +412,7 @@ class PKScanRunner:
|
|
412
412
|
cleanup_on_sigterm()
|
413
413
|
OutputControls().printOutput(
|
414
414
|
colorText.FAIL
|
415
|
-
+ f"[+] Using Period:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.period}{colorText.END}{colorText.FAIL} and Duration:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.duration}{colorText.END}{colorText.FAIL} for scan! You can change this in user config."
|
415
|
+
+ f"\n [+] Using Period:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.period}{colorText.END}{colorText.FAIL} and Duration:{colorText.END}{colorText.GREEN}{PKScanRunner.configManager.duration}{colorText.END}{colorText.FAIL} for scan! You can change this in user config."
|
416
416
|
+ colorText.END
|
417
417
|
)
|
418
418
|
start_time = time.time()
|
@@ -0,0 +1 @@
|
|
1
|
+
VERSION='0.46.20250222.733'
|
@@ -625,6 +625,7 @@ def initPostLevel0Execution(
|
|
625
625
|
str(indexOption).upper() in ["S", "E", "W"]:
|
626
626
|
ensureMenusLoaded(menuOption,indexOption,executeOption)
|
627
627
|
if not PKPremiumHandler.hasPremium(m1.find(str(indexOption).upper())):
|
628
|
+
PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
|
628
629
|
return None, None
|
629
630
|
if indexOption == "" or indexOption is None:
|
630
631
|
indexOption = int(configManager.defaultIndex)
|
@@ -679,10 +680,11 @@ def initPostLevel1Execution(indexOption, executeOption=None, skip=[], retrial=Fa
|
|
679
680
|
)
|
680
681
|
selectedMenu = m1.find(indexOption)
|
681
682
|
m2.renderForMenu(selectedMenu=selectedMenu, skip=skip)
|
682
|
-
stockIndexCode =
|
683
|
+
stockIndexCode = str(len(level1_index_options_sectoral.keys()))
|
683
684
|
if indexOption == "S":
|
684
685
|
ensureMenusLoaded("X",indexOption,executeOption)
|
685
686
|
if not PKPremiumHandler.hasPremium(selectedMenu):
|
687
|
+
PKAnalyticsService().send_event(f"non_premium_user_X_{indexOption}_{executeOption}")
|
686
688
|
PKAnalyticsService().send_event("app_exit")
|
687
689
|
sys.exit(0)
|
688
690
|
indexKeys = level1_index_options_sectoral.keys()
|
@@ -711,6 +713,7 @@ def initPostLevel1Execution(indexOption, executeOption=None, skip=[], retrial=Fa
|
|
711
713
|
OutputControls().printOutput(colorText.END, end="")
|
712
714
|
ensureMenusLoaded("X",indexOption,executeOption)
|
713
715
|
if not PKPremiumHandler.hasPremium(m2.find(str(executeOption))):
|
716
|
+
PKAnalyticsService().send_event(f"non_premium_user_X_{indexOption}_{executeOption}")
|
714
717
|
return None, None
|
715
718
|
if executeOption == "":
|
716
719
|
executeOption = 1
|
@@ -922,7 +925,6 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
922
925
|
mkt_monitor_dict = mp_manager.dict()
|
923
926
|
# Let's start monitoring the market monitor
|
924
927
|
startMarketMonitor(mkt_monitor_dict,keyboardInterruptEvent)
|
925
|
-
PKAnalyticsService().send_event("market_monitor_started")
|
926
928
|
|
927
929
|
keyboardInterruptEventFired = False
|
928
930
|
if stockDictPrimary is None:
|
@@ -953,7 +955,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
953
955
|
if menuOption in ["F", "M", "S", "B", "G", "C", "P", "D"] or selectedMenu.isPremium:
|
954
956
|
ensureMenusLoaded(menuOption,indexOption,executeOption)
|
955
957
|
if not PKPremiumHandler.hasPremium(selectedMenu):
|
956
|
-
PKAnalyticsService().send_event(f"non_premium_user_{menuOption}")
|
958
|
+
PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
|
957
959
|
PKAnalyticsService().send_event("app_exit")
|
958
960
|
sys.exit(0)
|
959
961
|
if menuOption in ["M", "D", "I", "L", "F"]:
|
@@ -1789,6 +1791,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
1789
1791
|
if str(indexOption).isnumeric() and int(indexOption) > 1 and executeOption <= MAX_SUPPORTED_MENU_OPTION:
|
1790
1792
|
ensureMenusLoaded(menuOption,indexOption,executeOption)
|
1791
1793
|
if not PKPremiumHandler.hasPremium(m2.find(str(executeOption).upper())):
|
1794
|
+
PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
|
1792
1795
|
PKAnalyticsService().send_event("app_exit")
|
1793
1796
|
sys.exit(0)
|
1794
1797
|
if (
|
@@ -1801,6 +1804,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
1801
1804
|
try:
|
1802
1805
|
if str(indexOption).upper() in ["W", "E", "S"]:
|
1803
1806
|
if not PKPremiumHandler.hasPremium(m1.find(str(indexOption).upper())):
|
1807
|
+
PKAnalyticsService().send_event(f"non_premium_user_{menuOption}_{indexOption}_{executeOption}")
|
1804
1808
|
PKAnalyticsService().send_event("app_exit")
|
1805
1809
|
sys.exit(0)
|
1806
1810
|
if indexOption == "W":
|
@@ -2201,6 +2205,7 @@ def main(userArgs=None,optionalFinalOutcome_df=None):
|
|
2201
2205
|
OutputControls().printOutput(colorText.END, end="")
|
2202
2206
|
ensureMenusLoaded(menuOption,indexOption,executeOption)
|
2203
2207
|
if not PKPremiumHandler.hasPremium(m0.find(str(pinOption).upper())):
|
2208
|
+
PKAnalyticsService().send_event(f"non_premium_user_pin_{menuOption}_{indexOption}_{executeOption}_{pinOption}")
|
2204
2209
|
PKAnalyticsService().send_event("app_exit")
|
2205
2210
|
sys.exit(0)
|
2206
2211
|
if pinOption in ["1","2"]:
|
@@ -2868,7 +2873,8 @@ def updateMenuChoiceHierarchy():
|
|
2868
2873
|
if ((":0:" in runOptionName or "_0_" in runOptionName) and userPassedArgs.progressstatus is not None) or userPassedArgs.progressstatus is not None:
|
2869
2874
|
runOptionName = userPassedArgs.progressstatus.split("=>")[0].split(" [+] ")[1].strip()
|
2870
2875
|
reportTitle = f"{runOptionName} | {reportTitle}" if runOptionName is not None else reportTitle
|
2871
|
-
|
2876
|
+
if len(runOptionName) >= 5:
|
2877
|
+
PKAnalyticsService().send_event(runOptionName)
|
2872
2878
|
OutputControls().printOutput(
|
2873
2879
|
colorText.FAIL
|
2874
2880
|
+ f" [+] You chose: {reportTitle} "
|
@@ -1427,7 +1427,7 @@ def launchScreener(options, user, context, optionChoices, update):
|
|
1427
1427
|
userSubs = isUserSubscribed(user)
|
1428
1428
|
try:
|
1429
1429
|
PKAnalyticsService().send_event("bot_scan",{"bot_userid":str(user.id), "bot_username":str(user.username),"scan_id":str(scanRequest),"user_subscribed":userSubs})
|
1430
|
-
except:
|
1430
|
+
except Exception as e:
|
1431
1431
|
pass
|
1432
1432
|
if not userSubs:
|
1433
1433
|
basicSubscriptions = ["X_0","X_N","X_1_"]
|
@@ -311,7 +311,8 @@ argParser.add_argument(
|
|
311
311
|
help="runs and tests all options",
|
312
312
|
required=False,
|
313
313
|
)
|
314
|
-
|
314
|
+
from PKDevTools.classes.FunctionTimeouts import ping
|
315
|
+
from pkscreener.classes.PKAnalytics import PKAnalyticsService
|
315
316
|
def csv_split(s):
|
316
317
|
return list(csv.reader([s], delimiter=' '))[0]
|
317
318
|
|
@@ -918,6 +919,7 @@ def updateConfig(args):
|
|
918
919
|
configManager.duration = "1d"
|
919
920
|
configManager.setConfig(ConfigManager.parser,default=True, showFileCreatedText=False)
|
920
921
|
|
922
|
+
@ping(interval=60,instance=PKAnalyticsService())
|
921
923
|
def pkscreenercli():
|
922
924
|
global originalStdOut, args
|
923
925
|
if sys.platform.startswith("darwin"):
|
@@ -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.240
|
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.2
|
2
2
|
Name: pkscreener
|
3
|
-
Version: 0.46.
|
3
|
+
Version: 0.46.20250222.733
|
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.20250222.733.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.240
|
37
37
|
Requires-Dist: PKNSETools>=0.1.20250122.138
|
38
38
|
Requires-Dist: Pyarrow
|
39
39
|
Requires-Dist: pyppeteer
|
@@ -392,15 +392,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
392
392
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
393
393
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
394
394
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
395
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.
|
395
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli.exe
|
396
396
|
[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.
|
397
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.bin
|
398
398
|
[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.
|
399
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.bin
|
400
400
|
[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.
|
401
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_x64.run
|
402
402
|
[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.
|
403
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250222.732/pkscreenercli_arm64.run
|
404
404
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
405
405
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
406
406
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.46.20250221.731'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ArtTexts.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/AssetsManager.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Backtest.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Barometer.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/CandlePatterns.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Changelog.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ConfigManager.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ConsoleUtility.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/GlobalStore.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/ImageUtility.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MarketStatus.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/MenuOptions.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Messenger.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/OtaUpdater.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKDataService.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKDemoHandler.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKPremiumHandler.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKScheduler.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PKSpreadsheets.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/Portfolio.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/PortfolioXRay.py
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/StockScreener.py
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/StockSentiment.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener/classes/WorkflowManager.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/SOURCES.txt
RENAMED
File without changes
|
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/not-zip-safe
RENAMED
File without changes
|
{pkscreener-0.46.20250221.731 → pkscreener-0.46.20250222.733}/pkscreener.egg-info/top_level.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|