hid_data_transfer_lib 0.3.9__tar.gz → 0.3.11__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 (20) hide show
  1. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/PKG-INFO +4 -3
  2. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/README.md +1 -1
  3. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/hid_dt_lib.py +79 -78
  4. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/nifi/nifi_client.py +693 -64
  5. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/nifi/nifi_rest.py +187 -16
  6. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/util/util.py +22 -8
  7. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/pyproject.toml +1 -1
  8. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/__init__.py +0 -0
  9. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/conf/__init__.py +0 -0
  10. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/conf/hid_dt.cfg +0 -0
  11. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/conf/hid_dt_configuration.py +0 -0
  12. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/conf/hid_dt_local.cfg +0 -0
  13. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/conf/hid_dt_psnc.cfg +0 -0
  14. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/exceptions/__init__.py +0 -0
  15. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/exceptions/hid_dt_exceptions.py +0 -0
  16. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/keycloak/__init__.py +0 -0
  17. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/keycloak/keycloak_rest.py +0 -0
  18. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/nifi/__init__.py +0 -0
  19. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/py.typed +0 -0
  20. {hid_data_transfer_lib-0.3.9 → hid_data_transfer_lib-0.3.11}/hid_data_transfer_lib/util/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: hid_data_transfer_lib
3
- Version: 0.3.9
3
+ Version: 0.3.11
4
4
  Summary: HiDALGO Data Transfer library provides methods to transfer data between different data providers and consumers using NIFI pipelines
5
5
  License: APL-2.0
6
6
  Author: Jesús Gorroñogoitia
@@ -11,6 +11,7 @@ Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
13
  Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
14
15
  Requires-Dist: paramiko (>=3.3.1)
15
16
  Requires-Dist: requests (>=2.31.0)
16
17
  Requires-Dist: setuptools (>=79.0.0,<80.0.0)
@@ -50,7 +51,7 @@ The Data Transfer Library sends requests to NIFI through its REST API.
50
51
  To use the Data Transfer library, it is required the following requirements:
51
52
  - **Python3** execution environment
52
53
  - **Poetry** python package management tool (optional)
53
- - **NIFI** instance, with a NIFI server SSH account (for keys transfer)
54
+ - **NIFI** instance, with a NIFI 2.X server SSH account (for keys transfer). Latest NIFI supported version: 2.8
54
55
  - **Keycloak** instance, with a KEYCLOAK user's account
55
56
  - **HDFS** instance, with an user's Kerberos principal account
56
57
  - **CKAN** instance, with an user APIKey
@@ -32,7 +32,7 @@ The Data Transfer Library sends requests to NIFI through its REST API.
32
32
  To use the Data Transfer library, it is required the following requirements:
33
33
  - **Python3** execution environment
34
34
  - **Poetry** python package management tool (optional)
35
- - **NIFI** instance, with a NIFI server SSH account (for keys transfer)
35
+ - **NIFI** instance, with a NIFI 2.X server SSH account (for keys transfer). Latest NIFI supported version: 2.8
36
36
  - **Keycloak** instance, with a KEYCLOAK user's account
37
37
  - **HDFS** instance, with an user's Kerberos principal account
38
38
  - **CKAN** instance, with an user APIKey
@@ -34,7 +34,6 @@ from hid_data_transfer_lib.nifi.nifi_client import (
34
34
  NIFIClient, ExecutionType, AccountingInfo
35
35
  )
36
36
 
37
- KERBEROS_PRINCIPAL = "kerberos.principal"
38
37
  HDFS_DATA_FOLDER = "hdfs.data_folder"
39
38
  HDFS_FILENAME = "hdfs.filename"
40
39
  HPC_TARGET_FOLDER = "hpc.target_folder"
@@ -98,7 +97,7 @@ class HIDDataTransfer:
98
97
  else ckan_resource
99
98
  else:
100
99
  ckan_resource = (
101
- args.data_source.replace("/", "_")
100
+ args.data_source.replace("/", "_")[1:]
102
101
  if not args.data_source.endswith("/")
103
102
  else args.data_source[:-1].replace("/", "_")
104
103
  )
@@ -158,9 +157,13 @@ class HIDDataTransfer:
158
157
  hpc_secret_key=hpc_secret_key_path,
159
158
  data_source=data_source,
160
159
  data_target=data_target,
