evdspy 1.2.2__tar.gz → 2.0.2__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.
- {evdspy-1.2.2 → evdspy-2.0.2}/PKG-INFO +12 -87
- {evdspy-1.2.2 → evdspy-2.0.2}/README.md +8 -83
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/get_series_indexes.py +10 -3
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/get_series_indexes_exp.py +2 -2
- evdspy-2.0.2/evdspy/EVDSlocal/index_requests/index_util_funcs.py +131 -0
- evdspy-2.0.2/evdspy/EVDSlocal/index_requests/user_requests/Data_processor.py +65 -0
- evdspy-2.0.2/evdspy/EVDSlocal/requests_/test_reg_result.pickle +0 -0
- evdspy-2.0.2/evdspy/EVDSlocal/tests/test_get_series_exp.py +47 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/pyproject.toml +3 -3
- evdspy-1.2.2/evdspy/EVDSlocal/index_requests/index_util_funcs.py +0 -70
- evdspy-1.2.2/evdspy/EVDSlocal/index_requests/user_requests/Data_processor.py +0 -35
- evdspy-1.2.2/evdspy/EVDSlocal/requests_/test_reg_result.pickle +0 -0
- evdspy-1.2.2/evdspy/EVDSlocal/tests/test_get_series_exp.py +0 -50
- evdspy-1.2.2/evdspy/get_series_module.py +0 -116
- {evdspy-1.2.2 → evdspy-2.0.2}/LICENSE +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/clear_cache_folder.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/colors.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/common_imports.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/file_classes.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/files.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/folder_name_checks.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/prog.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/table.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/common/url_clean.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/api_params.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/api_params_enums.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/bucket_from_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/evds_files.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/evds_seri_files.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/excel_class.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/options_class.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/request_or_cache.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/components/url_class.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/config/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/config/apikey_class.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/config/config.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/config/credentials_file.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/config/dotenv.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/menu.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/menu_async.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/menu_logo_header.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/panel.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/proxy_for_menu.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/console/screen.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/helper/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/helper/print_m.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/categories.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/data_models.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/datagroup_individual.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/datagroups.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/datagroups_extra.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/datagroups_initial.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/df_operations.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/error_classes_index.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/get_series_indexes_utils.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/index_classes.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/real_reqs_tests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Api_requester.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Proxy_manager.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Request_config.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Serialize.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Url_builder.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/Url_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/User_req_typings.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/User_request_utils.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/_Tables.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/index_requests/user_requests/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/cache_folder.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/cmd_line_classes.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/command_pictures.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/load_commands_.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/load_commands_cmds_to_load.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/load_modules.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/sample_series_content.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/start_args.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/start_options.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial/try_loading_initial_commands.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial_setup/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial_setup/api_key_save.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial_setup/initial_setups.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/initial_setup/setup_folders.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/log_classes/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/log_classes/log_template.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/main_.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/manual_requests/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/manual_requests/prepare.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/cmd_formats.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/current_menu_message.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/error_classes.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/error_messages.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/messages/help_messages.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/ev_request.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/lower_energy.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/mock_req.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/my_cache.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/real_requests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/requests_/request_error_classes.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/populate_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/populate_series_helper.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/read_config_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/sample_series_content.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/series_creator.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/series_creator_on_setup.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/series_examples.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/series_format_config_funcs.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/series_format/stats/save_stats_of_requests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/session/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/session/session_.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/read_config_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/user_options_config.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/user_series_config.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/user_setup.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/setup_project/user_setup_helper.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/state/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/state/current_state.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/state/test_or_real.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/stats/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/stats/save_stats_of_requests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/core_options_test.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_apikey_checks.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_categories.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_datagroups.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_get_proxies_env.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_get_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_get_series_exp_cache.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_log_session.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_main_load.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_manual_series.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_requests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/test_user_requests.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests/testing_mock_credentials.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/tests_main.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/utils/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/utils/github_actions.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/utils/utils_general.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/EVDSlocal/utils/utils_test.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/__init__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/__version__.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/main.py +0 -0
- {evdspy-1.2.2 → evdspy-2.0.2}/evdspy/main_t.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evdspy
|
|
3
|
-
Version:
|
|
4
|
-
Summary: A versatile interface for the 'EDDS' (EVDS) API of the Central Bank of the Republic of Türkiye (https://
|
|
3
|
+
Version: 2.0.2
|
|
4
|
+
Summary: A versatile interface for the 'EDDS' (EVDS) API of the Central Bank of the Republic of Türkiye (https://evds3.tcmb.gov.tr/dokumanlar). This package allows users to easily access and manage economic data through a user-friendly menu function. It features a robust caching mechanism to enhance the efficiency of data requests by storing frequently accessed data for selected periods. Required API keys can be obtained by registering on the EVDS website.
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Author: Sermet Pekin
|
|
8
8
|
Author-email: sermet.pekin@gmail.com
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.10,<4.0
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Environment :: Console
|
|
12
12
|
Classifier: Framework :: IPython
|
|
@@ -16,12 +16,12 @@ Classifier: Operating System :: MacOS
|
|
|
16
16
|
Classifier: Operating System :: Microsoft :: Windows
|
|
17
17
|
Classifier: Operating System :: POSIX :: Linux
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
25
25
|
Classifier: Typing :: Typed
|
|
26
26
|
Provides-Extra: jupyter
|
|
27
27
|
Requires-Dist: openpyxl (>3.0.10)
|
|
@@ -40,7 +40,7 @@ Description-Content-Type: text/markdown
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
[](https://github.com/SermetPekin/evdspy-repo/actions/workflows/pypi_win.yml?1)
|
|
43
|
-
[](https://github.com/SermetPekin/evdspy-repo/actions/workflows/pypi.yml?2)
|
|
44
44
|
|
|
45
45
|
## Documentation
|
|
46
46
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/home.html)
|
|
@@ -239,23 +239,6 @@ Here is the documentation for other functions and details.
|
|
|
239
239
|
|
|
240
240
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/)
|
|
241
241
|
|
|
242
|
-
|
|
243
|
-
### Menu
|
|
244
|
-
python script
|
|
245
|
-
```python
|
|
246
|
-
from evdspy import menu
|
|
247
|
-
menu()
|
|
248
|
-
```
|
|
249
|
-
command line / Terminal
|
|
250
|
-
```bash
|
|
251
|
-
$ evdspy menu
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-

|
|
256
|
-
## Visual Menu to request data
|
|
257
|
-

|
|
258
|
-

|
|
259
242
|
### About
|
|
260
243
|
***evdspy*** is an open source python interface which helps you make efficient requests by caching results (storing a
|
|
261
244
|
dict using hashable parameters in order to avoid redundant requests), it provides a user friendly
|
|
@@ -268,82 +251,24 @@ python projects.
|
|
|
268
251
|
### installation
|
|
269
252
|
pip install evdspy -U
|
|
270
253
|
|
|
271
|
-
### importing
|
|
272
|
-
from evdspy import *
|
|
273
|
-
check()
|
|
274
|
-
get()
|
|
275
|
-
help_evds()
|
|
276
|
-
or
|
|
277
|
-
import evdspy as ev
|
|
278
|
-
ev.check()
|
|
279
|
-
ev.get()
|
|
280
|
-
ev.help_evds()
|
|
281
|
-
### menu
|
|
282
|
-
from evdspy import *
|
|
283
|
-
menu()
|
|
284
|
-
or
|
|
285
|
-
import evdspy as ev
|
|
286
|
-
ev.menu()
|
|
287
|
-
Menu function will display a friendly menu to setup project, creating output folders and some setup files to
|
|
288
|
-
create some set of series to make a request and download from EVDS server save your api key to get data from EVDS.
|
|
289
|
-
Than it will convert this data to a pandas dataframe and create some folders on your local area.
|
|
290
|
-
### menu()
|
|
291
|
-

|
|
292
|
-

|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
## OPTION 2
|
|
296
|
-
_________________________________
|
|
297
|
-
#### FROM THE MENU
|
|
298
|
-
### menu()
|
|
299
|
-

|
|
300
|
-
> > *checking*....
|
|
301
|
-

|
|
302
|
-
## OPTION 3
|
|
303
|
-
_________________________________
|
|
304
|
-
#### FROM THE OS COMMAND LINE
|
|
305
|
-
|
|
306
|
-
(Windows Command line / Linux Terminal / Mac Terminal)
|
|
307
|
-
|
|
308
|
-

|
|
309
|
-
|
|
310
|
-
$ evdspy setup
|
|
311
|
-
--------------
|
|
312
|
-
creates initial folders for your environment to save data and caches
|
|
313
|
-
$ evdspy menu
|
|
314
|
-
--------------
|
|
315
|
-
Launces evdspy and loads the menu
|
|
316
|
-
$ evdspy create series
|
|
317
|
-
--------------
|
|
318
|
-
Creates series file (leaves untouched if exists)
|
|
319
|
-
$ evdspy help
|
|
320
|
-
--------------
|
|
321
|
-
shows help and some documentation from command line
|
|
322
|
-
$ evdspy create options
|
|
323
|
-
--------------
|
|
324
|
-
creates options on the current folder
|
|
325
|
-
$ evdspy get
|
|
326
|
-
--------------
|
|
327
|
-
makes request from EVDS API and creates excel files regarding information on your series file
|
|
328
|
-
$ evdspy save
|
|
329
|
-
--------------
|
|
330
|
-
asks for your api key to save a file in your environment named `APIKEY_FOLDER`
|
|
331
|
-
|
|
332
254
|
## Documentation
|
|
333
255
|
|
|
334
256
|
Here is the documentation for other functions and details.
|
|
335
257
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/home.html)
|
|
336
258
|
|
|
337
|
-
|
|
259
|
+
|
|
338
260
|
|
|
339
261
|
|
|
340
262
|
## How to get an API key?
|
|
341
263
|
***Get a CBRT EVDS API key***
|
|
342
|
-
https://
|
|
264
|
+
https://evds3.tcmb.gov.tr/login
|
|
265
|
+
|
|
343
266
|
#### Main page of CBRT EVDS API
|
|
344
|
-
https://
|
|
267
|
+
https://evds3.tcmb.gov.tr
|
|
268
|
+
|
|
345
269
|
#### CBRT EVDS API Docs
|
|
346
|
-
https://
|
|
270
|
+
https://evds3.tcmb.gov.tr/dokumanlar
|
|
271
|
+
|
|
347
272
|
### About
|
|
348
273
|
***evdspy*** is an open source python interface which helps you make efficient requests by caching results (storing a
|
|
349
274
|
dict using hashable parameters in order to avoid redundant requests), it provides a user friendly
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/SermetPekin/evdspy-repo/actions/workflows/pypi_win.yml?1)
|
|
6
|
-
[](https://github.com/SermetPekin/evdspy-repo/actions/workflows/pypi.yml?2)
|
|
7
7
|
|
|
8
8
|
## Documentation
|
|
9
9
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/home.html)
|
|
@@ -202,23 +202,6 @@ Here is the documentation for other functions and details.
|
|
|
202
202
|
|
|
203
203
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/)
|
|
204
204
|
|
|
205
|
-
|
|
206
|
-
### Menu
|
|
207
|
-
python script
|
|
208
|
-
```python
|
|
209
|
-
from evdspy import menu
|
|
210
|
-
menu()
|
|
211
|
-
```
|
|
212
|
-
command line / Terminal
|
|
213
|
-
```bash
|
|
214
|
-
$ evdspy menu
|
|
215
|
-
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-

|
|
219
|
-
## Visual Menu to request data
|
|
220
|
-

|
|
221
|
-

|
|
222
205
|
### About
|
|
223
206
|
***evdspy*** is an open source python interface which helps you make efficient requests by caching results (storing a
|
|
224
207
|
dict using hashable parameters in order to avoid redundant requests), it provides a user friendly
|
|
@@ -231,82 +214,24 @@ python projects.
|
|
|
231
214
|
### installation
|
|
232
215
|
pip install evdspy -U
|
|
233
216
|
|
|
234
|
-
### importing
|
|
235
|
-
from evdspy import *
|
|
236
|
-
check()
|
|
237
|
-
get()
|
|
238
|
-
help_evds()
|
|
239
|
-
or
|
|
240
|
-
import evdspy as ev
|
|
241
|
-
ev.check()
|
|
242
|
-
ev.get()
|
|
243
|
-
ev.help_evds()
|
|
244
|
-
### menu
|
|
245
|
-
from evdspy import *
|
|
246
|
-
menu()
|
|
247
|
-
or
|
|
248
|
-
import evdspy as ev
|
|
249
|
-
ev.menu()
|
|
250
|
-
Menu function will display a friendly menu to setup project, creating output folders and some setup files to
|
|
251
|
-
create some set of series to make a request and download from EVDS server save your api key to get data from EVDS.
|
|
252
|
-
Than it will convert this data to a pandas dataframe and create some folders on your local area.
|
|
253
|
-
### menu()
|
|
254
|
-

|
|
255
|
-

|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
## OPTION 2
|
|
259
|
-
_________________________________
|
|
260
|
-
#### FROM THE MENU
|
|
261
|
-
### menu()
|
|
262
|
-

|
|
263
|
-
> > *checking*....
|
|
264
|
-

|
|
265
|
-
## OPTION 3
|
|
266
|
-
_________________________________
|
|
267
|
-
#### FROM THE OS COMMAND LINE
|
|
268
|
-
|
|
269
|
-
(Windows Command line / Linux Terminal / Mac Terminal)
|
|
270
|
-
|
|
271
|
-

|
|
272
|
-
|
|
273
|
-
$ evdspy setup
|
|
274
|
-
--------------
|
|
275
|
-
creates initial folders for your environment to save data and caches
|
|
276
|
-
$ evdspy menu
|
|
277
|
-
--------------
|
|
278
|
-
Launces evdspy and loads the menu
|
|
279
|
-
$ evdspy create series
|
|
280
|
-
--------------
|
|
281
|
-
Creates series file (leaves untouched if exists)
|
|
282
|
-
$ evdspy help
|
|
283
|
-
--------------
|
|
284
|
-
shows help and some documentation from command line
|
|
285
|
-
$ evdspy create options
|
|
286
|
-
--------------
|
|
287
|
-
creates options on the current folder
|
|
288
|
-
$ evdspy get
|
|
289
|
-
--------------
|
|
290
|
-
makes request from EVDS API and creates excel files regarding information on your series file
|
|
291
|
-
$ evdspy save
|
|
292
|
-
--------------
|
|
293
|
-
asks for your api key to save a file in your environment named `APIKEY_FOLDER`
|
|
294
|
-
|
|
295
217
|
## Documentation
|
|
296
218
|
|
|
297
219
|
Here is the documentation for other functions and details.
|
|
298
220
|
[Documentation](https://evdspy-repo.readthedocs.io/en/latest/home.html)
|
|
299
221
|
|
|
300
|
-
|
|
222
|
+
|
|
301
223
|
|
|
302
224
|
|
|
303
225
|
## How to get an API key?
|
|
304
226
|
***Get a CBRT EVDS API key***
|
|
305
|
-
https://
|
|
227
|
+
https://evds3.tcmb.gov.tr/login
|
|
228
|
+
|
|
306
229
|
#### Main page of CBRT EVDS API
|
|
307
|
-
https://
|
|
230
|
+
https://evds3.tcmb.gov.tr
|
|
231
|
+
|
|
308
232
|
#### CBRT EVDS API Docs
|
|
309
|
-
https://
|
|
233
|
+
https://evds3.tcmb.gov.tr/dokumanlar
|
|
234
|
+
|
|
310
235
|
### About
|
|
311
236
|
***evdspy*** is an open source python interface which helps you make efficient requests by caching results (storing a
|
|
312
237
|
dict using hashable parameters in order to avoid redundant requests), it provides a user friendly
|
|
@@ -27,14 +27,21 @@ def get_series(
|
|
|
27
27
|
end_date: str = default_end_date_fnc(),
|
|
28
28
|
frequency: Union[
|
|
29
29
|
Literal[
|
|
30
|
-
"monthly",
|
|
30
|
+
"monthly",
|
|
31
|
+
"quarterly",
|
|
32
|
+
"weekly",
|
|
33
|
+
"annually",
|
|
34
|
+
"semimonthly",
|
|
35
|
+
"semiannually",
|
|
36
|
+
"business",
|
|
37
|
+
None,
|
|
31
38
|
]
|
|
32
39
|
] = None,
|
|
33
40
|
formulas: Union[Literal["level", "percentage_change", "difference"], None] = None,
|
|
34
41
|
aggregation: Union[
|
|
35
42
|
Literal["avg", "min", "max", "first", "last", "sum", None], None
|
|
36
43
|
] = None,
|
|
37
|
-
cache: bool = False
|
|
44
|
+
cache: bool = False,
|
|
38
45
|
proxy: Optional[str] = None,
|
|
39
46
|
proxies: Optional[dict[str, str]] = None,
|
|
40
47
|
debug: bool = False,
|
|
@@ -110,7 +117,7 @@ def get_series(
|
|
|
110
117
|
if debug:
|
|
111
118
|
return api_requester.dry_request()
|
|
112
119
|
# ............DataProcessor................................
|
|
113
|
-
data_processor = DataProcessor(api_requester())
|
|
120
|
+
data_processor = DataProcessor(api_requester(), config=config)
|
|
114
121
|
return data_processor()
|
|
115
122
|
|
|
116
123
|
|
|
@@ -78,7 +78,7 @@ def get_series_exp(
|
|
|
78
78
|
end_date: str = default_end_date_fnc(),
|
|
79
79
|
frequency: Union[
|
|
80
80
|
Literal[
|
|
81
|
-
"monthly", "weekly", "annually", "semimonthly", "semiannually", "business", None
|
|
81
|
+
"monthly", "weekly", "quarterly", "annually", "semimonthly", "semiannually", "business", None
|
|
82
82
|
]
|
|
83
83
|
] = None,
|
|
84
84
|
formulas: Union[Literal["level", "percentage_change", "difference"], None] = None,
|
|
@@ -187,7 +187,7 @@ def get_series_exp(
|
|
|
187
187
|
with pd.ExcelWriter(file_name) as writer:
|
|
188
188
|
for sheet_name, df in result.items():
|
|
189
189
|
if isinstance(df, pd.DataFrame):
|
|
190
|
-
df.to_excel(writer, sheet_name=sheet_name, index=
|
|
190
|
+
df.to_excel(writer, sheet_name=sheet_name, index=True)
|
|
191
191
|
res = True
|
|
192
192
|
if res:
|
|
193
193
|
print(f" writing file : [{file_name}] ")
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
import typing as t
|
|
3
|
+
from ..common.colors import print_with_failure_style
|
|
4
|
+
from ..components.excel_class import correct_folder
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def try_date(df: pd.DataFrame, frequency="monthly"):
|
|
8
|
+
if df.index.name is None:
|
|
9
|
+
return df
|
|
10
|
+
df = df.copy()
|
|
11
|
+
|
|
12
|
+
def with_month(df: pd.DataFrame):
|
|
13
|
+
try:
|
|
14
|
+
df["year"], df["month"] = zip(*df.index.str.split("-"))
|
|
15
|
+
df["day"] = ["1" for x in range(len(df))]
|
|
16
|
+
return helper(df)
|
|
17
|
+
|
|
18
|
+
except:
|
|
19
|
+
|
|
20
|
+
return df
|
|
21
|
+
|
|
22
|
+
def helper(df, remove_cols=("year", "month", "day")):
|
|
23
|
+
df.index = pd.to_datetime(
|
|
24
|
+
df[["year", "month", "day"]].astype(str), format="%Y-%m-%d", errors="coerce"
|
|
25
|
+
)
|
|
26
|
+
df.index = df.index.strftime("%d-%m-%Y")
|
|
27
|
+
df = df.drop(columns=list(remove_cols))
|
|
28
|
+
return df
|
|
29
|
+
|
|
30
|
+
def with_quarter(df: pd.DataFrame):
|
|
31
|
+
try:
|
|
32
|
+
e = df.copy()
|
|
33
|
+
xs = []
|
|
34
|
+
ys = []
|
|
35
|
+
for x, y in e.index.str.split("-Q", expand=True):
|
|
36
|
+
xs.append(x)
|
|
37
|
+
ys.append(y)
|
|
38
|
+
|
|
39
|
+
e["year"] = xs
|
|
40
|
+
e["quarter"] = ys
|
|
41
|
+
e["year"] = e["year"].astype(int)
|
|
42
|
+
e["quarter"] = e["quarter"].astype(int)
|
|
43
|
+
e["month"] = e["quarter"].apply(lambda x: 3 * (x - 1) + 1)
|
|
44
|
+
e["day"] = ["1" for x in range(len(e))]
|
|
45
|
+
|
|
46
|
+
return helper(e, remove_cols=("year", "month", "day", "quarter"))
|
|
47
|
+
except:
|
|
48
|
+
return df
|
|
49
|
+
|
|
50
|
+
def with_generic(df: pd.DataFrame):
|
|
51
|
+
try:
|
|
52
|
+
df.index = pd.to_datetime(df.index, format="%d-%m-%Y")
|
|
53
|
+
return df
|
|
54
|
+
except:
|
|
55
|
+
return df
|
|
56
|
+
|
|
57
|
+
fncs = {"monthly": with_month, "quarterly": with_quarter, None: with_generic}
|
|
58
|
+
fnc = fncs.get(frequency, with_generic)
|
|
59
|
+
|
|
60
|
+
df = fnc(df)
|
|
61
|
+
|
|
62
|
+
return df
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def make_date_first_column_helper(df, col_name):
|
|
66
|
+
if col_name not in df.columns:
|
|
67
|
+
return df
|
|
68
|
+
cols = [col_name] + [col for col in df if col != col_name]
|
|
69
|
+
df = df[cols]
|
|
70
|
+
return df
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def make_date_first_column(df):
|
|
74
|
+
col_names = (
|
|
75
|
+
"YEARWEEK",
|
|
76
|
+
"Tarih",
|
|
77
|
+
)
|
|
78
|
+
for col_name in col_names:
|
|
79
|
+
df = make_date_first_column_helper(df, col_name)
|
|
80
|
+
return df
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def drop_unix(df):
|
|
84
|
+
UnixTime = "UNIXTIME"
|
|
85
|
+
if UnixTime in df.columns:
|
|
86
|
+
df.drop(UnixTime, axis=1, inplace=True)
|
|
87
|
+
return df
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def json_to_df(json_content: t.Union[list, dict]):
|
|
91
|
+
if hasattr(json_content, "items"):
|
|
92
|
+
json_content = json_content["items"]
|
|
93
|
+
df = pd.DataFrame.from_records(json_content)
|
|
94
|
+
df = drop_unix(df)
|
|
95
|
+
df = make_date_first_column(df)
|
|
96
|
+
return df
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def make_df_float(df):
|
|
100
|
+
def check_cols(x: str):
|
|
101
|
+
items = (
|
|
102
|
+
"Tarih" not in x,
|
|
103
|
+
"WEEK" not in x,
|
|
104
|
+
"DAY" not in x,
|
|
105
|
+
"YEAR" not in x,
|
|
106
|
+
)
|
|
107
|
+
return all(items)
|
|
108
|
+
|
|
109
|
+
columns = (x for x in df.columns if check_cols(x))
|
|
110
|
+
other_cols = (x for x in df.columns if not check_cols(x))
|
|
111
|
+
old_df = df
|
|
112
|
+
try:
|
|
113
|
+
df = df[columns].astype(float)
|
|
114
|
+
except:
|
|
115
|
+
# print_with_failure_style("Could not convert some columns to float type...")
|
|
116
|
+
...
|
|
117
|
+
for other_column in other_cols:
|
|
118
|
+
df[other_column] = old_df[other_column]
|
|
119
|
+
return df
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def json_to_excel(json_content: list, file_name, try_float=True):
|
|
123
|
+
file_name = correct_folder(file_name, "xlsx")
|
|
124
|
+
df = json_to_df(json_content)
|
|
125
|
+
if try_float:
|
|
126
|
+
df = make_df_float(df)
|
|
127
|
+
try:
|
|
128
|
+
df = make_date_first_column(df)
|
|
129
|
+
df.to_excel(file_name)
|
|
130
|
+
except:
|
|
131
|
+
print(f"could not write excel file {file_name}. =>file is probably open")
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# ....................................................................... DataProcessor
|
|
2
|
+
import traceback
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
import pandas as pd
|
|
6
|
+
|
|
7
|
+
from evdspy.EVDSlocal.index_requests.index_util_funcs import make_df_float, json_to_df
|
|
8
|
+
from evdspy.EVDSlocal.index_requests.user_requests.User_req_typings import T_maybeDf
|
|
9
|
+
from evdspy.EVDSlocal.index_requests.index_util_funcs import try_date
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
|
|
13
|
+
from evdspy.EVDSlocal.index_requests.user_requests import RequestConfig
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DataProcessor:
|
|
17
|
+
def __init__(self, data: Any, config: "RequestConfig" = None ):
|
|
18
|
+
self.data = data
|
|
19
|
+
self.config = config
|
|
20
|
+
|
|
21
|
+
def set_index(self, df: pd.DataFrame) -> pd.DataFrame:
|
|
22
|
+
if "Tarih" in df.columns:
|
|
23
|
+
df["Tarih_string"] = df["Tarih"]
|
|
24
|
+
df.set_index("Tarih", inplace=True)
|
|
25
|
+
return df
|
|
26
|
+
|
|
27
|
+
def fix_column_names(self, df: pd.DataFrame):
|
|
28
|
+
def fix(string: str):
|
|
29
|
+
if "tarih" in string.lower() or "week" in string.lower():
|
|
30
|
+
return string
|
|
31
|
+
return string.replace("_", ".")
|
|
32
|
+
|
|
33
|
+
df.columns = [fix(x) for x in df.columns]
|
|
34
|
+
return df
|
|
35
|
+
|
|
36
|
+
def _try_date(self, df: pd.DataFrame):
|
|
37
|
+
if df.index.name is None:
|
|
38
|
+
return df
|
|
39
|
+
frequency = self.config.frequency if hasattr(self.config , "frequency") else None
|
|
40
|
+
return try_date(df, frequency=frequency)
|
|
41
|
+
|
|
42
|
+
def process_to_dataframe(self) -> T_maybeDf:
|
|
43
|
+
if self.data is False:
|
|
44
|
+
return False
|
|
45
|
+
try:
|
|
46
|
+
df = json_to_df(self.data)
|
|
47
|
+
except Exception as e:
|
|
48
|
+
print(e)
|
|
49
|
+
traceback.print_exc()
|
|
50
|
+
return None
|
|
51
|
+
if isinstance(df, pd.DataFrame):
|
|
52
|
+
df = make_df_float(df)
|
|
53
|
+
df = self.set_index(df)
|
|
54
|
+
df = self.fix_column_names(df)
|
|
55
|
+
df = self._try_date(df)
|
|
56
|
+
return df
|
|
57
|
+
|
|
58
|
+
def __call__(self, *args, **kwargs) -> T_maybeDf:
|
|
59
|
+
return self.process_to_dataframe()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_DataProcessor(capsys):
|
|
63
|
+
with capsys.disabled():
|
|
64
|
+
d = DataProcessor(False , config = None )
|
|
65
|
+
print(d)
|
|
Binary file
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
|
|
3
|
+
from evdspy import get_series_exp
|
|
4
|
+
from evdspy.EVDSlocal.index_requests.get_series_indexes_exp import Result
|
|
5
|
+
|
|
6
|
+
index1 = "TP.GSYIH20.BY.B1GQ"
|
|
7
|
+
index2 = "TP.GSYIH20.BY.P311"
|
|
8
|
+
|
|
9
|
+
indexes = """
|
|
10
|
+
TP.GSYIH20.BY.B1GQ # Gayrisafi Yurt İçi Hasıla (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
11
|
+
TP.GSYIH20.BY.P311 # Yerleşik Hanehalklarının Tüketimi (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
12
|
+
TP.GSYIH20.BY.P312 # Hanehalkına Hizmet Eden Kar Amacı Olmayan Kuruluşların Tüketimi (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
13
|
+
TP.GSYIH20.BY.P32 # Devletin Nihai Tüketim Harcamaları (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
14
|
+
TP.GSYIH20.BY.P51G # Gayrisafi Sabit Sermaye Oluşumu (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
15
|
+
TP.GSYIH20.BY.P52 # Stoktaki Değişiklikler (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
16
|
+
TP.GSYIH20.BY.P6 # Mal ve Hizmet İhracatı (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
17
|
+
TP.GSYIH20.BY.P7 # (Eksi) Mal ve Hizmet İthalatı (Harcama Yöntemiyle, Cari Fiyatlarla)-Düzey
|
|
18
|
+
|
|
19
|
+
"""
|
|
20
|
+
index_table = "bie_gsyhhrccar"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
from typing import Any
|
|
24
|
+
import time
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def fnc(item: Any) -> Result:
|
|
28
|
+
print(f" Checking ... {item}")
|
|
29
|
+
time.sleep(2)
|
|
30
|
+
df = get_series_exp(item, debug=False, cache=True)
|
|
31
|
+
print(df)
|
|
32
|
+
return df
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
DF = pd.DataFrame
|
|
36
|
+
|
|
37
|
+
def test_get_series_exp(capsys):
|
|
38
|
+
items = [index1, index2, indexes, index_table]
|
|
39
|
+
|
|
40
|
+
for item in items:
|
|
41
|
+
result: Result = fnc(item)
|
|
42
|
+
|
|
43
|
+
assert isinstance(result.data, DF)
|
|
44
|
+
assert isinstance(result.metadata, DF)
|
|
45
|
+
assert callable(result.write)
|
|
46
|
+
assert callable(result.to_excel)
|
|
47
|
+
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
[tool.poetry]
|
|
5
5
|
name = "evdspy"
|
|
6
|
-
version = "
|
|
7
|
-
description = "A versatile interface for the 'EDDS' (EVDS) API of the Central Bank of the Republic of Türkiye (https://
|
|
6
|
+
version = "2.0.2"
|
|
7
|
+
description = "A versatile interface for the 'EDDS' (EVDS) API of the Central Bank of the Republic of Türkiye (https://evds3.tcmb.gov.tr/dokumanlar). This package allows users to easily access and manage economic data through a user-friendly menu function. It features a robust caching mechanism to enhance the efficiency of data requests by storing frequently accessed data for selected periods. Required API keys can be obtained by registering on the EVDS website."
|
|
8
8
|
authors = ["Sermet Pekin <sermet.pekin@gmail.com>"]
|
|
9
9
|
license = "MIT"
|
|
10
10
|
readme = "README.md"
|
|
@@ -26,7 +26,7 @@ classifiers = [
|
|
|
26
26
|
"Typing :: Typed",
|
|
27
27
|
]
|
|
28
28
|
[tool.poetry.dependencies]
|
|
29
|
-
python = "^3.
|
|
29
|
+
python = "^3.10"
|
|
30
30
|
pandas = ">1.5.0"
|
|
31
31
|
openpyxl = ">3.0.10"
|
|
32
32
|
rich = ">=12.5.1"
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import pandas as pd
|
|
2
|
-
import typing as t
|
|
3
|
-
from ..common.colors import print_with_failure_style
|
|
4
|
-
from ..components.excel_class import correct_folder
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def make_date_first_column_helper(df, col_name):
|
|
8
|
-
if col_name not in df.columns:
|
|
9
|
-
return df
|
|
10
|
-
cols = [col_name] + [col for col in df if col != col_name]
|
|
11
|
-
df = df[cols]
|
|
12
|
-
return df
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def make_date_first_column(df):
|
|
16
|
-
col_names = ('YEARWEEK', 'Tarih',)
|
|
17
|
-
for col_name in col_names:
|
|
18
|
-
df = make_date_first_column_helper(df, col_name)
|
|
19
|
-
return df
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def drop_unix(df):
|
|
23
|
-
UnixTime = 'UNIXTIME'
|
|
24
|
-
if UnixTime in df.columns:
|
|
25
|
-
df.drop(UnixTime, axis=1, inplace=True)
|
|
26
|
-
return df
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def json_to_df(json_content: t.Union[list, dict]):
|
|
30
|
-
if hasattr(json_content, 'items'):
|
|
31
|
-
json_content = json_content['items']
|
|
32
|
-
df = pd.DataFrame.from_records(json_content)
|
|
33
|
-
df = drop_unix(df)
|
|
34
|
-
df = make_date_first_column(df)
|
|
35
|
-
return df
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def make_df_float(df):
|
|
39
|
-
def check_cols(x: str):
|
|
40
|
-
items = (
|
|
41
|
-
"Tarih" not in x,
|
|
42
|
-
"WEEK" not in x,
|
|
43
|
-
"DAY" not in x,
|
|
44
|
-
"YEAR" not in x,
|
|
45
|
-
)
|
|
46
|
-
return all(items)
|
|
47
|
-
|
|
48
|
-
columns = (x for x in df.columns if check_cols(x))
|
|
49
|
-
other_cols = (x for x in df.columns if not check_cols(x))
|
|
50
|
-
old_df = df
|
|
51
|
-
try:
|
|
52
|
-
df = df[columns].astype(float)
|
|
53
|
-
except:
|
|
54
|
-
# print_with_failure_style("Could not convert some columns to float type...")
|
|
55
|
-
...
|
|
56
|
-
for other_column in other_cols:
|
|
57
|
-
df[other_column] = old_df[other_column]
|
|
58
|
-
return df
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def json_to_excel(json_content: list, file_name, try_float=True):
|
|
62
|
-
file_name = correct_folder(file_name, "xlsx")
|
|
63
|
-
df = json_to_df(json_content)
|
|
64
|
-
if try_float:
|
|
65
|
-
df = make_df_float(df)
|
|
66
|
-
try:
|
|
67
|
-
df = make_date_first_column(df)
|
|
68
|
-
df.to_excel(file_name)
|
|
69
|
-
except:
|
|
70
|
-
print(f"could not write excel file {file_name}. =>file is probably open")
|