oda-data 2.8.2__tar.gz → 2.9.0__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.
- {oda_data-2.8.2 → oda_data-2.9.0}/PKG-INFO +5 -5
- {oda_data-2.8.2 → oda_data-2.9.0}/README.md +1 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/pyproject.toml +8 -8
- {oda_data-2.8.2 → oda_data-2.9.0}/pyproject.toml.orig +11 -12
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/oecd.py +3 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/sources.py +3 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/api.py +6 -7
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/config.py +2 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/channels.py +3 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/common.py +3 -1
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/dtypes.py +3 -1
- oda_data-2.9.0/src/oda_data/logger.py +38 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/cache.py +3 -1
- oda_data-2.8.2/src/oda_data/logger.py +0 -34
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/constants.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/representations.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/_migrate.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/types.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/channel_share_proxies.csv +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/crs_channel_mapping.csv +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/crs_channel_mapping_vintage.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/multilateral_channel_crosswalk.csv +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/schema.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/validation.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/config.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/common.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/common.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/crs_functions.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/crs_indicators.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/oecd.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/one.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/common.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/dac1_functions.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/dac1_indicators.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/oecd.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/one.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/common.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/dac2a_functions.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/dac2a_indicators.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/oecd.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/one.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/indicator.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/eu.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/imputation_quality.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/imputation_shares.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/policy_markers.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/sector_imputations.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/oda_data_indicators.csv +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_flow_types.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_modalities.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_policy_markers.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_purpose.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_type_of_finance.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/dac1_aid_flow_types.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/dac2a_aid_type.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/flow_types.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/indicators.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/key_columns.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/provider_groupings.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/recipient_groupings.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/v1_indicators_mapping.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/compatibility.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/gni.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/groupings.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/__init__.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/add.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/create_mapping.py +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/crs_names.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/dac1_names.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/dac2a_names.json +0 -0
- {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/sector_lists.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: oda_data
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.9.0
|
|
4
4
|
Summary: A python package to work with Official Development Assistance data from the OECD DAC.
|
|
5
5
|
Author: Jorge Rivera, Miguel Haro Ruiz
|
|
6
6
|
Author-email: Jorge Rivera <jorge.rivera@one.org>, Miguel Haro Ruiz <miguel.haroruiz@one.org>
|
|
@@ -10,20 +10,20 @@ Classifier: Intended Audience :: Developers
|
|
|
10
10
|
Classifier: Intended Audience :: Science/Research
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
17
|
Classifier: Topic :: Scientific/Engineering
|
|
18
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
19
|
Requires-Dist: cachetools>=6.2.0
|
|
20
20
|
Requires-Dist: filelock>=3.20.0
|
|
21
|
-
Requires-Dist: oda-reader>=1.
|
|
21
|
+
Requires-Dist: oda-reader>=1.13.0
|
|
22
22
|
Requires-Dist: platformdirs>=4.0.0
|
|
23
23
|
Requires-Dist: pandas[excel,parquet,performance]>=2.2.0
|
|
24
24
|
Requires-Dist: pydeflate>=2.3.3
|
|
25
25
|
Requires-Dist: reader>=3.18
|
|
26
|
-
Requires-Python: >=3.
|
|
26
|
+
Requires-Python: >=3.12
|
|
27
27
|
Project-URL: Homepage, https://github.com/ONEcampaign/oda_data_package
|
|
28
28
|
Project-URL: Repository, https://github.com/ONEcampaign/oda_data_package
|
|
29
29
|
Project-URL: Documentation, https://github.com/ONEcampaign/oda_data_package
|
|
@@ -64,7 +64,7 @@ The latest version of the package can be installed using pip:
|
|
|
64
64
|
pip install oda-data --upgrade
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
The package is compatible with Python 3.
|
|
67
|
+
The package is compatible with Python 3.12 and above.
|
|
68
68
|
|
|
69
69
|
## Basic usage
|
|
70
70
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "oda_data"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.9.0"
|
|
4
4
|
description = "A python package to work with Official Development Assistance data from the OECD DAC."
|
|
5
|
-
requires-python = ">=3.
|
|
5
|
+
requires-python = ">=3.12"
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
classifiers = [
|
|
8
8
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -10,9 +10,9 @@ classifiers = [
|
|
|
10
10
|
"Intended Audience :: Science/Research",
|
|
11
11
|
"License :: OSI Approved :: MIT License",
|
|
12
12
|
"Programming Language :: Python :: 3",
|
|
13
|
-
"Programming Language :: Python :: 3.11",
|
|
14
13
|
"Programming Language :: Python :: 3.12",
|
|
15
14
|
"Programming Language :: Python :: 3.13",
|
|
15
|
+
"Programming Language :: Python :: 3.14",
|
|
16
16
|
"Programming Language :: Python :: 3 :: Only",
|
|
17
17
|
"Topic :: Scientific/Engineering",
|
|
18
18
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
@@ -20,7 +20,7 @@ classifiers = [
|
|
|
20
20
|
dependencies = [
|
|
21
21
|
"cachetools>=6.2.0",
|
|
22
22
|
"filelock>=3.20.0",
|
|
23
|
-
"oda-reader>=1.
|
|
23
|
+
"oda-reader>=1.13.0",
|
|
24
24
|
"platformdirs>=4.0.0",
|
|
25
25
|
"pandas[excel,parquet,performance]>=2.2.0",
|
|
26
26
|
"pydeflate>=2.3.3",
|
|
@@ -62,8 +62,8 @@ test = [
|
|
|
62
62
|
"freezegun>=1.4.0",
|
|
63
63
|
]
|
|
64
64
|
maintenance = [
|
|
65
|
-
"resolvekit==0.1.12
|
|
66
|
-
"pyyaml>=6.0
|
|
65
|
+
"resolvekit==0.1.12",
|
|
66
|
+
"pyyaml>=6.0",
|
|
67
67
|
]
|
|
68
68
|
|
|
69
69
|
[tool.uv]
|
|
@@ -74,7 +74,7 @@ default-groups = [
|
|
|
74
74
|
|
|
75
75
|
[tool.ruff]
|
|
76
76
|
line-length = 88
|
|
77
|
-
target-version = "
|
|
77
|
+
target-version = "py312"
|
|
78
78
|
extend-include = ["*.ipynb"]
|
|
79
79
|
exclude = [
|
|
80
80
|
".git",
|
|
@@ -151,7 +151,7 @@ skip-magic-trailing-comma = false
|
|
|
151
151
|
line-ending = "auto"
|
|
152
152
|
|
|
153
153
|
[tool.ty.environment]
|
|
154
|
-
python-version = "3.
|
|
154
|
+
python-version = "3.12"
|
|
155
155
|
|
|
156
156
|
[tool.ty.src]
|
|
157
157
|
include = ["src/oda_data"]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "oda_data"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.9.0"
|
|
4
4
|
description = "A python package to work with Official Development Assistance data from the OECD DAC."
|
|
5
|
-
requires-python = ">=3.
|
|
5
|
+
requires-python = ">=3.12"
|
|
6
6
|
|
|
7
7
|
license = {text = "MIT"}
|
|
8
8
|
readme = "README.md"
|
|
@@ -17,9 +17,9 @@ classifiers = [
|
|
|
17
17
|
"Intended Audience :: Science/Research",
|
|
18
18
|
"License :: OSI Approved :: MIT License",
|
|
19
19
|
"Programming Language :: Python :: 3",
|
|
20
|
-
"Programming Language :: Python :: 3.11",
|
|
21
20
|
"Programming Language :: Python :: 3.12",
|
|
22
21
|
"Programming Language :: Python :: 3.13",
|
|
22
|
+
"Programming Language :: Python :: 3.14",
|
|
23
23
|
"Programming Language :: Python :: 3 :: Only",
|
|
24
24
|
"Topic :: Scientific/Engineering",
|
|
25
25
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
|
28
28
|
dependencies = [
|
|
29
29
|
"cachetools>=6.2.0",
|
|
30
30
|
"filelock>=3.20.0",
|
|
31
|
-
"oda-reader>=1.
|
|
31
|
+
"oda-reader>=1.13.0",
|
|
32
32
|
"platformdirs>=4.0.0",
|
|
33
33
|
"pandas[excel,parquet,performance]>=2.2.0",
|
|
34
34
|
"pydeflate>=2.3.3",
|
|
@@ -60,12 +60,11 @@ test = [
|
|
|
60
60
|
]
|
|
61
61
|
# Maintenance-only tooling for scripts/refresh_channel_crosswalk.py. Never a
|
|
62
62
|
# runtime dependency of the oda_data package; excluded from the default
|
|
63
|
-
# groups below so a plain `uv sync` never requires it
|
|
64
|
-
#
|
|
65
|
-
# `uv sync --group maintenance`.
|
|
63
|
+
# groups below so a plain `uv sync` never requires it. Install explicitly
|
|
64
|
+
# with `uv sync --group maintenance`.
|
|
66
65
|
maintenance = [
|
|
67
|
-
"resolvekit==0.1.12
|
|
68
|
-
"pyyaml>=6.0
|
|
66
|
+
"resolvekit==0.1.12",
|
|
67
|
+
"pyyaml>=6.0",
|
|
69
68
|
]
|
|
70
69
|
|
|
71
70
|
[tool.uv]
|
|
@@ -78,8 +77,8 @@ default-groups = ["dev", "test"]
|
|
|
78
77
|
# Set the maximum line length
|
|
79
78
|
line-length = 88
|
|
80
79
|
|
|
81
|
-
# Target Python 3.
|
|
82
|
-
target-version = "
|
|
80
|
+
# Target Python 3.12+
|
|
81
|
+
target-version = "py312"
|
|
83
82
|
|
|
84
83
|
# Lint/format notebooks too
|
|
85
84
|
extend-include = ["*.ipynb"]
|
|
@@ -167,7 +166,7 @@ skip-magic-trailing-comma = false
|
|
|
167
166
|
line-ending = "auto"
|
|
168
167
|
|
|
169
168
|
[tool.ty.environment]
|
|
170
|
-
python-version = "3.
|
|
169
|
+
python-version = "3.12"
|
|
171
170
|
|
|
172
171
|
[tool.ty.src]
|
|
173
172
|
include = ["src/oda_data"]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from collections.abc import Callable
|
|
2
3
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
3
4
|
from dataclasses import dataclass
|
|
@@ -22,9 +23,10 @@ from oda_data.indicators.crs import crs_functions
|
|
|
22
23
|
from oda_data.indicators.crs.common import group_data_based_on_indicator
|
|
23
24
|
from oda_data.indicators.dac1 import dac1_functions
|
|
24
25
|
from oda_data.indicators.dac2a import dac2a_functions
|
|
25
|
-
from oda_data.logger import logger
|
|
26
26
|
from oda_data.tools.groupings import provider_groupings, recipient_groupings
|
|
27
27
|
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
28
30
|
source_to_module = {
|
|
29
31
|
"DAC1": dac1_functions,
|
|
30
32
|
"DAC2A": dac2a_functions,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import threading
|
|
2
3
|
from abc import abstractmethod
|
|
3
4
|
from collections.abc import Callable
|
|
@@ -27,7 +28,6 @@ from oda_data.clean_data.validation import (
|
|
|
27
28
|
validate_years_providers_recipients,
|
|
28
29
|
)
|
|
29
30
|
from oda_data.config import ODAPaths
|
|
30
|
-
from oda_data.logger import logger
|
|
31
31
|
from oda_data.tools.cache import (
|
|
32
32
|
BulkCacheEntry,
|
|
33
33
|
BulkCacheManager,
|
|
@@ -40,6 +40,8 @@ from oda_data.tools.cache import (
|
|
|
40
40
|
generate_projection_hash,
|
|
41
41
|
)
|
|
42
42
|
|
|
43
|
+
logger = logging.getLogger(__name__)
|
|
44
|
+
|
|
43
45
|
|
|
44
46
|
def _filters_to_query(filters: list[tuple[str, str, list]]) -> str:
|
|
45
47
|
"""Transform a list of filters into a query string.
|
|
@@ -6,18 +6,20 @@ http/raw caches into a single Scope-keyed view.
|
|
|
6
6
|
|
|
7
7
|
import contextlib
|
|
8
8
|
import json
|
|
9
|
+
import logging
|
|
9
10
|
import time
|
|
10
11
|
import warnings
|
|
11
12
|
from pathlib import Path
|
|
12
|
-
from typing import TYPE_CHECKING
|
|
13
|
+
from typing import TYPE_CHECKING
|
|
13
14
|
|
|
14
15
|
from oda_data.cache.config import oda_data_cache_root
|
|
15
16
|
from oda_data.cache.types import CacheRecord, ReleaseInfo, Scope, _validate_scope
|
|
16
|
-
from oda_data.logger import logger
|
|
17
17
|
|
|
18
18
|
if TYPE_CHECKING:
|
|
19
19
|
from oda_data.api.sources import Source
|
|
20
20
|
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
21
23
|
# Scopes that belong to oda_data's own disk layout.
|
|
22
24
|
_ODA_DATA_SCOPES: tuple[str, ...] = ("bulk", "query")
|
|
23
25
|
# Leaf sub-directory names inside cache_root / "oda-data".
|
|
@@ -484,12 +486,9 @@ def release_info(dataset: "type[Source] | str") -> ReleaseInfo | None:
|
|
|
484
486
|
)
|
|
485
487
|
|
|
486
488
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
def _all_source_subclasses(base: type[_T]) -> list[type[_T]]:
|
|
489
|
+
def _all_source_subclasses[T](base: type[T]) -> list[type[T]]:
|
|
491
490
|
"""Recursively collect all concrete subclasses of *base*."""
|
|
492
|
-
result: list[type[
|
|
491
|
+
result: list[type[T]] = []
|
|
493
492
|
for sub in base.__subclasses__():
|
|
494
493
|
result.append(sub)
|
|
495
494
|
result.extend(_all_source_subclasses(sub))
|
|
@@ -4,6 +4,7 @@ Priority: set_cache_root() override > ODA_DATA_CACHE_DIR env var >
|
|
|
4
4
|
platformdirs default (user_cache_dir("oda-data") / __version__).
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import logging
|
|
7
8
|
import os
|
|
8
9
|
import warnings
|
|
9
10
|
from importlib.metadata import PackageNotFoundError
|
|
@@ -12,7 +13,7 @@ from pathlib import Path
|
|
|
12
13
|
|
|
13
14
|
import platformdirs
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
16
17
|
|
|
17
18
|
try:
|
|
18
19
|
_PACKAGE_VERSION = _pkg_version("oda_data")
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import string
|
|
2
3
|
import warnings
|
|
3
4
|
from typing import Literal
|
|
@@ -6,7 +7,8 @@ import pandas as pd
|
|
|
6
7
|
|
|
7
8
|
from oda_data.clean_data.schema import ODASchema
|
|
8
9
|
from oda_data.config import ODAPaths
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
10
12
|
|
|
11
13
|
CROSSWALK_FILE = "multilateral_channel_crosswalk.csv"
|
|
12
14
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import logging
|
|
2
3
|
import pathlib
|
|
3
4
|
from functools import partial
|
|
4
5
|
from pathlib import Path
|
|
@@ -12,7 +13,8 @@ from oda_data.clean_data.dtypes import set_default_types
|
|
|
12
13
|
from oda_data.clean_data.schema import CRS_MAPPING, ODASchema
|
|
13
14
|
from oda_data.clean_data.validation import validate_currency
|
|
14
15
|
from oda_data.config import ODAPaths
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
def clean_column_name(column_name: str) -> str:
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from collections import defaultdict
|
|
2
3
|
|
|
3
4
|
import pandas as pd
|
|
4
5
|
|
|
5
6
|
from oda_data.clean_data.schema import ODASchema
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
7
9
|
|
|
8
10
|
FALLBACK_STRING_DTYPE = "string[pyarrow]"
|
|
9
11
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Deprecated until 3.0: configure logging.getLogger("oda_data") instead."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
warnings.warn(
|
|
7
|
+
"oda_data.logger is deprecated and will be removed in 3.0. "
|
|
8
|
+
"Configure logging.getLogger('oda_data') instead.",
|
|
9
|
+
DeprecationWarning,
|
|
10
|
+
stacklevel=2,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger("oda_data")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def setup_logger(name: str) -> logging.Logger:
|
|
17
|
+
"""Attach an INFO stderr handler to the named logger and stop it propagating.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
name: The name of the logger.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
The configured logger.
|
|
24
|
+
"""
|
|
25
|
+
logger_ = logging.getLogger(name)
|
|
26
|
+
logger_.setLevel(logging.INFO)
|
|
27
|
+
|
|
28
|
+
if not logger_.handlers:
|
|
29
|
+
console_handler = logging.StreamHandler()
|
|
30
|
+
console_handler.setLevel(logging.INFO)
|
|
31
|
+
console_handler.setFormatter(
|
|
32
|
+
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
33
|
+
)
|
|
34
|
+
logger_.addHandler(console_handler)
|
|
35
|
+
|
|
36
|
+
logger_.propagate = False
|
|
37
|
+
|
|
38
|
+
return logger_
|
|
@@ -12,6 +12,7 @@ Design follows pydeflate patterns for robustness and thread safety.
|
|
|
12
12
|
import contextlib
|
|
13
13
|
import hashlib
|
|
14
14
|
import json
|
|
15
|
+
import logging
|
|
15
16
|
import os
|
|
16
17
|
import socket
|
|
17
18
|
import threading
|
|
@@ -27,9 +28,10 @@ import pandas as pd
|
|
|
27
28
|
from cachetools import TTLCache
|
|
28
29
|
from filelock import FileLock
|
|
29
30
|
|
|
30
|
-
from oda_data.logger import logger
|
|
31
31
|
from oda_data.tools.names.create_mapping import snake_to_pascal
|
|
32
32
|
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
33
35
|
# ISO format for timestamps
|
|
34
36
|
ISO_FORMAT = "%Y-%m-%dT%H:%M:%S%z"
|
|
35
37
|
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def setup_logger(name: str) -> logging.Logger:
|
|
5
|
-
"""Set up the logger.
|
|
6
|
-
|
|
7
|
-
Args:
|
|
8
|
-
name (str): The name of the logger.
|
|
9
|
-
|
|
10
|
-
Returns:
|
|
11
|
-
logging.Logger: The logger.
|
|
12
|
-
"""
|
|
13
|
-
logger_ = logging.getLogger(name)
|
|
14
|
-
logger_.setLevel(logging.INFO)
|
|
15
|
-
|
|
16
|
-
# Avoid adding multiple handlers
|
|
17
|
-
if not logger_.handlers:
|
|
18
|
-
console_handler = logging.StreamHandler()
|
|
19
|
-
console_handler.setLevel(logging.INFO)
|
|
20
|
-
|
|
21
|
-
formatter = logging.Formatter(
|
|
22
|
-
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
23
|
-
)
|
|
24
|
-
console_handler.setFormatter(formatter)
|
|
25
|
-
|
|
26
|
-
logger_.addHandler(console_handler)
|
|
27
|
-
|
|
28
|
-
# Disable propagation to the root logger
|
|
29
|
-
logger_.propagate = False
|
|
30
|
-
|
|
31
|
-
return logger_
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
logger = setup_logger("oda_data")
|
|
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
|
{oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/multilateral_channel_crosswalk.csv
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|