160
+ recursive=recursive,
161
+ )
162
+
163
+ processors_with_kerberos = ["ListHDFS", "FetchHDFS"]
164
+ kerberos_account = SimpleNamespace(
161
165
  kerberos_principal=kerberos_principal,
162
166
  kerberos_password=kerberos_password,
163
- recursive=recursive,
164
167
  )
165
168
 
166
169
  self.__logger.info(
@@ -175,7 +178,7 @@ class HIDDataTransfer:
175
178
  "/".join(args.data_source.split("/")[:-1])
176
179
  arguments[HDFS_FILENAME] = \
177
180
  self.process_wildcards(args.data_source.split("/")[-1])
178
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
181
+
179
182
  arguments[RECURSIVE] = args.recursive
180
183
 
181
184
  execution_type = {
@@ -197,14 +200,6 @@ class HIDDataTransfer:
197
200
  args
198
201
  )
199
202
 
200
- processors_with_hdfs_sensitive_parameters = \
201
- ["ListHDFS", "FetchHDFS"]
202
- sensitive_parameters.update(
203
- self.__nifi_client.set_sensitive_hdfs_parameters(
204
- processors_with_hdfs_sensitive_parameters, args
205
- )
206
- )
207
-
208
203
  if not args.hpc_secret_key and not args.hpc_password:
209
204
  raise HidDataTransferException(HPC_ACCOUNT_MSG)
210
205
 
@@ -217,7 +212,7 @@ class HIDDataTransfer:
217
212
  "FetchHDFS": concurrent_tasks,
218
213
  }
219
214
 
220
- return self.__nifi_client.run_process_group(
215
+ return self.__nifi_client.run_process_group_opt(
221
216
  "hdfs2hpc",
222
217
  execution_type,
223
218
  arguments,
@@ -226,6 +221,9 @@ class HIDDataTransfer:
226
221
  keycloak_token=self.__keycloak_token,
227
222
  accounting_target="PutSFTP",
228
223
  concurrent_tasks=concurrent_tasks_dict,
224
+ ignore_bulletins_in_processors=["PutSFTP"],
225
+ processors_with_kerberos=processors_with_kerberos,
226
+ kerberos_account=kerberos_account,
229
227
  )
230
228
 
231
229
  except Exception as ex:
@@ -386,6 +384,12 @@ class HIDDataTransfer:
386
384
  kerberos_password=kerberos_password,
387
385
  )
388
386
 
387
+ processors_with_kerberos = ["ListHDFS", "FetchHDFS"]
388
+ kerberos_account = SimpleNamespace(
389
+ kerberos_principal=kerberos_principal,
390
+ kerberos_password=kerberos_password,
391
+ )
392
+
389
393
  self.__logger.info(
390
394
  "executing hdfs2hpc_2fa command with args: %s",
391
395
  self.__nifi_client.format_args_to_string(args),
@@ -398,7 +402,6 @@ class HIDDataTransfer:
398
402
  "/".join(args.data_source.split("/")[:-1])
399
403
  arguments[HDFS_FILENAME] = \
400
404
  self.process_wildcards(args.data_source.split("/")[-1])
401
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
402
405
 
403
406
  # set local.data_folder to keep dataset retrieved from HDFS
404
407
  __uuid = uuid.uuid4()
@@ -421,16 +424,6 @@ class HIDDataTransfer:
421
424
  ],
422
425
  }
423
426
 
424
- sensitive_parameters = {}
425
-
426
- processors_with_hdfs_sensitive_parameters = \
427
- ["ListHDFS", "FetchHDFS"]
428
- sensitive_parameters.update(
429
- self.__nifi_client.set_sensitive_hdfs_parameters(
430
- processors_with_hdfs_sensitive_parameters, args
431
- )
432
- )
433
-
434
427
  if not args.hpc_secret_key:
435
428
  raise HidDataTransferException(HPC_ACCOUNT_MSG)
436
429
 
@@ -449,10 +442,12 @@ class HIDDataTransfer:
449
442
  execution_type,
450
443
  arguments,
451
444
  keys_arguments=keys_arguments,
452
- sensitive_parameters=sensitive_parameters,
445
+ sensitive_parameters=None,
453
446
  keycloak_token=self.__keycloak_token,
454
447
  accounting_target="PutFile",
455
448
  concurrent_tasks=concurrent_tasks_dict,
449
+ processors_with_kerberos=processors_with_kerberos,
450
+ kerberos_account=kerberos_account,
456
451
  )
457
452
  process_ids.append(process_id)
458
453
 
