ckanapi-harvesters 0.0.0__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. ckanapi_harvesters/__init__.py +32 -10
  2. ckanapi_harvesters/auxiliary/__init__.py +26 -0
  3. ckanapi_harvesters/auxiliary/ckan_action.py +93 -0
  4. ckanapi_harvesters/auxiliary/ckan_api_key.py +213 -0
  5. ckanapi_harvesters/auxiliary/ckan_auxiliary.py +293 -0
  6. ckanapi_harvesters/auxiliary/ckan_configuration.py +50 -0
  7. ckanapi_harvesters/auxiliary/ckan_defs.py +10 -0
  8. ckanapi_harvesters/auxiliary/ckan_errors.py +129 -0
  9. ckanapi_harvesters/auxiliary/ckan_map.py +509 -0
  10. ckanapi_harvesters/auxiliary/ckan_model.py +992 -0
  11. ckanapi_harvesters/auxiliary/ckan_vocabulary_deprecated.py +104 -0
  12. ckanapi_harvesters/auxiliary/deprecated.py +82 -0
  13. ckanapi_harvesters/auxiliary/error_level_message.py +51 -0
  14. ckanapi_harvesters/auxiliary/external_code_import.py +98 -0
  15. ckanapi_harvesters/auxiliary/list_records.py +60 -0
  16. ckanapi_harvesters/auxiliary/login.py +163 -0
  17. ckanapi_harvesters/auxiliary/path.py +208 -0
  18. ckanapi_harvesters/auxiliary/proxy_config.py +298 -0
  19. ckanapi_harvesters/auxiliary/urls.py +40 -0
  20. ckanapi_harvesters/builder/__init__.py +40 -0
  21. ckanapi_harvesters/builder/builder_aux.py +20 -0
  22. ckanapi_harvesters/builder/builder_ckan.py +238 -0
  23. ckanapi_harvesters/builder/builder_errors.py +36 -0
  24. ckanapi_harvesters/builder/builder_field.py +122 -0
  25. ckanapi_harvesters/builder/builder_package.py +9 -0
  26. ckanapi_harvesters/builder/builder_package_1_basic.py +1291 -0
  27. ckanapi_harvesters/builder/builder_package_2_harvesters.py +40 -0
  28. ckanapi_harvesters/builder/builder_package_3_multi_threaded.py +45 -0
  29. ckanapi_harvesters/builder/builder_package_example.xlsx +0 -0
  30. ckanapi_harvesters/builder/builder_resource.py +589 -0
  31. ckanapi_harvesters/builder/builder_resource_datastore.py +561 -0
  32. ckanapi_harvesters/builder/builder_resource_datastore_multi_abc.py +367 -0
  33. ckanapi_harvesters/builder/builder_resource_datastore_multi_folder.py +273 -0
  34. ckanapi_harvesters/builder/builder_resource_datastore_multi_harvester.py +278 -0
  35. ckanapi_harvesters/builder/builder_resource_datastore_unmanaged.py +145 -0
  36. ckanapi_harvesters/builder/builder_resource_datastore_url.py +150 -0
  37. ckanapi_harvesters/builder/builder_resource_init.py +126 -0
  38. ckanapi_harvesters/builder/builder_resource_multi_abc.py +361 -0
  39. ckanapi_harvesters/builder/builder_resource_multi_datastore.py +146 -0
  40. ckanapi_harvesters/builder/builder_resource_multi_file.py +505 -0
  41. ckanapi_harvesters/builder/example/__init__.py +21 -0
  42. ckanapi_harvesters/builder/example/builder_example.py +21 -0
  43. ckanapi_harvesters/builder/example/builder_example_aux_fun.py +24 -0
  44. ckanapi_harvesters/builder/example/builder_example_download.py +44 -0
  45. ckanapi_harvesters/builder/example/builder_example_generate_data.py +73 -0
  46. ckanapi_harvesters/builder/example/builder_example_patch_upload.py +51 -0
  47. ckanapi_harvesters/builder/example/builder_example_policy.py +114 -0
  48. ckanapi_harvesters/builder/example/builder_example_test_sql.py +53 -0
  49. ckanapi_harvesters/builder/example/builder_example_tests.py +87 -0
  50. ckanapi_harvesters/builder/example/builder_example_tests_offline.py +57 -0
  51. ckanapi_harvesters/builder/example/package/ckan-dpg.svg +74 -0
  52. ckanapi_harvesters/builder/example/package/users_local.csv +3 -0
  53. ckanapi_harvesters/builder/mapper_datastore.py +93 -0
  54. ckanapi_harvesters/builder/mapper_datastore_multi.py +262 -0
  55. ckanapi_harvesters/builder/specific/__init__.py +11 -0
  56. ckanapi_harvesters/builder/specific/configuration_builder.py +66 -0
  57. ckanapi_harvesters/builder/specific_builder_abc.py +23 -0
  58. ckanapi_harvesters/ckan_api/__init__.py +20 -0
  59. ckanapi_harvesters/ckan_api/ckan_api.py +11 -0
  60. ckanapi_harvesters/ckan_api/ckan_api_0_base.py +896 -0
  61. ckanapi_harvesters/ckan_api/ckan_api_1_map.py +1028 -0
  62. ckanapi_harvesters/ckan_api/ckan_api_2_readonly.py +934 -0
  63. ckanapi_harvesters/ckan_api/ckan_api_3_policy.py +229 -0
  64. ckanapi_harvesters/ckan_api/ckan_api_4_readwrite.py +579 -0
  65. ckanapi_harvesters/ckan_api/ckan_api_5_manage.py +1225 -0
  66. ckanapi_harvesters/ckan_api/ckan_api_params.py +192 -0
  67. ckanapi_harvesters/ckan_api/deprecated/__init__.py +9 -0
  68. ckanapi_harvesters/ckan_api/deprecated/ckan_api_deprecated.py +267 -0
  69. ckanapi_harvesters/ckan_api/deprecated/ckan_api_deprecated_vocabularies.py +189 -0
  70. ckanapi_harvesters/harvesters/__init__.py +23 -0
  71. ckanapi_harvesters/harvesters/data_cleaner/__init__.py +17 -0
  72. ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_abc.py +240 -0
  73. ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_errors.py +23 -0
  74. ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload.py +9 -0
  75. ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload_1_basic.py +430 -0
  76. ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload_2_geom.py +98 -0
  77. ckanapi_harvesters/harvesters/file_formats/__init__.py +10 -0
  78. ckanapi_harvesters/harvesters/file_formats/csv_format.py +43 -0
  79. ckanapi_harvesters/harvesters/file_formats/file_format_abc.py +39 -0
  80. ckanapi_harvesters/harvesters/file_formats/file_format_init.py +25 -0
  81. ckanapi_harvesters/harvesters/file_formats/shp_format.py +129 -0
  82. ckanapi_harvesters/harvesters/harvester_abc.py +190 -0
  83. ckanapi_harvesters/harvesters/harvester_errors.py +31 -0
  84. ckanapi_harvesters/harvesters/harvester_init.py +30 -0
  85. ckanapi_harvesters/harvesters/harvester_model.py +49 -0
  86. ckanapi_harvesters/harvesters/harvester_params.py +323 -0
  87. ckanapi_harvesters/harvesters/postgre_harvester.py +495 -0
  88. ckanapi_harvesters/harvesters/postgre_params.py +86 -0
  89. ckanapi_harvesters/harvesters/pymongo_data_cleaner.py +173 -0
  90. ckanapi_harvesters/harvesters/pymongo_harvester.py +355 -0
  91. ckanapi_harvesters/harvesters/pymongo_params.py +54 -0
  92. ckanapi_harvesters/policies/__init__.py +20 -0
  93. ckanapi_harvesters/policies/data_format_policy.py +269 -0
  94. ckanapi_harvesters/policies/data_format_policy_abc.py +97 -0
  95. ckanapi_harvesters/policies/data_format_policy_custom_fields.py +156 -0
  96. ckanapi_harvesters/policies/data_format_policy_defs.py +135 -0
  97. ckanapi_harvesters/policies/data_format_policy_errors.py +79 -0
  98. ckanapi_harvesters/policies/data_format_policy_lists.py +234 -0
  99. ckanapi_harvesters/policies/data_format_policy_tag_groups.py +35 -0
  100. ckanapi_harvesters/reports/__init__.py +11 -0
  101. ckanapi_harvesters/reports/admin_report.py +292 -0
  102. {ckanapi_harvesters-0.0.0.dist-info → ckanapi_harvesters-0.0.3.dist-info}/METADATA +84 -38
  103. ckanapi_harvesters-0.0.3.dist-info/RECORD +105 -0
  104. ckanapi_harvesters/divider/__init__.py +0 -27
  105. ckanapi_harvesters/divider/divider.py +0 -53
  106. ckanapi_harvesters/divider/divider_error.py +0 -59
  107. ckanapi_harvesters/main.py +0 -30
  108. ckanapi_harvesters-0.0.0.dist-info/RECORD +0 -9
  109. {ckanapi_harvesters-0.0.0.dist-info → ckanapi_harvesters-0.0.3.dist-info}/WHEEL +0 -0
  110. {ckanapi_harvesters-0.0.0.dist-info → ckanapi_harvesters-0.0.3.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ckanapi_harvesters
3
- Version: 0.0.0
4
- Summary: Adaptation of the template for github.
3
+ Version: 0.0.3
4
+ Summary: Package helping to upload local resources to a CKAN server using the CKAN API. Metadata and the list of resources can be defined in an Excel spreadsheet. The package includes requests to download resources and checks metadata against formatting rules.
5
+ Author-email: ifpen-gp <63413841+ifpen-gp@users.noreply.github.com>
6
+ Maintainer-email: ifpen-gp <63413841+ifpen-gp@users.noreply.github.com>
5
7
  License: MIT License
6
8
 
7
- Copyright (c) 2024 ifpen
9
+ Copyright (c) 2026 IFPEN
8
10
 
9
11
  Permission is hereby granted, free of charge, to any person obtaining a copy
10
12
  of this software and associated documentation files (the "Software"), to deal
@@ -24,25 +26,91 @@ License: MIT License
24
26
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
27
  SOFTWARE.
26
28
 
27
- Classifier: Programming Language :: Python :: 3.12
29
+ Project-URL: Documentation, https://mobidec.github.io/ckanapi_harvesters/index.html
30
+ Project-URL: Repository, https://github.com/Mobidec/ckanapi_harvesters.git
31
+ Project-URL: Issues, https://github.com/Mobidec/ckanapi_harvesters/issues
32
+ Classifier: Programming Language :: Python :: 3.10
28
33
  Classifier: License :: OSI Approved :: MIT License
29
34
  Classifier: Operating System :: OS Independent
30
- Requires-Python: >=3.12
35
+ Requires-Python: >=3.10
31
36
  Description-Content-Type: text/markdown
32
37
  Requires-Dist: pytest==8.0.1
38
+ Requires-Dist: myst-nb>=1.3.0
39
+ Requires-Dist: requests>=2.32.5
40
+ Requires-Dist: pandas>=2.3.3
41
+ Requires-Dist: numpy>=2.2.6
42
+ Requires-Dist: openpyxl>=3.1.5
43
+ Provides-Extra: extras
44
+ Requires-Dist: pymongo>=4.8.0; extra == "extras"
45
+ Requires-Dist: psycopg2>=2.9.11; extra == "extras"
46
+ Requires-Dist: shapely>=2.1.2; extra == "extras"
47
+ Requires-Dist: pyproj==3.6.1; extra == "extras"
48
+ Requires-Dist: geopandas>=1.1.2; extra == "extras"
49
+ Provides-Extra: harvesters
50
+ Requires-Dist: pymongo>=4.8.0; extra == "harvesters"
51
+ Requires-Dist: psycopg2>=2.9.11; extra == "harvesters"
52
+ Requires-Dist: shapely>=2.1.2; extra == "harvesters"
53
+ Requires-Dist: pyproj==3.6.1; extra == "harvesters"
54
+ Provides-Extra: alt
55
+ Requires-Dist: bson; extra == "alt"
56
+ Requires-Dist: shapely>=2.1.2; extra == "alt"
57
+ Requires-Dist: pyproj==3.6.1; extra == "alt"
58
+ Requires-Dist: geopandas>=1.1.2; extra == "alt"
33
59
 
34
60
  # ckanapi_harvesters
35
61
 
62
+ <img src="https://raw.githubusercontent.com/Mobidec/ckanapi_harvesters/refs/heads/main/doc/assets/France2030-Logo-1024x576.png" alt="logo">
63
+
36
64
  ---
37
65
 
38
66
  ## Description
39
67
 
40
- This "Python Package" template is a complete template designed to create a Python package according to IFPEN's development standards, deployable internally within IFPEN or on the Cloud. This template provides developers with a Python project architecture in which they can contribute, document, and make it available to all IFPEN developers.
68
+ This package enables users to benefit from the CKAN API and provides functions which
69
+ realize complex API calls to achieve specific operations.
70
+ In this package, DataStores are returned/inputted as pandas DataFrames.
71
+ The underlying request mechanism uses the requests Session object, which improves performance with multiple requests.
72
+ This package is oriented in the management of CKAN datasets and resources.
73
+ Only a selection of API calls has been implemented in this objective.
74
+ To perform custom API calls, the function `api_action_call` is provided to the end user.
75
+ This package was initially designed to harvest a large DataStores from your local file system.
76
+ It also implements particular requests which can define a large DataStore.
77
+ Large datasets composed of multiple files can be uploaded/downloaded
78
+ through scripts into a single resource or multiple resources.
79
+ For a DataStore, large files are uploaded with a limited number of rows per request.
80
+
81
+ The package is divided in the following sections:
82
+ - `ckan_api`: functions interacting with the CKAN API.
83
+ In addition to the base class which manages basic parameters and requests, API functions are divided as follows:
84
+ 1) functions to map the CKAN packages and resources. The remote data structures are mapped in a mirrored data structure.
85
+ CKAN DataStore information, organizations, licenses and resource views are optionally tracked.
86
+ 2) functions to query a DataStore or to download file resources.
87
+ 3) functions to apply a test a data format policy on a given package.
88
+ 4) functions to upsert data to a DataStore or to upload files to a resource.
89
+ 5) functions to manage CKAN objects
90
+ (creating, patching, or removing packages, resources, and DataStores).
91
+ These functions enable the user to change the metadata for these objects.
92
+ The other objects are meant to be managed through the API.
93
+ - `policies`: functions to check data format policies. A data format policy defines which attributes
94
+ are mandatory for a package or resource.
95
+ Specific rules can be implemented to restrict package tags to certain lists,
96
+ grouped by [vocabulary](https://docs.ckan.org/en/2.9/maintaining/tag-vocabularies.html).
97
+ Extra key-pair values of packages can be enforced. Resource formats can be restricted to a certain list.
98
+ - `reports`: functions to extract a report on the CKAN database in order to monitor
99
+ package user access rights, resource memory occupation, modification dates and data format policy messages.
100
+ - `harvesters`: this module implements ways to load data from your local machine.
101
+ - `file_formats`: The primary approach is to use files on you local file system. The CSV and SHP (shape file) formats are currently supported.
102
+ - In addition to the file formats, harvesters have been implemented to transfer data from a database.
103
+ This is particularly useful if the database cannot be accessed by CKAN harvester extensions
104
+ because it would only be available locally. MongoDB and PostgreSQL databases are currently supported.
105
+ - `builder`: functions to automate package and resource metadata patching and data uploads or downloads.
106
+ These parameters can be defined in an Excel workbook and files from the local file system can be referred as inputs for the data upload.
107
+ The parameters can also be deduced from an online CKAN package through the API.
108
+ - Example scripts are given in this module, referring to an example Excel workbook.
109
+ The Excel workbook is available in the package and at this link:
110
+ [builder_package_example.xlsx](src/ckanapi_harvesters/builder/builder_package_example.xlsx)
111
+ See also the notebook example in the current documentation here:
112
+ [builder_example_notebook.ipynb](sphinx/notebooks/builder_example_notebook.ipynb).
41
113
 
42
- This package includes:
43
- - A unit test structure based on the [Pytest](https://docs.pytest.org/en/stable/) library
44
- - Automatic documentation generation based on the [Sphinx](https://www.sphinx-doc.org/en/master/) library
45
- - A CI/CD pipeline for deploying the Python package to a Python server
46
114
 
47
115
  ## Github Pages
48
116
 
@@ -130,51 +198,29 @@ For more details on contributing and best practices, please refer to the `CONTRI
130
198
 
131
199
  ### Installation
132
200
 
133
- If you are using the provided `pip.conf`, you can simply run:
134
-
135
- ```bash
136
- pip install ckanapi_harvesters
137
- ```
138
-
139
- Otherwise, you can specify the package index depending on whether you are in an internal (on-premise) or external (cloud) environment.
201
+ The package and its optional dependencies can be installed with the following command:
140
202
 
141
203
  ```bash
142
- # On-premise
143
- pip install ckanapi_harvesters --extra-index-url https://nexus.ifpen.fr/repository/fast-it/simple
144
-
145
- # On Cloud
146
- pip install ckanapi_harvesters --extra-index-url https://nexus.fastit.dev/repository/fast-it/simple
204
+ pip install ckanapi_harvesters[extras]
147
205
  ```
148
206
 
149
- Alternatively, you can set the package index URL as an environment variable:
150
-
151
- ```bash
152
- # On-premise
153
- export PIP_EXTRA_INDEX_URL=https://nexus.fastit.dev/repository/fast-it/simple
154
-
155
- # On Cloud
156
- export PIP_EXTRA_INDEX_URL=https://nexus.ifpen.fr/repository/fast-it/simple
157
- ```
158
207
 
159
208
  ### Example Usage of the Python Package in Your Code
160
209
 
161
210
  After installation, you can import and use your package and its functions in your Python code:
162
211
 
163
212
  ```python
164
- from package import hello_world
213
+ from ckanapi_harvesters import CkanApi
165
214
 
166
- hello_world()
215
+ ckan = CkanApi()
167
216
  ```
168
217
 
169
218
  To use sub-modules defined in the package:
170
219
 
171
220
  ```python
172
- from package.divider import divide
173
-
174
- a = 4.0
175
- b = 2.0
221
+ from ckanapi_harvesters.ckan_api import CkanApi
176
222
 
177
- c = divide(4., 2.)
223
+ ckan = CkanApi()
178
224
  ```
179
225
 
180
226
  These instructions will allow you to access the package and utilize its features effectively and in line with your development configuration.
@@ -0,0 +1,105 @@
1
+ ckanapi_harvesters/__init__.py,sha256=CzcdP6BDnmn0PT3Uw9E-ywlyZYQku75IJUQOXohjW-w,969
2
+ ckanapi_harvesters/auxiliary/__init__.py,sha256=mucS9WzDW0NMx4NF8N40kVxJe3myv0mjR2X7vWz1n3E,638
3
+ ckanapi_harvesters/auxiliary/ckan_action.py,sha256=13gkIY4BB3uZLbyRMfx4Du3cDsdcEBtKfCGf4IKAUf8,3864
4
+ ckanapi_harvesters/auxiliary/ckan_api_key.py,sha256=Q_iXEKtuNXwAlAnfWsR2Y8dUw64tnsoAu1C6CHjLcXY,8079
5
+ ckanapi_harvesters/auxiliary/ckan_auxiliary.py,sha256=8OSFy0S2fEIOxbrxsBuIgT-uIkkHOVlEZRczrGgqyTg,10163
6
+ ckanapi_harvesters/auxiliary/ckan_configuration.py,sha256=0MaDykLUPyjeFG44ehW2KjRGCKvwjaGbkqJJ18wrv1c,1165
7
+ ckanapi_harvesters/auxiliary/ckan_defs.py,sha256=IAZ0IJG7fUa_gJ54JgvoJIPUp4X5GNUwsNw7XD9UIYU,272
8
+ ckanapi_harvesters/auxiliary/ckan_errors.py,sha256=WC3p5HFQAuRV7_Krh1Swcjve9YZ2-t2PbVwncd98VtU,5173
9
+ ckanapi_harvesters/auxiliary/ckan_map.py,sha256=9p_o7OTSHWnK0SXd9_Sg9Fd2dpXrtKrpLAVTk5_70xM,24922
10
+ ckanapi_harvesters/auxiliary/ckan_model.py,sha256=pqS2jVX105DGzuaAV202zGQQpaqzF7gzvUe_jVKiofI,41215
11
+ ckanapi_harvesters/auxiliary/ckan_vocabulary_deprecated.py,sha256=Hj_ZqcpkHa8EVCrnrqEFCopudyPMXdFvQINsW1kKwtE,4079
12
+ ckanapi_harvesters/auxiliary/deprecated.py,sha256=_uFN1au77bG9iEHBb_tZ1eghOUNaEP5mmhQuq8Mgbfs,1934
13
+ ckanapi_harvesters/auxiliary/error_level_message.py,sha256=VKbdRW8E5I4vo0xJtpwqMT6r_KNmDGwipNiFnaHPtuw,1361
14
+ ckanapi_harvesters/auxiliary/external_code_import.py,sha256=O0PULu2QHdWPRYcxV_yEWkJtyjjhcza-uuxRJoQEW6Y,3747
15
+ ckanapi_harvesters/auxiliary/list_records.py,sha256=GaaJqdVdkvhLeSp93e1rEcysJOzPzlNEAkp3cBkDyGw,1936
16
+ ckanapi_harvesters/auxiliary/login.py,sha256=Rbymmd7-iRExOyeaqFN5-L8XtxNowv9eT7-lzSr2zgc,5984
17
+ ckanapi_harvesters/auxiliary/path.py,sha256=6lP5tEcf-zKkju2x844W7Dykh5lwupGhUVhuBgDko64,8278
18
+ ckanapi_harvesters/auxiliary/proxy_config.py,sha256=x2fRvQtMKAZ3tMcHA7WKqi1_Tp4nnAhdzWv5zrQ__Dw,13215
19
+ ckanapi_harvesters/auxiliary/urls.py,sha256=NGZDMTx3gEIbnGXHJha2GpEaY0CQxdlLXGhICrOrRjY,980
20
+ ckanapi_harvesters/builder/__init__.py,sha256=6LwyiXT0EwMbGBfIlcN-rAAJ1S6QqfxnZEKGVMpZxvg,1355
21
+ ckanapi_harvesters/builder/builder_aux.py,sha256=BoqggxqM_TFQrK3Zhi3IyT2M5iPXHGxN9oCrYUXNuo4,579
22
+ ckanapi_harvesters/builder/builder_ckan.py,sha256=KijnPYFmyDBZL5hHEJzFlg_CgRTHMQs-3FTKYFbLTnM,11153
23
+ ckanapi_harvesters/builder/builder_errors.py,sha256=hgcQkELxB71cE_fztko6I19-JoFlk-UPZFd5UFw0vgA,1518
24
+ ckanapi_harvesters/builder/builder_field.py,sha256=r-NISkj_yX_RNVtGC9nfGRnKRSxVYAsSIGrQlnizXJw,5387
25
+ ckanapi_harvesters/builder/builder_package.py,sha256=gaZj6E7UedByZfIC9shjDAMQO4lJ3xwvsZSFmht8cPI,304
26
+ ckanapi_harvesters/builder/builder_package_1_basic.py,sha256=R3P1MN0dKx_QMcz440LF7Q8GL8q6kND4AUffrBaQT0Q,68726
27
+ ckanapi_harvesters/builder/builder_package_2_harvesters.py,sha256=l44tB4SOs99aYUaW0MtBncKTeg3Xmi1x4rmKqxtkeAg,2080
28
+ ckanapi_harvesters/builder/builder_package_3_multi_threaded.py,sha256=eX2RGspFTdoj_EzUt7q1x1IOYWCtzl-BotVI87qS6yg,2167
29
+ ckanapi_harvesters/builder/builder_package_example.xlsx,sha256=a-5hIgtVWTMOMVqgzw7k_1uCUF58ARX77v6k2q9fG94,34019
30
+ ckanapi_harvesters/builder/builder_resource.py,sha256=5ZZDS6IMMsvWHqdWZ2ocSsNA_sTKM98VW7VWfI6Tb14,25306
31
+ ckanapi_harvesters/builder/builder_resource_datastore.py,sha256=bSi-sahe5SUv7_8N51KDoyH1EHYb38Ux4H5PORRsUtg,29266
32
+ ckanapi_harvesters/builder/builder_resource_datastore_multi_abc.py,sha256=FB37SWtekjE0kXHWlZYofl_T09Nq5tKu8tlT9rWJeqE,21781
33
+ ckanapi_harvesters/builder/builder_resource_datastore_multi_folder.py,sha256=0rf90lGAqUHHkLD_K6N6Nut8qHgtSHaWlZPRygZ3RdE,15839
34
+ ckanapi_harvesters/builder/builder_resource_datastore_multi_harvester.py,sha256=TmoLW2PmGmcwrjqLDOSxAR52pR9xXbt6nj4qmvslYIU,15839
35
+ ckanapi_harvesters/builder/builder_resource_datastore_unmanaged.py,sha256=VJQfsHkt4EWaWK55RTqOrPpqPTjsxP04cf7UwIj5dtY,7845
36
+ ckanapi_harvesters/builder/builder_resource_datastore_url.py,sha256=GLCiX0MskYXGenJhAjcfF8cvhxu-XskZ9n9NRXtAVg0,8034
37
+ ckanapi_harvesters/builder/builder_resource_init.py,sha256=dH-3eG8cmYQYBl4B7hUdU3Pa6nevW8J-4KIiFcI2jnM,6063
38
+ ckanapi_harvesters/builder/builder_resource_multi_abc.py,sha256=TplSdLQm68CWLACKwS3n4dAij_O5X8xAUetbStUnxz0,17342
39
+ ckanapi_harvesters/builder/builder_resource_multi_datastore.py,sha256=gymq6tDPvJoHNFbBLmI8uYGmmWTMciMGjdJ48Vee2u4,7737
40
+ ckanapi_harvesters/builder/builder_resource_multi_file.py,sha256=39Xv-nj7yDg29yl3dUZLbkjslu1o3G5hDFTBMad49KU,29335
41
+ ckanapi_harvesters/builder/mapper_datastore.py,sha256=FWQmuCjlKuklYrHJGvVT7atf9VtXmAQnQpbiGGtagUo,4159
42
+ ckanapi_harvesters/builder/mapper_datastore_multi.py,sha256=YVqs68Bevqy6YEMZFS3c9BBhVsBG7i7nmbRm-_E1COc,13547
43
+ ckanapi_harvesters/builder/specific_builder_abc.py,sha256=HE1ATOCcqqw3bVeziIsmD_R-uRvXHz4PZsGewSrx-M8,1011
44
+ ckanapi_harvesters/builder/example/__init__.py,sha256=tqGf_Zqk9ThdStlK5IGJ_1dTu0cUsolNgb0WflaYf_Y,592
45
+ ckanapi_harvesters/builder/example/builder_example.py,sha256=6xKK7GNP6-zXOq7KsbkF2kBfw-_IByq5Pi8VYVmOGdA,681
46
+ ckanapi_harvesters/builder/example/builder_example_aux_fun.py,sha256=9_qS76QYqLu1MzkDanVTNgn9wQdHMuhwAJydE5PxZfM,835
47
+ ckanapi_harvesters/builder/example/builder_example_download.py,sha256=teL6iusYbTZ_lTVtxavFTgdvBO4h_kqJUJ_KsE7rARs,1268
48
+ ckanapi_harvesters/builder/example/builder_example_generate_data.py,sha256=dspJAdb0biAz_v159nWcDrVaG7uXs1DoXg6EmGQFmt4,3527
49
+ ckanapi_harvesters/builder/example/builder_example_patch_upload.py,sha256=10iaJ78IBJTd-Uti-Q9TLFfz9tQw13UKwvSg9i5NrlM,1634
50
+ ckanapi_harvesters/builder/example/builder_example_policy.py,sha256=-jy89E_z2Mp5SrsS7zd0Y4ubrQn67NHcVxWh6mDyUFQ,4593
51
+ ckanapi_harvesters/builder/example/builder_example_test_sql.py,sha256=Qe4YuqQW1S9LyMjFU7nhaPw2fJwovatsyMYImKiyZI4,1595
52
+ ckanapi_harvesters/builder/example/builder_example_tests.py,sha256=1JxpKoYnRm35J9QW7asS5jSygUYEMv0C6s_wufm2pSg,2934
53
+ ckanapi_harvesters/builder/example/builder_example_tests_offline.py,sha256=VcFxsnUjtkAFwdmSQaphaEPjMgzo6XR3Dubvxece_Yk,1773
54
+ ckanapi_harvesters/builder/example/package/ckan-dpg.svg,sha256=YNk-H1EEu-ipdLt5Ik0nUmtXBqUSU_XoamAkFdOT65A,9683
55
+ ckanapi_harvesters/builder/example/package/users_local.csv,sha256=RR4XfLJ6iBTdneljxJOZEcHc9XnA4H_UrZfOL3Oj9iI,22
56
+ ckanapi_harvesters/builder/specific/__init__.py,sha256=3kjcz4YuZs2NTCtseaTqH9mHPJi25Izv7qSPVJVWRiI,170
57
+ ckanapi_harvesters/builder/specific/configuration_builder.py,sha256=S5eLjp7rK_LVILvo50NYItMsWNMEEeK9qBcsTDfGr1M,3260
58
+ ckanapi_harvesters/ckan_api/__init__.py,sha256=ZEe0P35WNVxhQPUCnaLRIfMBzbL44oOHyYpdWWJLYC0,523
59
+ ckanapi_harvesters/ckan_api/ckan_api.py,sha256=_XmiDL89veF4LODisq1FwWOAkJuWpzynbIAUxKsv_ds,439
60
+ ckanapi_harvesters/ckan_api/ckan_api_0_base.py,sha256=WjICbv1N1N-rIkwmh3D2U6GB5jG0HzNCN-_bhihFrJw,43253
61
+ ckanapi_harvesters/ckan_api/ckan_api_1_map.py,sha256=4N9BE9dlImIdO_XOut7M5nwhe9IY-lvAjtXB9BDgJzs,52537
62
+ ckanapi_harvesters/ckan_api/ckan_api_2_readonly.py,sha256=4g_Ny-6W7TPfx4WAza5XrF6WtqA1ERlu7qXTLa_AYVw,54803
63
+ ckanapi_harvesters/ckan_api/ckan_api_3_policy.py,sha256=zzm7CxYrwlrRWtQq62qJCzoHKM068Z5Fk65eMpv86Ik,11595
64
+ ckanapi_harvesters/ckan_api/ckan_api_4_readwrite.py,sha256=L2WEHJiVq9J_uXgNDr3YDGi8l6HuMmabQAkpSXE2eZ4,30816
65
+ ckanapi_harvesters/ckan_api/ckan_api_5_manage.py,sha256=KFfMjXmqLJZq0btyJVcfTPzKcFb_4psuQpMFVO9vDYI,65578
66
+ ckanapi_harvesters/ckan_api/ckan_api_params.py,sha256=ifk7BL1s-vnK-KIR-GH-bvf3PvT7f8oCxJTQc4zO5C8,9819
67
+ ckanapi_harvesters/ckan_api/deprecated/__init__.py,sha256=-zQ4tbvQMi5VzA9ZEMKr4GLTWyjYBEZu8S96prkzOoE,141
68
+ ckanapi_harvesters/ckan_api/deprecated/ckan_api_deprecated.py,sha256=LXeysnVU9hB6Pm26W12sDOxhzHSLNvifk1hEjseq8oQ,15413
69
+ ckanapi_harvesters/ckan_api/deprecated/ckan_api_deprecated_vocabularies.py,sha256=AsVfgzj3LsuTP7Ib0nHyQ1OREyDqPjLdIVnaP8xGgWI,10131
70
+ ckanapi_harvesters/harvesters/__init__.py,sha256=1oYlbtFbuuAMZCh-eoeqdbf-bQdh5uGX_dbckgyPaDU,509
71
+ ckanapi_harvesters/harvesters/harvester_abc.py,sha256=YrQY_hU4MSXIx54Vv10hhGnsZL-jowhb6eAwAwjR9sw,6252
72
+ ckanapi_harvesters/harvesters/harvester_errors.py,sha256=yPUnh1c0RMFlJLNro4uk8e0rtpwRpqcs2FdgynuGQ14,1176
73
+ ckanapi_harvesters/harvesters/harvester_init.py,sha256=N8kr-yXCpE3_fiLsphxS6vyHcjgNtGgegW49tiaY8ZM,1763
74
+ ckanapi_harvesters/harvesters/harvester_model.py,sha256=ej5a5qp0vLRxe-pYCF-oo6SmRRhFEaNwsDMxAUYG-p4,1407
75
+ ckanapi_harvesters/harvesters/harvester_params.py,sha256=vhIo2rn_jDHNpj5uNHoxtxYUXUFjnXvIZ2LQLCM-ysg,15062
76
+ ckanapi_harvesters/harvesters/postgre_harvester.py,sha256=CX3oTT1CoRtFrQBGFkf0NVhAXA4RfzUTo4fla6t5Lww,23871
77
+ ckanapi_harvesters/harvesters/postgre_params.py,sha256=9fgVia2EdFXg3OPTepUNgKgNL5Z3CACSyEsvFY0AtoM,3490
78
+ ckanapi_harvesters/harvesters/pymongo_data_cleaner.py,sha256=G7vHLaCKrxAj5XlRl5ilKVLw6p8rkZY-OBegFJLqTYs,8312
79
+ ckanapi_harvesters/harvesters/pymongo_harvester.py,sha256=f6Ms0I8g8P4JBW8_r10ijLBwBHQgNATPRC8j-1hOlNA,17997
80
+ ckanapi_harvesters/harvesters/pymongo_params.py,sha256=FCsATBRV_G4kPcQndvcDJFaQ-e63L8k3nJv54E5qAfY,2288
81
+ ckanapi_harvesters/harvesters/data_cleaner/__init__.py,sha256=jgOZJSIHUTUMQ5wEcBjFPhUD6m-G2tEN4qPmbVcfyY0,473
82
+ ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_abc.py,sha256=MKbqQNrOl45cGPAeYvCY_9ut8vYLZOHl9HHYrSc7d5A,10875
83
+ ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_errors.py,sha256=cACi39fOfQlVCjj5T66PtcK4kL3hJFAljukksksHmsg,757
84
+ ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload.py,sha256=e-_EnjtfiPm3Q4SOjKEIUJf_Nwnk5O7zOvopxNSGOlk,298
85
+ ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload_1_basic.py,sha256=0EQBr66BJSmAv5rnwQVGUN_nb-JgJL91yCoznRobARg,22616
86
+ ckanapi_harvesters/harvesters/data_cleaner/data_cleaner_upload_2_geom.py,sha256=yRNHs53ifgW46bzYosoIWqw5Y6o3tSfpl9M32lNTzfw,4456
87
+ ckanapi_harvesters/harvesters/file_formats/__init__.py,sha256=gr9om-0yD_tXQOpzukkbGSomSH7aMukvlDGV8wexxjM,247
88
+ ckanapi_harvesters/harvesters/file_formats/csv_format.py,sha256=zbPxO1SCP9lXM6zJZPB6RHPljAsYOtxSp59ljn-Kh14,1779
89
+ ckanapi_harvesters/harvesters/file_formats/file_format_abc.py,sha256=eOHJ4fsFTpoSoi9GNHuBQPszOlBnnMV3bhk5_eGY-U4,1170
90
+ ckanapi_harvesters/harvesters/file_formats/file_format_init.py,sha256=lM2BFk_mkvneCjAsvRYmQwMvFmjVEGP1FMqEYlBVvXo,786
91
+ ckanapi_harvesters/harvesters/file_formats/shp_format.py,sha256=ZFLmvxI_XZAAcA1I9oCoGC3SBz2citW9fy9Yl32A958,6863
92
+ ckanapi_harvesters/policies/__init__.py,sha256=eXOcIUfYbDVzmG5rE2SDjEzoooDW7cCb9CG-huM6i30,555
93
+ ckanapi_harvesters/policies/data_format_policy.py,sha256=q83oB3HS6eT4m9HJZOI0L1DTp2PsvAFdNHOt_9AoWL0,15044
94
+ ckanapi_harvesters/policies/data_format_policy_abc.py,sha256=5jbeIhotUAFRx5O3hRRtDZW0fb4gD1F1b4Q1LeLUiic,4078
95
+ ckanapi_harvesters/policies/data_format_policy_custom_fields.py,sha256=ONdX-cRdyHwBY2nAmIELRWC24G-73J14UA7lXTiP0CM,7757
96
+ ckanapi_harvesters/policies/data_format_policy_defs.py,sha256=vaWt0F0GEMxeuOi2-KjNjdbmm4-DA8Fa1YgCucayEGE,3483
97
+ ckanapi_harvesters/policies/data_format_policy_errors.py,sha256=ohBXTSIvE-TxdMCSUFM1berq26LoUwB_s2jh4PjD-SM,2860
98
+ ckanapi_harvesters/policies/data_format_policy_lists.py,sha256=Lh_pYUvolW6QujaHdV415mnYhREqaZKbR73rpOmA8-E,11634
99
+ ckanapi_harvesters/policies/data_format_policy_tag_groups.py,sha256=KBxXm9hLgaiuJDTnP-ti2iZAyvf04uvUkIoo_Jqbpog,1341
100
+ ckanapi_harvesters/reports/__init__.py,sha256=LuacieaFOyqaivLuaRAD7Umx0rE_Lz9jD7bL88XLonw,137
101
+ ckanapi_harvesters/reports/admin_report.py,sha256=fSqNSLGe-XFmRQ6QanOm9VcAIbjDsiCNQSpVIGsH9XE,16773
102
+ ckanapi_harvesters-0.0.3.dist-info/METADATA,sha256=PO6PmbHXvX-ahLDUmoCai6UA1hkC-UtAhNwLHh7ywBA,12564
103
+ ckanapi_harvesters-0.0.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
104
+ ckanapi_harvesters-0.0.3.dist-info/top_level.txt,sha256=WvJprCJXBEK-Eew36dTdVdt9I_r4AdgA2Kur3RhLTPg,19
105
+ ckanapi_harvesters-0.0.3.dist-info/RECORD,,
@@ -1,27 +0,0 @@
1
- """
2
- Module for division operations and custom exceptions.
3
-
4
- This module provides functions and exceptions related to division operations.
5
- It imports the `divide` function and the `CantDivideByZeroError` exception from
6
- other modules and makes them available for use in this module.
7
-
8
- Functions
9
- ---------
10
- divide(a, b)
11
- Divide two numbers, raising a custom exception if the divisor is zero.
12
-
13
- Exceptions
14
- ----------
15
- CantDivideByZeroError
16
- Raised when an attempt is made to divide by zero.
17
-
18
- Imports
19
- --------
20
- - divide: Function for performing division operations.
21
- - CantDivideByZeroError: Exception raised for division by zero errors.
22
- """
23
-
24
- from .divider import divide
25
- from .divider_error import CantDivideByZeroError
26
-
27
- __all__ = ['divide', 'CantDivideByZeroError']
@@ -1,53 +0,0 @@
1
- """
2
- Module for division operations with custom exceptions.
3
-
4
- This module provides a function for performing division
5
- and raises a custom exception when attempting to divide by zero.
6
-
7
- Functions
8
- ---------
9
- divide(a, b)
10
- Divide two numbers, raising a custom exception if the divisor is zero.
11
-
12
- Exceptions
13
- ----------
14
- CantDivideByZeroError
15
- Raised when an attempt is made to divide by zero.
16
- """
17
-
18
- from .divider_error import CantDivideByZeroError
19
-
20
-
21
- def divide(a, b):
22
- """
23
- Divide two numbers, raising a custom exception if the divisor is zero.
24
-
25
- Parameters
26
- ----------
27
- a : float
28
- The dividend.
29
- b : float
30
- The divisor.
31
-
32
- Returns
33
- -------
34
- float
35
- The result of the division.
36
-
37
- Raises
38
- ------
39
- CantDivideByZeroError
40
- If the divisor (b) is zero.
41
-
42
- Examples
43
- --------
44
- >>> divide(10, 2)
45
- 5.0
46
- >>> divide(10, 0)
47
- Traceback (most recent call last):
48
- ...
49
- CantDivideByZeroError
50
- """
51
- if b == 0:
52
- raise CantDivideByZeroError()
53
- return a / b
@@ -1,59 +0,0 @@
1
- """
2
- Module for custom exceptions related to calculator operations.
3
-
4
- This module defines custom exceptions used in calculator operations,
5
- including a base exception class and a specific exception for division by zero errors.
6
-
7
- Classes
8
- -------
9
- CalculatorError
10
- Base class for exceptions in calculator operations.
11
- CantDivideByZeroError
12
- Exception raised when an attempt is made to divide by zero.
13
-
14
- Exceptions
15
- ----------
16
- CalculatorError
17
- Base class for exceptions in the calculator domain.
18
- CantDivideByZeroError
19
- Raised specifically for division by zero errors.
20
- """
21
-
22
-
23
- class CalculatorError(Exception):
24
- """
25
- Base class for exceptions in calculator operations.
26
-
27
- This class is intended to be used as a base class for other calculator-related
28
- exceptions. It inherits from the built-in Exception class and allows for custom
29
- exception handling in the calculator domain.
30
-
31
- Parameters
32
- ----------
33
- args : tuple
34
- Variable length argument list passed to the base Exception class.
35
- """
36
-
37
- def __init__(self, *args):
38
- super().__init__(args)
39
-
40
-
41
- class CantDivideByZeroError(CalculatorError):
42
- """
43
- Exception raised when an attempt is made to divide by zero.
44
-
45
- This exception is a specific subclass of CalculatorError and is intended to be
46
- used when a division by zero error occurs. It provides a custom error message
47
- indicating that division by zero is not allowed.
48
-
49
- Parameters
50
- ----------
51
- None
52
-
53
- Notes
54
- -----
55
- The default message for this exception is "tu ne peux pas diviser par zéro".
56
- """
57
-
58
- def __init__(self):
59
- super().__init__('tu ne peux pas diviser par zéro')
@@ -1,30 +0,0 @@
1
- """
2
- Module containing simple demonstration functions.
3
-
4
- This module provides basic example functions to demonstrate
5
- simple Python functionality.
6
-
7
- Functions
8
- ---------
9
- hello_world()
10
- Print 'Hello World!' to the console.
11
- """
12
-
13
-
14
- def hello_world():
15
- """
16
- Print 'Hello World!' to the console.
17
-
18
- Parameters
19
- ----------
20
- None
21
-
22
- Returns
23
- -------
24
- None
25
-
26
- Notes
27
- -----
28
- - This function simply prints the message 'Hello World!' to the standard output.
29
- """
30
- print('Hello World!')
@@ -1,9 +0,0 @@
1
- ckanapi_harvesters/__init__.py,sha256=7CSKdr6QTzRii9ZgPOVpInDaT8up2AlLE603waA6rFU,306
2
- ckanapi_harvesters/main.py,sha256=6BKP4FfCnsPApGT8F8sodpllBde7X55UkifXXMVY1Bw,508
3
- ckanapi_harvesters/divider/__init__.py,sha256=Q93V1V4x_TVm5uMBkJIeynFYBa_PpRzc8nQ4O4mtHC4,761
4
- ckanapi_harvesters/divider/divider.py,sha256=6he0tD5NeCbeVL1eWmRhU5R34h-H2fB-JFE-Ztk60-8,1038
5
- ckanapi_harvesters/divider/divider_error.py,sha256=S0gdUN6RtSthnZ4NB9_UhKmZDQjEnlS3F9IiGfnEFV0,1659
6
- ckanapi_harvesters-0.0.0.dist-info/METADATA,sha256=qiQRIkfzQhpjhp3sM5Jqjv42HATK4x_z9g1oF4TuK1o,8448
7
- ckanapi_harvesters-0.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
- ckanapi_harvesters-0.0.0.dist-info/top_level.txt,sha256=WvJprCJXBEK-Eew36dTdVdt9I_r4AdgA2Kur3RhLTPg,19
9
- ckanapi_harvesters-0.0.0.dist-info/RECORD,,