fluidattacks-core 4.2.1__tar.gz → 4.3.1__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 (63) hide show
  1. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/PKG-INFO +10 -8
  2. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/sources/__init__.py +41 -15
  3. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/serializers/syntax.py +4 -1
  4. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core.egg-info/PKG-INFO +10 -8
  5. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core.egg-info/requires.txt +9 -7
  6. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/pyproject.toml +35 -12
  7. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_logging.py +4 -2
  8. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/README.md +0 -0
  9. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/__init__.py +0 -0
  10. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/aio/__init__.py +0 -0
  11. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/aio/processes.py +0 -0
  12. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/aio/runners.py +0 -0
  13. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/aio/tasks.py +0 -0
  14. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/aio/threads.py +0 -0
  15. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/authz/__init__.py +0 -0
  16. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/authz/py.typed +0 -0
  17. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/authz/types.py +0 -0
  18. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/bugsnag/__init__.py +0 -0
  19. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/bugsnag/client.py +0 -0
  20. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/cpg/__init__.py +0 -0
  21. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/cpg/joern.py +0 -0
  22. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/filesystem/__init__.py +0 -0
  23. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/filesystem/defaults.py +0 -0
  24. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/__init__.py +0 -0
  25. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/classes.py +0 -0
  26. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/clone.py +0 -0
  27. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/codecommit_utils.py +0 -0
  28. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/constants.py +0 -0
  29. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/delete_files.py +0 -0
  30. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/download_file.py +0 -0
  31. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/download_repo.py +0 -0
  32. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/https_utils.py +0 -0
  33. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/py.typed +0 -0
  34. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/remote.py +0 -0
  35. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/ssh_utils.py +0 -0
  36. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/utils.py +0 -0
  37. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/git/warp.py +0 -0
  38. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/http/__init__.py +0 -0
  39. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/http/client.py +0 -0
  40. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/http/validations.py +0 -0
  41. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/__init__.py +0 -0
  42. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/filters.py +0 -0
  43. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/formatters.py +0 -0
  44. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/handlers.py +0 -0
  45. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/presets.py +0 -0
  46. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/sources/types.py +0 -0
  47. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/sources/utils.py +0 -0
  48. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/logging/utils.py +0 -0
  49. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/py.typed +0 -0
  50. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/sarif/__init__.py +0 -0
  51. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/semver/__init__.py +0 -0
  52. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/semver/match_versions.py +0 -0
  53. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/serializers/__init__.py +0 -0
  54. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core/serializers/snippet.py +0 -0
  55. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core.egg-info/SOURCES.txt +0 -0
  56. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core.egg-info/dependency_links.txt +0 -0
  57. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/fluidattacks_core.egg-info/top_level.txt +0 -0
  58. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/setup.cfg +0 -0
  59. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_aio_tasks.py +0 -0
  60. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_extract_db.py +0 -0
  61. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_language_detection.py +0 -0
  62. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_make_snippet.py +0 -0
  63. {fluidattacks_core-4.2.1 → fluidattacks_core-4.3.1}/test/test_match_versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fluidattacks-core
3
- Version: 4.2.1
3
+ Version: 4.3.1
4
4
  Summary: Fluid Attacks Core Library
5
5
  Author-email: Development <development@fluidattacks.com>
6
6
  License: MPL-2.0
@@ -25,24 +25,26 @@ Requires-Dist: bugsnag>=4.7.1; extra == "bugsnag"
25
25
  Provides-Extra: git
26
26
  Requires-Dist: aiofiles>=23.2.1; extra == "git"
27
27
  Requires-Dist: boto3>=1.34; extra == "git"
28
+ Requires-Dist: botocore>=1.40.18; extra == "git"
28
29
  Requires-Dist: GitPython>=3.1.41; extra == "git"
29
30
  Requires-Dist: pathspec>=0.12.1; extra == "git"
30
31
  Provides-Extra: http
31
32
  Provides-Extra: serializers
32
- Requires-Dist: tree-sitter>=0.25.2; extra == "serializers"
33
33
  Requires-Dist: more-itertools>=10.0.0; extra == "serializers"
34
34
  Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == "serializers"
35
35
  Requires-Dist: tree-sitter-go>=0.23.4; extra == "serializers"
36
+ Requires-Dist: tree-sitter-html>=0.23.2; extra == "serializers"
36
37
  Requires-Dist: tree-sitter-java>=0.23.4; extra == "serializers"