@@ -461,7 +456,7 @@ class HIDDataTransfer:
461
456
  execution_type,
462
457
  arguments,
463
458
  keys_arguments=keys_arguments,
464
- sensitive_parameters=sensitive_parameters,
459
+ sensitive_parameters=None,
465
460
  keycloak_token=self.__keycloak_token,
466
461
  processor_with_2fa="SftpTransferToHPCWithVPNCode",
467
462
  callback_2fa=callback_2fa,
@@ -535,6 +530,12 @@ class HIDDataTransfer:
535
530
  recursive=recursive,
536
531
  )
537
532
 
533
+ processors_with_kerberos = ["PutHDFS"]
534
+ kerberos_account = SimpleNamespace(
535
+ kerberos_principal=kerberos_principal,
536
+ kerberos_password=kerberos_password,
537
+ )
538
+
538
539
  self.__logger.info(
539
540
  "executing hpc2hdfs command with args: %s",
540
541
  self.__nifi_client.format_args_to_string(args),
@@ -548,7 +549,6 @@ class HIDDataTransfer:
548
549
  : args.data_source.rfind("/")
549
550
  ]
550
551
  arguments[HDFS_DATA_FOLDER] = args.data_target
551
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
552
552
  arguments[RECURSIVE] = args.recursive
553
553
 
554
554
  execution_type = {
@@ -571,14 +571,6 @@ class HIDDataTransfer:
571
571
  processors_with_hpc_sensitive_parameters, args
572
572
  )
573
573
 
574
- processors_with_hdfs_sensitive_parameters = \
575
- ["PutHDFS"]
576
- sensitive_parameters.update(
577
- self.__nifi_client.set_sensitive_hdfs_parameters(
578
- processors_with_hdfs_sensitive_parameters, args
579
- )
580
- )
581
-
582
574
  if not args.hpc_secret_key and not args.hpc_password:
583
575
  raise HidDataTransferException(HPC_ACCOUNT_MSG)
584
576
 
@@ -591,7 +583,7 @@ class HIDDataTransfer:
591
583
  "PutHDFS": concurrent_tasks,
592
584
  }
593
585
 
594
- return self.__nifi_client.run_process_group(
586
+ return self.__nifi_client.run_process_group_opt(
595
587
  "hpc2hdfs",
596
588
  execution_type,
597
589
  arguments,
@@ -599,7 +591,10 @@ class HIDDataTransfer:
599
591
  sensitive_parameters,
600
592
  keycloak_token=self.__keycloak_token,
601
593
  accounting_target="PutHDFS",
602
- concurrent_tasks=concurrent_tasks_dict
594
+ concurrent_tasks=concurrent_tasks_dict,
595
+ ignore_bulletins_in_processors=["FetchSFTP"],
596
+ processors_with_kerberos=processors_with_kerberos,
597
+ kerberos_account=kerberos_account,
603
598
  )
604
599
 
605
600
  except Exception as ex:
@@ -710,6 +705,12 @@ class HIDDataTransfer:
710
705
  kerberos_password=kerberos_password,
711
706
  )
712
707
 
708
+ processors_with_kerberos = ["PutHDFS"]
709
+ kerberos_account = SimpleNamespace(
710
+ kerberos_principal=kerberos_principal,
711
+ kerberos_password=kerberos_password,
712
+ )
713
+
713
714
  self.__logger.info(
714
715
  "executing hpc2hdfs_2fa command with args: %s",
715
716
  self.__nifi_client.format_args_to_string(args),
@@ -726,7 +727,6 @@ class HIDDataTransfer:
726
727
  : args.data_source.rfind("/")
727
728
  ]
728
729
  arguments[HDFS_DATA_FOLDER] = args.data_target
729
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
730
730
 
731
731
  # set local.data_folder to keep dataset retrieved from HPC
732
732
  __uuid = uuid.uuid4()
@@ -756,14 +756,6 @@ class HIDDataTransfer:
756
756
  processors_with_hpc_sensitive_parameters, args
757
757
  )
758
758
 
759
- processors_with_hdfs_sensitive_parameters = \
760
- ["PutHDFS"]
761
- sensitive_parameters.update(
762
- self.__nifi_client.set_sensitive_hdfs_parameters(
763
- processors_with_hdfs_sensitive_parameters, args
764
- )
765
- )
766
-
767
759
  if not args.hpc_secret_key and not args.hpc_password:
