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.
Files changed (81) hide show
  1. {oda_data-2.8.2 → oda_data-2.9.0}/PKG-INFO +5 -5
  2. {oda_data-2.8.2 → oda_data-2.9.0}/README.md +1 -1
  3. {oda_data-2.8.2 → oda_data-2.9.0}/pyproject.toml +8 -8
  4. {oda_data-2.8.2 → oda_data-2.9.0}/pyproject.toml.orig +11 -12
  5. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/oecd.py +3 -1
  6. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/sources.py +3 -1
  7. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/api.py +6 -7
  8. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/config.py +2 -1
  9. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/channels.py +3 -1
  10. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/common.py +3 -1
  11. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/dtypes.py +3 -1
  12. oda_data-2.9.0/src/oda_data/logger.py +38 -0
  13. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/cache.py +3 -1
  14. oda_data-2.8.2/src/oda_data/logger.py +0 -34
  15. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/__init__.py +0 -0
  16. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/__init__.py +0 -0
  17. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/constants.py +0 -0
  18. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/api/representations.py +0 -0
  19. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/__init__.py +0 -0
  20. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/_migrate.py +0 -0
  21. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/cache/types.py +0 -0
  22. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/__init__.py +0 -0
  23. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/channel_share_proxies.csv +0 -0
  24. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/crs_channel_mapping.csv +0 -0
  25. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/crs_channel_mapping_vintage.json +0 -0
  26. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/multilateral_channel_crosswalk.csv +0 -0
  27. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/schema.py +0 -0
  28. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/clean_data/validation.py +0 -0
  29. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/config.py +0 -0
  30. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/__init__.py +0 -0
  31. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/common.py +0 -0
  32. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/__init__.py +0 -0
  33. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/common.py +0 -0
  34. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/crs_functions.py +0 -0
  35. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/crs_indicators.json +0 -0
  36. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/oecd.py +0 -0
  37. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/crs/one.py +0 -0
  38. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/__init__.py +0 -0
  39. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/common.py +0 -0
  40. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/dac1_functions.py +0 -0
  41. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/dac1_indicators.json +0 -0
  42. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/oecd.py +0 -0
  43. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac1/one.py +0 -0
  44. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/__init__.py +0 -0
  45. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/common.py +0 -0
  46. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/dac2a_functions.py +0 -0
  47. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/dac2a_indicators.json +0 -0
  48. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/oecd.py +0 -0
  49. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/dac2a/one.py +0 -0
  50. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/indicator.py +0 -0
  51. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/__init__.py +0 -0
  52. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/eu.py +0 -0
  53. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/imputation_quality.py +0 -0
  54. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/imputation_shares.py +0 -0
  55. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/policy_markers.py +0 -0
  56. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/indicators/research/sector_imputations.py +0 -0
  57. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/oda_data_indicators.csv +0 -0
  58. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_flow_types.json +0 -0
  59. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_modalities.json +0 -0
  60. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_policy_markers.json +0 -0
  61. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_purpose.json +0 -0
  62. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/crs_type_of_finance.json +0 -0
  63. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/dac1_aid_flow_types.json +0 -0
  64. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/dac2a_aid_type.json +0 -0
  65. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/flow_types.json +0 -0
  66. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/indicators.json +0 -0
  67. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/key_columns.json +0 -0
  68. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/provider_groupings.json +0 -0
  69. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/recipient_groupings.json +0 -0
  70. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/settings/v1_indicators_mapping.json +0 -0
  71. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/__init__.py +0 -0
  72. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/compatibility.py +0 -0
  73. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/gni.py +0 -0
  74. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/groupings.py +0 -0
  75. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/__init__.py +0 -0
  76. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/add.py +0 -0
  77. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/create_mapping.py +0 -0
  78. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/crs_names.json +0 -0
  79. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/dac1_names.json +0 -0
  80. {oda_data-2.8.2 → oda_data-2.9.0}/src/oda_data/tools/names/dac2a_names.json +0 -0
  81. {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.8.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.9.0
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.11
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.11 and above.
67
+ The package is compatible with Python 3.12 and above.
68
68
 
69
69
  ## Basic usage
70
70
 
@@ -33,7 +33,7 @@ The latest version of the package can be installed using pip:
33
33
  pip install oda-data --upgrade
34
34
  ```
35
35
 
36
- The package is compatible with Python 3.11 and above.
36
+ The package is compatible with Python 3.12 and above.
37
37
 
38
38
  ## Basic usage
39
39
 
@@ -1,8 +1,8 @@
1
1
  [project]
2
2
  name = "oda_data"
3
- version = "2.8.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.11"
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.9.0",
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 ; python_version >= '3.12'",
66
- "pyyaml>=6.0 ; python_version >= '3.12'",
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 = "py311"
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.11"
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.8.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.11"
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.9.0",
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 (resolvekit needs
64
- # Python >=3.12, oda_data supports >=3.11). Install explicitly with
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 ; python_version >= '3.12'",
68
- "pyyaml>=6.0 ; python_version >= '3.12'",
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.11+
82
- target-version = "py311"
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.11"
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, TypeVar
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
- _T = TypeVar("_T")
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[_T]] = []
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
- from oda_data.logger import logger
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
- from oda_data.logger import logger
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
- from oda_data.logger import logger
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
- from oda_data.logger import logger
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")