37
38
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "serializers"
38
39
  Requires-Dist: tree-sitter-json>=0.24.8; extra == "serializers"
39
40
  Requires-Dist: tree-sitter-kotlin>=1.0.1; extra == "serializers"
40
- Requires-Dist: tree-sitter-python>=0.23.4; extra == "serializers"
41
41
  Requires-Dist: tree-sitter-php==0.23.11; extra == "serializers"
42
+ Requires-Dist: tree-sitter-python>=0.23.4; extra == "serializers"
42
43
  Requires-Dist: tree-sitter-typescript>=0.23.2; extra == "serializers"
43
- Requires-Dist: tree-sitter-yaml>=0.7.0; extra == "serializers"
44
- Requires-Dist: tree-sitter-html>=0.23.2; extra == "serializers"
45
44
  Requires-Dist: tree-sitter-xml>=0.7.0; extra == "serializers"
45
+ Requires-Dist: tree-sitter-yaml>=0.7.0; extra == "serializers"
46
+ Requires-Dist: tree-sitter>=0.25.2; extra == "serializers"
47
+ Requires-Dist: tree-sitter-dart-orchard==0.3.2; extra == "serializers"
46
48
  Provides-Extra: cpg
47
49
  Requires-Dist: aioboto3>=13.3.0; extra == "cpg"
48
50
  Requires-Dist: platformdirs>=4.3.8; extra == "cpg"
@@ -54,13 +56,13 @@ Provides-Extra: all
54
56
  Requires-Dist: fluidattacks-core[aio]; extra == "all"
55
57
  Requires-Dist: fluidattacks-core[authz]; extra == "all"
56
58
  Requires-Dist: fluidattacks-core[bugsnag]; extra == "all"
59
+ Requires-Dist: fluidattacks-core[cpg]; extra == "all"
60
+ Requires-Dist: fluidattacks-core[filesystem]; extra == "all"
57
61
  Requires-Dist: fluidattacks-core[git]; extra == "all"
58
62
  Requires-Dist: fluidattacks-core[http]; extra == "all"
59
- Requires-Dist: fluidattacks-core[serializers]; extra == "all"
60
- Requires-Dist: fluidattacks-core[filesystem]; extra == "all"
61
- Requires-Dist: fluidattacks-core[cpg]; extra == "all"
62
63
  Requires-Dist: fluidattacks-core[sarif]; extra == "all"
63
64
  Requires-Dist: fluidattacks-core[semver]; extra == "all"
65
+ Requires-Dist: fluidattacks-core[serializers]; extra == "all"
64
66
 
65
67
  # Fluid Attacks Core Library
66
68
 
@@ -24,11 +24,19 @@ class LambdaSource(SourceStrategy):
24
24
 
25
25
  @staticmethod
26
26
  def log_metadata() -> dict[str, str]:
27
+ product_id = get_env_var("PRODUCT_ID")
28
+ function_name = get_env_var("AWS_LAMBDA_FUNCTION_NAME")
29
+ service = product_id or function_name or "unknown"
30
+
31
+ trace_header = get_env_var("_X_AMZN_TRACE_ID")
32
+
27
33
  return {
28
34
  "ddsource": "lambda",
29
- "dd.service": get_env_var("AWS_LAMBDA_FUNCTION_NAME") or "unknown",
35
+ "dd.service": service,
30
36
  "dd.version": get_version(),
31
37
  "deployment.environment": get_environment(),
38
+ "lambda_metadata.function_name": function_name or "unknown",
39
+ "lambda_metadata.trace_header": trace_header or "unknown",
32
40
  }
33
41
 
34
42
 
@@ -39,18 +47,31 @@ class BatchSource(SourceStrategy):
39
47
 
40
48
  @staticmethod
41
49
  def log_metadata() -> dict[str, str]:
42
- job_name = get_env_var("JOB_NAME")
50
+ job_id = get_env_var("AWS_BATCH_JOB_ID")
51
+ attempt = get_env_var("AWS_BATCH_JOB_ATTEMPT")
52
+ compute_environment = get_env_var("AWS_BATCH_CE_NAME")
53
+
54
+ product_id = get_env_var("PRODUCT_ID")
43
55
  job_definition_name = get_env_var("JOB_DEFINITION_NAME")
56
+ job_name = get_env_var("JOB_NAME")
44
57
  job_queue = get_env_var("AWS_BATCH_JQ_NAME")