768
760
  raise HidDataTransferException(HPC_ACCOUNT_MSG)
769
761
 
@@ -786,7 +778,6 @@ class HIDDataTransfer:
786
778
  keycloak_token=self.__keycloak_token,
787
779
  processor_with_2fa="SftpTransferFromHPCWithVPNCode",
788
780
  callback_2fa=callback_2fa,
789
- accounting_target="PutHDFS",
790
781
  concurrent_tasks=concurrent_tasks_dict,
791
782
  )
792
783
  process_ids.append(process_id)
@@ -800,6 +791,8 @@ class HIDDataTransfer:
800
791
  keycloak_token=self.__keycloak_token,
801
792
  accounting_target="PutHDFS",
802
793
  concurrent_tasks=concurrent_tasks_dict,
794
+ processors_with_kerberos=processors_with_kerberos,
795
+ kerberos_account=kerberos_account,
803
796
  )
804
797
  process_ids.append(process_id)
805
798
 
@@ -911,6 +904,12 @@ class HIDDataTransfer:
911
904
  recursive=recursive,
912
905
  )
913
906
 
907
+ processors_with_kerberos = ["ListHDFS", "FetchHDFS"]
908
+ kerberos_account = SimpleNamespace(
909
+ kerberos_principal=kerberos_principal,
910
+ kerberos_password=kerberos_password,
911
+ )
912
+
914
913
  self.__logger.info(
915
914
  "executing hdfs2ckan command with args: %s",
916
915
  self.__nifi_client.format_args_to_string(args),
@@ -921,7 +920,6 @@ class HIDDataTransfer:
921
920
  "/".join(args.data_source.split("/")[:-1])
922
921
  arguments[HDFS_FILENAME] = \
923
922
  self.process_wildcards(args.data_source.split("/")[-1])
924
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
925
923
  self.__nifi_client.add_default_ckan_parameters(arguments, args)
926
924
  arguments[self.__nifi_client.CKAN_RESOURCE] = \
927
925
  self.generate_ckan_resource_name(args)
@@ -941,14 +939,6 @@ class HIDDataTransfer:
941
939
  processors_with_ckan_sensitive_parameters, args
942
940
  )
943
941
 
944
- processors_with_hdfs_sensitive_parameters = \
945
- ["ListHDFS", "FetchHDFS"]
946
- sensitive_parameters.update(
947
- self.__nifi_client.set_sensitive_hdfs_parameters(
948
- processors_with_hdfs_sensitive_parameters, args
949
- )
950
- )
951
-
952
942
  # Set the number of concurrent tasks
953
943
  # for parallel processors in the pipeline
954
944
  if concurrent_tasks is None:
@@ -967,15 +957,21 @@ class HIDDataTransfer:
967
957
  "CKANFileUploader": concurrent_tasks,
968
958
  }
969
959
 
970
- return self.__nifi_client.run_process_group(
971
- "hdfs2ckan",
972
- execution_type,
973
- arguments,
974
- None,
975
- sensitive_parameters,
960
+ # disabled optimized version (run process group step by step)
961
+ # return self.__nifi_client.run_process_group(
962
+ # enabled optimized version (run process group at once)
963
+ return self.__nifi_client.run_process_group_opt(
964
+ template_name="hdfs2ckan",
965
+ execution_type=execution_type,
966
+ arguments=arguments,
967
+ keys_arguments=None,
968
+ sensitive_parameters=sensitive_parameters,
976
969
  keycloak_token=self.__keycloak_token,
977
970
  accounting_target="MergeContent",
978
- concurrent_tasks=concurrent_tasks_dict
971
+ concurrent_tasks=concurrent_tasks_dict,
972
+ synchronization_processor_name="MergeContent",
973
+ processors_with_kerberos=processors_with_kerberos,
974
+ kerberos_account=kerberos_account,
979
975
  )
980
976
 
981
977
  except Exception as ex:
@@ -1027,6 +1023,12 @@ class HIDDataTransfer:
1027
1023
  kerberos_password=kerberos_password,
1028
1024
  )
1029
1025
 
