tracdap-runtime 0.6.5__py3-none-any.whl → 0.7.0__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 (89) hide show
  1. tracdap/rt/__init__.py +6 -5
  2. tracdap/rt/_exec/actors.py +6 -5
  3. tracdap/rt/_exec/context.py +278 -110
  4. tracdap/rt/_exec/dev_mode.py +237 -143
  5. tracdap/rt/_exec/engine.py +223 -64
  6. tracdap/rt/_exec/functions.py +31 -6
  7. tracdap/rt/_exec/graph.py +15 -5
  8. tracdap/rt/_exec/graph_builder.py +301 -203
  9. tracdap/rt/_exec/runtime.py +13 -10
  10. tracdap/rt/_exec/server.py +6 -5
  11. tracdap/rt/_impl/__init__.py +6 -5
  12. tracdap/rt/_impl/config_parser.py +17 -9
  13. tracdap/rt/_impl/data.py +284 -172
  14. tracdap/rt/_impl/ext/__init__.py +14 -0
  15. tracdap/rt/_impl/ext/sql.py +117 -0
  16. tracdap/rt/_impl/ext/storage.py +58 -0
  17. tracdap/rt/_impl/grpc/__init__.py +6 -5
  18. tracdap/rt/_impl/grpc/codec.py +6 -5
  19. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +62 -54
  20. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +37 -2
  21. tracdap/rt/_impl/guard_rails.py +6 -5
  22. tracdap/rt/_impl/models.py +6 -5
  23. tracdap/rt/_impl/repos.py +6 -5
  24. tracdap/rt/_impl/schemas.py +6 -5
  25. tracdap/rt/_impl/shim.py +6 -5
  26. tracdap/rt/_impl/static_api.py +30 -16
  27. tracdap/rt/_impl/storage.py +8 -7
  28. tracdap/rt/_impl/type_system.py +6 -5
  29. tracdap/rt/_impl/util.py +16 -5
  30. tracdap/rt/_impl/validation.py +72 -18
  31. tracdap/rt/_plugins/__init__.py +6 -5
  32. tracdap/rt/_plugins/_helpers.py +6 -5
  33. tracdap/rt/_plugins/config_local.py +6 -5
  34. tracdap/rt/_plugins/format_arrow.py +6 -5
  35. tracdap/rt/_plugins/format_csv.py +6 -5
  36. tracdap/rt/_plugins/format_parquet.py +6 -5
  37. tracdap/rt/_plugins/repo_git.py +6 -5
  38. tracdap/rt/_plugins/repo_local.py +6 -5
  39. tracdap/rt/_plugins/repo_pypi.py +6 -5
  40. tracdap/rt/_plugins/storage_aws.py +6 -5
  41. tracdap/rt/_plugins/storage_azure.py +6 -5
  42. tracdap/rt/_plugins/storage_gcp.py +6 -5
  43. tracdap/rt/_plugins/storage_local.py +6 -5
  44. tracdap/rt/_plugins/storage_sql.py +418 -0
  45. tracdap/rt/_plugins/storage_sql_dialects.py +118 -0
  46. tracdap/rt/_version.py +7 -6
  47. tracdap/rt/api/__init__.py +23 -5
  48. tracdap/rt/api/experimental.py +85 -37
  49. tracdap/rt/api/hook.py +16 -5
  50. tracdap/rt/api/model_api.py +110 -90
  51. tracdap/rt/api/static_api.py +142 -100
  52. tracdap/rt/config/common.py +26 -27
  53. tracdap/rt/config/job.py +5 -6
  54. tracdap/rt/config/platform.py +41 -42
  55. tracdap/rt/config/result.py +5 -6
  56. tracdap/rt/config/runtime.py +6 -7
  57. tracdap/rt/exceptions.py +13 -7
  58. tracdap/rt/ext/__init__.py +6 -5
  59. tracdap/rt/ext/config.py +6 -5
  60. tracdap/rt/ext/embed.py +6 -5
  61. tracdap/rt/ext/plugins.py +6 -5
  62. tracdap/rt/ext/repos.py +6 -5
  63. tracdap/rt/ext/storage.py +6 -5
  64. tracdap/rt/launch/__init__.py +10 -5
  65. tracdap/rt/launch/__main__.py +6 -5
  66. tracdap/rt/launch/cli.py +6 -5
  67. tracdap/rt/launch/launch.py +38 -15
  68. tracdap/rt/metadata/__init__.py +4 -0
  69. tracdap/rt/metadata/common.py +2 -3
  70. tracdap/rt/metadata/custom.py +3 -4
  71. tracdap/rt/metadata/data.py +30 -31
  72. tracdap/rt/metadata/file.py +6 -7
  73. tracdap/rt/metadata/flow.py +22 -23
  74. tracdap/rt/metadata/job.py +89 -45
  75. tracdap/rt/metadata/model.py +26 -27
  76. tracdap/rt/metadata/object.py +11 -12
  77. tracdap/rt/metadata/object_id.py +23 -24
  78. tracdap/rt/metadata/resource.py +0 -1
  79. tracdap/rt/metadata/search.py +15 -16
  80. tracdap/rt/metadata/stoarge.py +22 -23
  81. tracdap/rt/metadata/tag.py +8 -9
  82. tracdap/rt/metadata/tag_update.py +11 -12
  83. tracdap/rt/metadata/type.py +38 -38
  84. {tracdap_runtime-0.6.5.dist-info → tracdap_runtime-0.7.0.dist-info}/LICENSE +1 -1
  85. {tracdap_runtime-0.6.5.dist-info → tracdap_runtime-0.7.0.dist-info}/METADATA +4 -2
  86. tracdap_runtime-0.7.0.dist-info/RECORD +121 -0
  87. {tracdap_runtime-0.6.5.dist-info → tracdap_runtime-0.7.0.dist-info}/WHEEL +1 -1
  88. tracdap_runtime-0.6.5.dist-info/RECORD +0 -116
  89. {tracdap_runtime-0.6.5.dist-info → tracdap_runtime-0.7.0.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,9 @@
1
- # Copyright 2022 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
tracdap/rt/_impl/util.py CHANGED
@@ -1,8 +1,9 @@
1
- # Copyright 2022 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -262,6 +263,16 @@ def get_args(metaclass: type):
262
263
  return None
263
264
 
264
265
 
266
+ def get_constraints(metaclass: tp.TypeVar):
267
+
268
+ return metaclass.__constraints__ or None
269
+
270
+
271
+ def get_bound(metaclass: tp.TypeVar):
272
+
273
+ return metaclass.__bound__ or None
274
+
275
+
265
276
  def try_clean_dir(dir_path: pathlib.Path, remove: bool = False) -> bool:
266
277
 
267
278
  normalized_path = windows_unc_path(dir_path)
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -44,10 +45,25 @@ def check_type(expected_type: tp.Type, value: tp.Any) -> bool:
44
45
  return _TypeValidator.check_type(expected_type, value)
45
46
 
46
47
 
48
+ def type_name(type_: tp.Type, qualified: bool) -> str:
49
+ return _TypeValidator._type_name(type_, qualified) # noqa
50
+
51
+
47
52
  def quick_validate_model_def(model_def: meta.ModelDefinition):
48
53
  StaticValidator.quick_validate_model_def(model_def)
49
54
 
50
55
 
56
+ def is_primitive_type(basic_type: meta.BasicType) -> bool:
57
+ return StaticValidator.is_primitive_type(basic_type)
58
+
59
+
60
+ T_SKIP_VAL = tp.TypeVar("T_SKIP_VAL")
61
+
62
+ class SkipValidation(tp.Generic[T_SKIP_VAL]):
63
+ def __init__(self, skip_type: tp.Type[T_SKIP_VAL]):
64
+ self.skip_type = skip_type
65
+
66
+
51
67
  class _TypeValidator:
52
68
 
53
69
  # The metaclass for generic types varies between versions of the typing library
@@ -56,28 +72,28 @@ class _TypeValidator:
56
72
 
57
73
  # Cache method signatures to avoid inspection on every call
58
74
  # Inspecting a function signature can take ~ half a second in Python 3.7
59
- __method_cache: tp.Dict[str, inspect.Signature] = dict()
75
+ __method_cache: tp.Dict[str, tp.Tuple[inspect.Signature, tp.Any]] = dict()
60
76
 
61
77
  _log: logging.Logger = util.logger_for_namespace(__name__)
62
78
 
63
79
  @classmethod
64
80
  def validate_signature(cls, method: tp.Callable, *args, **kwargs):
65
81
 
66
- if method.__name__ in cls.__method_cache:
67
- signature = cls.__method_cache[method.__name__]
82
+ if method.__qualname__ in cls.__method_cache:
83
+ signature, hints = cls.__method_cache[method.__qualname__]
68
84
  else:
69
85
  signature = inspect.signature(method)
70
- cls.__method_cache[method.__name__] = signature
71
-
72
- hints = tp.get_type_hints(method)
86
+ hints = tp.get_type_hints(method)
87
+ cls.__method_cache[method.__qualname__] = signature, hints
73
88
 
89
+ named_params = list(signature.parameters.keys())
74
90
  positional_index = 0
75
91
 
76
92
  for param_name, param in signature.parameters.items():
77
93
 
78
94
  param_type = hints.get(param_name)
79
95
 
80
- values = cls._select_arg(method.__name__, param, positional_index, *args, **kwargs)
96
+ values = cls._select_arg(method.__name__, param, positional_index, named_params, *args, **kwargs)
81
97
  positional_index += len(values)
82
98
 
83
99
  for value in values:
@@ -86,11 +102,12 @@ class _TypeValidator:
86
102
  @classmethod
87
103
  def validate_return_type(cls, method: tp.Callable, value: tp.Any):
88
104
 
89
- if method.__name__ in cls.__method_cache:
90
- signature = cls.__method_cache[method.__name__]
105
+ if method.__qualname__ in cls.__method_cache:
106
+ signature, hints = cls.__method_cache[method.__qualname__]
91
107
  else:
92
108
  signature = inspect.signature(method)
93
- cls.__method_cache[method.__name__] = signature
109
+ hints = tp.get_type_hints(method)
110
+ cls.__method_cache[method.__qualname__] = signature, hints
94
111
 
95
112
  correct_type = cls._validate_type(signature.return_annotation, value)
96
113
 
@@ -107,7 +124,7 @@ class _TypeValidator:
107
124
 
108
125
  @classmethod
109
126
  def _select_arg(
110
- cls, method_name: str, parameter: inspect.Parameter, positional_index,
127
+ cls, method_name: str, parameter: inspect.Parameter, positional_index, named_params,
111
128
  *args, **kwargs) -> tp.List[tp.Any]:
112
129
 
113
130
  if parameter.kind == inspect.Parameter.POSITIONAL_ONLY:
@@ -152,7 +169,7 @@ class _TypeValidator:
152
169
 
153
170
  if parameter.kind == inspect.Parameter.VAR_KEYWORD:
154
171
 
155
- raise ex.ETracInternal("Validation of VAR_KEYWORD params is not supported yet")
172
+ return [arg for kw, arg in kwargs.items() if kw not in named_params]
156
173
 
157
174
  raise ex.EUnexpected("Invalid method signature in runtime API (this is a bug)")
158
175
 
@@ -180,6 +197,12 @@ class _TypeValidator:
180
197
  if expected_type == tp.Any:
181
198
  return True
182
199
 
200
+ # Sometimes we need to validate a partial set of arguments
201
+ # Explicitly passing a SkipValidation value allows for this
202
+ if isinstance(value, SkipValidation):
203
+ if value.skip_type == expected_type:
204
+ return True
205
+
183
206
  if isinstance(expected_type, cls.__generic_metaclass):
184
207
 
185
208
  origin = util.get_origin(expected_type)
@@ -216,8 +239,31 @@ class _TypeValidator:
216
239
  all(map(lambda k: cls._validate_type(key_type, k), value.keys())) and \
217
240
  all(map(lambda v: cls._validate_type(value_type, v), value.values()))
218
241
 
242
+ if origin.__module__.startswith("tracdap.rt.api."):
243
+ return isinstance(value, origin)
244
+
219
245
  raise ex.ETracInternal(f"Validation of [{origin.__name__}] generic parameters is not supported yet")
220
246
 
247
+ # Support for generic type variables
248
+ if isinstance(expected_type, tp.TypeVar):
249
+
250
+ # If there are any constraints or a bound, those must be honoured
251
+
252
+ constraints = util.get_constraints(expected_type)
253
+ bound = util.get_bound(expected_type)
254
+
255
+ if constraints:
256
+ if not any(map(lambda c: type(value) == c, constraints)):
257
+ return False
258
+
259
+ if bound:
260
+ if not isinstance(value, bound):
261
+ return False
262
+
263
+ # So long as constraints / bound are ok, any type matches a generic type var
264
+ return True
265
+
266
+
221
267
  # Validate everything else as a concrete type
222
268
 
223
269
  # TODO: Recursive validation of types for class members using field annotations
@@ -237,7 +283,10 @@ class _TypeValidator:
237
283
  return f"Named[{named_type}]"
238
284
 
239
285
  if origin is tp.Union:
240
- return "|".join(map(cls._type_name, args))
286
+ if len(args) == 2 and args[1] == type(None):
287
+ return f"Optional[{cls._type_name(args[0])}]"
288
+ else:
289
+ return "|".join(map(cls._type_name, args))
241
290
 
242
291
  if origin is list:
243
292
  list_type = cls._type_name(args[0])
@@ -274,6 +323,11 @@ class StaticValidator:
274
323
 
275
324
  _log: logging.Logger = util.logger_for_namespace(__name__)
276
325
 
326
+ @classmethod
327
+ def is_primitive_type(cls, basic_type: meta.BasicType) -> bool:
328
+
329
+ return basic_type in cls.__PRIMITIVE_TYPES
330
+
277
331
  @classmethod
278
332
  def quick_validate_model_def(cls, model_def: meta.ModelDefinition):
279
333
 
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2024 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2022 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #
@@ -1,8 +1,9 @@
1
- # Copyright 2023 Accenture Global Solutions Limited
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
1
+ # Licensed to the Fintech Open Source Foundation (FINOS) under one or
2
+ # more contributor license agreements. See the NOTICE file distributed
3
+ # with this work for additional information regarding copyright ownership.
4
+ # FINOS licenses this file to you under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
6
7
  #
7
8
  # http://www.apache.org/licenses/LICENSE-2.0
8
9
  #