45
- product_id = get_env_var("PRODUCT_ID")
46
58
  service = (
47
- job_name or job_definition_name or (f"from-{job_queue}" if job_queue else product_id)
59
+ product_id
60
+ or job_definition_name
61
+ or job_name
62
+ or (f"from-{job_queue}" if job_queue else "unknown")
48
63
  )
64
+
49
65
  return {
50
66
  "ddsource": "batch",
51
- "dd.service": service or "unknown",
67
+ "dd.service": service,
52
68
  "dd.version": get_version(),
53
69
  "deployment.environment": get_environment(),
70
+ "job_metadata.id": job_id or "unknown",
71
+ "job_metadata.queue": job_queue or "unknown",
72
+ "job_metadata.definition_name": job_definition_name or "unknown",
73
+ "job_metadata.attempt": attempt or "unknown",
74
+ "job_metadata.compute_environment": compute_environment or "unknown",
54
75
  }
55
76
 
56
77
 
@@ -88,20 +109,20 @@ class PipelineSource(SourceStrategy):
88
109
 
89
110
  return {
90
111
  "ddsource": f"ci/{pipeline}",
91
- "deployment.pipeline.type": pipeline,
112
+ "pipeline_metadata.type": pipeline,
92
113
  **(
93
114
  {
94
- "deployment.pipeline.CI_JOB_ID": get_env_var("CI_JOB_ID") or "unknown",
95
- "deployment.pipeline.CI_JOB_URL": get_env_var("CI_JOB_URL") or "unknown",
115
+ "pipeline_metadata.CI_JOB_ID": get_env_var("CI_JOB_ID") or "unknown",
116
+ "pipeline_metadata.CI_JOB_URL": get_env_var("CI_JOB_URL") or "unknown",
96
117
  }
97
118
  if pipeline == "gitlab_ci"
98
119
  else {}
99
120
  ),
100
121
  **(
101
122
  {
102
- "deployment.pipeline.CIRCLE_BUILD_NUM": get_env_var("CIRCLE_BUILD_NUM")
123
+ "pipeline_metadata.CIRCLE_BUILD_NUM": get_env_var("CIRCLE_BUILD_NUM")
103
124
  or "unknown",
104
- "deployment.pipeline.CIRCLE_BUILD_URL": get_env_var("CIRCLE_BUILD_URL")
125
+ "pipeline_metadata.CIRCLE_BUILD_URL": get_env_var("CIRCLE_BUILD_URL")
105
126
  or "unknown",
106
127
  }
107
128
  if pipeline == "circleci"
@@ -109,16 +130,16 @@ class PipelineSource(SourceStrategy):
109
130
  ),
110
131
  **(
111
132
  {
112
- "deployment.pipeline.System.JobId": get_env_var("System.JobId") or "unknown",
133
+ "pipeline_metadata.System.JobId": get_env_var("System.JobId") or "unknown",
113
134
  }
114
135
  if pipeline == "azure_devops"
115
136
  else {}
116
137
  ),
117
138
  **(
118
139
  {
119
- "deployment.pipeline.BUILD_NUMBER": get_env_var("BUILD_NUMBER") or "unknown",
120
- "deployment.pipeline.BUILD_ID": get_env_var("BUILD_ID") or "unknown",
121
- "deployment.pipeline.BUILD_URL": get_env_var("BUILD_URL") or "unknown",
140
+ "pipeline_metadata.BUILD_NUMBER": get_env_var("BUILD_NUMBER") or "unknown",
141
+ "pipeline_metadata.BUILD_ID": get_env_var("BUILD_ID") or "unknown",
142
+ "pipeline_metadata.BUILD_URL": get_env_var("BUILD_URL") or "unknown",
122
143
  }
123
144
  if pipeline == "jenkins"
124
145
  else {}
@@ -137,11 +158,16 @@ class ContainerSource(SourceStrategy):
137
158
 
138
159
  @staticmethod
139
160
  def log_metadata() -> dict[str, str]:
161
+ product_id = get_env_var("PRODUCT_ID")
162
+ container_image = get_env_var("CONTAINER_IMAGE")
163
+ service = product_id or container_image or "unknown"
164
+
140
165
  return {
141
166
  "ddsource": "container",
142
- "dd.service": get_env_var("PRODUCT_ID") or "unknown",
167
+ "dd.service": service,
143
168
  "dd.version": get_version(),
144
169
  "deployment.environment": get_environment(),
170
+ "container_metadata.image": container_image or "unknown",
145
171
  }
146
172
 
147
173
 
@@ -281,7 +281,10 @@ def get_language_from_path(path: str) -> str | None:
281
281
 
282
282
  def get_language_for_tree(language: str) -> Language:
283
283
  try:
284
- language_module = importlib.import_module(f"tree_sitter_{language}")
284
+ parser_name = (
285
+ f"tree_sitter_{language}" if language != "dart" else "tree_sitter_dart_orchard"
286
+ )
287
+ language_module = importlib.import_module(parser_name)
285
288
  function_name = {
286
289
  "php": "language_php",
287
290
  "tsx": "language_tsx",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fluidattacks-core
3
- Version: 4.2.1
3
+ Version: 4.3.1
4
4
  Summary: Fluid Attacks Core Library
5
5
  Author-email: Development <development@fluidattacks.com>
6
6
  License: MPL-2.0
@@ -25,24 +25,26 @@ Requires-Dist: bugsnag>=4.7.1; extra == "bugsnag"
25
25
  Provides-Extra: git
26
26
  Requires-Dist: aiofiles>=23.2.1; extra == "git"
27
27
  Requires-Dist: boto3>=1.34; extra == "git"
28
+ Requires-Dist: botocore>=1.40.18; extra == "git"
28
29
  Requires-Dist: GitPython>=3.1.41; extra == "git"
29
30
  Requires-Dist: pathspec>=0.12.1; extra == "git"
30
31
  Provides-Extra: http
31
32
  Provides-Extra: serializers
32
- Requires-Dist: tree-sitter>=0.25.2; extra == "serializers"
33
33
  Requires-Dist: more-itertools>=10.0.0; extra == "serializers"
34
34
  Requires-Dist: tree-sitter-c-sharp>=0.23.1; extra == "serializers"
35
35
  Requires-Dist: tree-sitter-go>=0.23.4; extra == "serializers"
36
+ Requires-Dist: tree-sitter-html>=0.23.2; extra == "serializers"
36
37
  Requires-Dist: tree-sitter-java>=0.23.4; extra == "serializers"
37
38
  Requires-Dist: tree-sitter-javascript>=0.23.1; extra == "serializers"
38
39
  Requires-Dist: tree-sitter-json>=0.24.8; extra == "serializers"
39
40
  Requires-Dist: tree-sitter-kotlin>=1.0.1; extra == "serializers"
40
- Requires-Dist: tree-sitter-python>=0.23.4; extra == "serializers"
41
41
  Requires-Dist: tree-sitter-php==0.23.11; extra == "serializers"
42
+ Requires-Dist: tree-sitter-python>=0.23.4; extra == "serializers"
42
43
  Requires-Dist: tree-sitter-typescript>=0.23.2; extra == "serializers"
43
- Requires-Dist: tree-sitter-yaml>=0.7.0; extra == "serializers"
44
- Requires-Dist: tree-sitter-html>=0.23.2; extra == "serializers"
45
44
  Requires-Dist: tree-sitter-xml>=0.7.0; extra == "serializers"
45
+ Requires-Dist: tree-sitter-yaml>=0.7.0; extra == "serializers"
46
+ Requires-Dist: tree-sitter>=0.25.2; extra == "serializers"
47
+ Requires-Dist: tree-sitter-dart-orchard==0.3.2; extra == "serializers"
46
48
  Provides-Extra: cpg
47
49
  Requires-Dist: aioboto3>=13.3.0; extra == "cpg"
48
50
  Requires-Dist: platformdirs>=4.3.8; extra == "cpg"
@@ -54,13 +56,13 @@ Provides-Extra: all
54
56
  Requires-Dist: fluidattacks-core[aio]; extra == "all"
55
57
  Requires-Dist: fluidattacks-core[authz]; extra == "all"
56
58
  Requires-Dist: fluidattacks-core[bugsnag]; extra == "all"
59
+ Requires-Dist: fluidattacks-core[cpg]; extra == "all"
60
+ Requires-Dist: fluidattacks-core[filesystem]; extra == "all"
57
61
  Requires-Dist: fluidattacks-core[git]; extra == "all"
58
62
  Requires-Dist: fluidattacks-core[http]; extra == "all"
59
- Requires-Dist: fluidattacks-core[serializers]; extra == "all"
60
- Requires-Dist: fluidattacks-core[filesystem]; extra == "all"
61
- Requires-Dist: fluidattacks-core[cpg]; extra == "all"
62
63
  Requires-Dist: fluidattacks-core[sarif]; extra == "all"
63
64
  Requires-Dist: fluidattacks-core[semver]; extra == "all"
65
+ Requires-Dist: fluidattacks-core[serializers]; extra == "all"
64
66
 
65
67
  # Fluid Attacks Core Library
66
68
 
@@ -11,13 +11,13 @@ uvloop>=0.21.0
11
11
  fluidattacks-core[aio]
12
12
  fluidattacks-core[authz]
13
13
  fluidattacks-core[bugsnag]
14
+ fluidattacks-core[cpg]
15
+ fluidattacks-core[filesystem]
14
16
  fluidattacks-core[git]
15
17
  fluidattacks-core[http]
16
- fluidattacks-core[serializers]
17
- fluidattacks-core[filesystem]
18
- fluidattacks-core[cpg]
19
18
  fluidattacks-core[sarif]
20
19
  fluidattacks-core[semver]
20
+ fluidattacks-core[serializers]
21
21
 
22
22
  [authz]
23
23
 
@@ -33,6 +33,7 @@ platformdirs>=4.3.8
33
33
  [git]
34
34
  aiofiles>=23.2.1
35
35
  boto3>=1.34
36
+ botocore>=1.40.18
36
37
  GitPython>=3.1.41
37
38
  pathspec>=0.12.1
38
39
 
@@ -44,17 +45,18 @@ pydantic>=2.12.3
44
45
  [semver]
45
46
 
46
47
  [serializers]
47
- tree-sitter>=0.25.2
48
48
  more-itertools>=10.0.0
49
49
  tree-sitter-c-sharp>=0.23.1
50
50
  tree-sitter-go>=0.23.4
51
+ tree-sitter-html>=0.23.2
51
52
  tree-sitter-java>=0.23.4
52
53
  tree-sitter-javascript>=0.23.1
53
54
  tree-sitter-json>=0.24.8
54
55
  tree-sitter-kotlin>=1.0.1
55
- tree-sitter-python>=0.23.4
56
56
  tree-sitter-php==0.23.11
57
+ tree-sitter-python>=0.23.4
57
58
  tree-sitter-typescript>=0.23.2
58
- tree-sitter-yaml>=0.7.0
59
- tree-sitter-html>=0.23.2
60
59
  tree-sitter-xml>=0.7.0
60
+ tree-sitter-yaml>=0.7.0
61
+ tree-sitter>=0.25.2
62
+ tree-sitter-dart-orchard==0.3.2
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fluidattacks-core"
3
- version = "4.2.1"
3
+ version = "4.3.1"
4
4
  description = "Fluid Attacks Core Library"
5
5
  authors = [{ name = "Development", email = "development@fluidattacks.com" }]
6
6
  license = { text = "MPL-2.0" }
@@ -30,25 +30,27 @@ bugsnag = ["bugsnag>=4.7.1"]
30
30
  git = [
31
31
  "aiofiles>=23.2.1",
32
32
  "boto3>=1.34",
33
+ "botocore>=1.40.18",
33
34
  "GitPython>=3.1.41",
34
35
  "pathspec>=0.12.1",
35
36
  ]
36
37
  http = []
37
38
  serializers = [
38
- "tree-sitter>=0.25.2",
39
39
  "more-itertools>=10.0.0",
40
40
  "tree-sitter-c-sharp>=0.23.1",
41
41
  "tree-sitter-go>=0.23.4",
42
+ "tree-sitter-html>=0.23.2",
42
43
  "tree-sitter-java>=0.23.4",
43
44
  "tree-sitter-javascript>=0.23.1",
44
45
  "tree-sitter-json>=0.24.8",
45
46
  "tree-sitter-kotlin>=1.0.1",
46
- "tree-sitter-python>=0.23.4",
47
47
  "tree-sitter-php==0.23.11",
48
+ "tree-sitter-python>=0.23.4",
48
49
  "tree-sitter-typescript>=0.23.2",
49
- "tree-sitter-yaml>=0.7.0",
50
- "tree-sitter-html>=0.23.2",
51
50
  "tree-sitter-xml>=0.7.0",
51
+ "tree-sitter-yaml>=0.7.0",
52
+ "tree-sitter>=0.25.2",
53
+ "tree-sitter-dart-orchard==0.3.2",
52
54
  ]
53
55
  cpg = ["aioboto3>=13.3.0", "platformdirs>=4.3.8"]
54
56
  filesystem = []
@@ -58,28 +60,29 @@ all = [
58
60
  "fluidattacks-core[aio]",
59
61
  "fluidattacks-core[authz]",
60
62
  "fluidattacks-core[bugsnag]",
63
+ "fluidattacks-core[cpg]",
64
+ "fluidattacks-core[filesystem]",
61
65
  "fluidattacks-core[git]",
62
66
  "fluidattacks-core[http]",
63
- "fluidattacks-core[serializers]",
64
- "fluidattacks-core[filesystem]",
65
- "fluidattacks-core[cpg]",
66
67
  "fluidattacks-core[sarif]",
67
68
  "fluidattacks-core[semver]",
69
+ "fluidattacks-core[serializers]",
68
70
  ]
69
71
 
70
72
  [dependency-groups]
71
73
  dev = [
72
74
  "boto3-stubs[essential,dynamodbstreams,sts]>=1.34.0",
73
75
  "botocore-stubs==1.35.71",
76
+ "datamodel-code-generator>=0.35.0",
77
+ "deptry==0.24.0",
74
78
  "import-linter==2.5.2",
75
79
  "mypy==1.18.2",
76
- "ruff==0.14.0",
80
+ "pytest-asyncio>=1.1.0",
77
81
  "pytest==8.4.1",
82
+ "ruff==0.14.0",
83
+ "types-aioboto3[s3]>=15.1.0",
78
84
  "types-aiofiles==24.1.0.20240626",
79
85
  "types-simplejson>=3.20.0.20250822",
80
- "types-aioboto3[s3]>=15.1.0",
81
- "pytest-asyncio>=1.1.0",
82
- "datamodel-code-generator>=0.35.0",
83
86
  ]
84
87
 
85
88
  [tool.setuptools]
@@ -91,6 +94,26 @@ include = ["fluidattacks_core*"]
91
94
  [tool.setuptools.package-data]
92
95
  "fluidattacks_core.sarif" = ["__init__.py"]
93
96
 
97
+ [tool.deptry]
98
+ extend_exclude = ["^test/.*"]
99
+
100
+ [tool.deptry.per_rule_ignores]
101
+ DEP002 = [
102
+ "tree-sitter-c-sharp",
103
+ "tree-sitter-go",
104
+ "tree-sitter-html",
105
+ "tree-sitter-java",
106
+ "tree-sitter-javascript",
107
+ "tree-sitter-json",
108
+ "tree-sitter-kotlin",
109
+ "tree-sitter-php",
110
+ "tree-sitter-python",
111
+ "tree-sitter-typescript",
112
+ "tree-sitter-xml",
113
+ "tree-sitter-yaml",
114
+ "tree-sitter-dart-orchard",
115
+ ]
116
+
94
117
  [build-system]
95
118
  requires = ["setuptools>=69", "wheel"]
96
119
  build-backend = "setuptools.build_meta"
@@ -122,10 +122,11 @@ def test_json_formatter_for_lambdas(
122
122
  @pytest.mark.parametrize(
123
123
  ("job_name", "job_queue", "product_id", "expected_source", "expected_service_name"),
124
124
  [
125
- ("skims_process", "skims_large", "skims", "batch", "skims_process"),
126
- (None, "skims_large", "skims", "batch", "from-skims_large"),
125
+ ("skims_process", "skims_large", "skims", "batch", "skims"),
126
+ ("skims_process", "skims_large", None, "batch", "skims_process"),
127
127
  (None, None, "skims", "batch", "skims"),
128
128
  (None, None, None, "batch", "unknown"),
129
+ (None, "skims_large", None, "batch", "from-skims_large"),
129
130
  ],
130
131
  )
131
132
  def test_json_formatter_for_batch( # noqa: PLR0913
@@ -149,6 +150,7 @@ def test_json_formatter_for_batch( # noqa: PLR0913
149
150
  log_entry = json.loads(output.err)
150
151
  assert log_entry["ddsource"] == expected_source
151
152
  assert log_entry["dd.service"] == expected_service_name
153
+ assert log_entry["job_metadata.id"] == "111"
152
154
 
153
155
 
154
156
  @pytest.mark.parametrize(