1026
+ processors_with_kerberos = ["PutHDFS"]
1027
+ kerberos_account = SimpleNamespace(
1028
+ kerberos_principal=kerberos_principal,
1029
+ kerberos_password=kerberos_password,
1030
+ )
1031
+
1030
1032
  self.__logger.info(
1031
1033
  "executing ckan2hdfs command with args: %s",
1032
1034
  self.__nifi_client.format_args_to_string(args),
@@ -1037,7 +1039,6 @@ class HIDDataTransfer:
1037
1039
  arguments[self.__nifi_client.CKAN_RESOURCE] = \
1038
1040
  self.process_wildcards(args.ckan_resource)
1039
1041
  arguments[HDFS_DATA_FOLDER] = args.data_target
1040
- arguments[KERBEROS_PRINCIPAL] = args.kerberos_principal
1041
1042
 
1042
1043
  execution_type = {
1043
1044
  "CKANFileDownloader": ExecutionType.ONCE,
@@ -1050,14 +1051,6 @@ class HIDDataTransfer:
1050
1051
  processors_with_ckan_sensitive_parameters, args
1051
1052
  )
1052
1053
 
1053
- processors_with_hdfs_sensitive_parameters = \
1054
- ["PutHDFS"]
1055
- sensitive_parameters.update(
1056
- self.__nifi_client.set_sensitive_hdfs_parameters(
1057
- processors_with_hdfs_sensitive_parameters, args
1058
- )
1059
- )
1060
-
1061
1054
  # Set the number of concurrent tasks
1062
1055
  # for parallel processors in the pipeline
1063
1056
  if concurrent_tasks is None:
@@ -1078,7 +1071,10 @@ class HIDDataTransfer:
1078
1071
  arguments[self.__nifi_client.CKAN_CONCURRENT_TASKS] \
1079
1072
  = concurrent_tasks
1080
1073
 
1081
- return self.__nifi_client.run_process_group(
1074
+ # disabled optimized version (run process group step by step)
1075
+ # return self.__nifi_client.run_process_group(
1076
+ # enabled optimized version (run process group at once)
1077
+ return self.__nifi_client.run_process_group_opt(
1082
1078
  "ckan2hdfs",
1083
1079
  execution_type,
1084
1080
  arguments,
@@ -1086,7 +1082,9 @@ class HIDDataTransfer:
1086
1082
  sensitive_parameters,
1087
1083
  keycloak_token=self.__keycloak_token,
1088
1084
  accounting_target="PutHDFS",
1089
- concurrent_tasks=concurrent_tasks_dict
1085
+ concurrent_tasks=concurrent_tasks_dict,
1086
+ processors_with_kerberos=processors_with_kerberos,
1087
+ kerberos_account=kerberos_account,
1090
1088
  )
1091
1089
 
1092
1090
  except Exception as ex:
@@ -1202,7 +1200,7 @@ class HIDDataTransfer:
1202
1200
  arguments[self.__nifi_client.CKAN_CONCURRENT_TASKS] \
1203
1201
  = concurrent_tasks
1204
1202
 
1205
- return self.__nifi_client.run_process_group(
1203
+ return self.__nifi_client.run_process_group_opt(
1206
1204
  "ckan2hpc",
1207
1205
  execution_type,
1208
1206
  arguments,
@@ -1210,7 +1208,8 @@ class HIDDataTransfer:
1210
1208
  sensitive_parameters,
1211
1209
  keycloak_token=self.__keycloak_token,
1212
1210
  accounting_target="PutSFTP",
1213
- concurrent_tasks=concurrent_tasks_dict
1211
+ concurrent_tasks=concurrent_tasks_dict,
1212
+ ignore_bulletins_in_processors=["PutSFTP"],
1214
1213
  )
1215
1214
 
1216
1215
  except Exception as ex:
@@ -1613,7 +1612,7 @@ class HIDDataTransfer:
1613
1612
  "CKANFileUploader": concurrent_tasks,
1614
1613
  }
1615
1614
 
1616
- return self.__nifi_client.run_process_group(
1615
+ return self.__nifi_client.run_process_group_opt(
1617
1616
  "hpc2ckanv2",
1618
1617
  execution_type,
1619
1618
  arguments,
@@ -1621,7 +1620,9 @@ class HIDDataTransfer:
1621
1620
  sensitive_parameters,
1622
1621
  keycloak_token=self.__keycloak_token,
1623
1622
  accounting_target="MergeContent",
1624
- concurrent_tasks=concurrent_tasks_dict
1623
+ concurrent_tasks=concurrent_tasks_dict,
1624
+ synchronization_processor_name="MergeContent",
1625
+ ignore_bulletins_in_processors=["FetchSFTP"],
1625
1626
  )
1626
1627
 
1627
1628
  except Exception as ex: