ethyca-fides 2.67.2b2__py2.py3-none-any.whl → 2.67.2rc0__py2.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.

Potentially problematic release.


This version of ethyca-fides might be problematic. Click here for more details.

Files changed (107) hide show
  1. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/METADATA +2 -2
  2. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/RECORD +107 -107
  3. fides/_version.py +3 -3
  4. fides/api/db/crud.py +41 -24
  5. fides/api/graph/traversal.py +1 -1
  6. fides/api/main.py +1 -2
  7. fides/api/models/detection_discovery/core.py +20 -33
  8. fides/api/models/manual_task/manual_task.py +6 -3
  9. fides/api/models/privacy_request/privacy_request.py +0 -78
  10. fides/api/service/privacy_request/dsr_package/dsr_report_builder.py +19 -3
  11. fides/api/task/create_request_tasks.py +3 -5
  12. fides/api/task/filter_results.py +1 -1
  13. fides/api/task/manual/manual_task_address.py +2 -4
  14. fides/api/task/manual/manual_task_graph_task.py +83 -87
  15. fides/api/task/manual/manual_task_utils.py +201 -84
  16. fides/api/tasks/storage.py +0 -3
  17. fides/api/util/aws_util.py +13 -1
  18. fides/api/util/storage_util.py +0 -19
  19. fides/ui-build/static/admin/404.html +1 -1
  20. fides/ui-build/static/admin/_next/static/{gqCWjlCr8J6bJ_5t4lTGZ → Y7C7V1jdXK7rWXDIdtD13}/_buildManifest.js +1 -1
  21. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-330475705adbd36f.js → [id]-e0a755c69081fffa.js} +1 -1
  22. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  23. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  24. fides/ui-build/static/admin/add-systems.html +1 -1
  25. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  26. fides/ui-build/static/admin/consent/configure.html +1 -1
  27. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  28. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  29. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  30. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  31. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  32. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  33. fides/ui-build/static/admin/consent/properties.html +1 -1
  34. fides/ui-build/static/admin/consent/reporting.html +1 -1
  35. fides/ui-build/static/admin/consent.html +1 -1
  36. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  37. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  38. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  39. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  40. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  41. fides/ui-build/static/admin/data-catalog.html +1 -1
  42. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  43. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  44. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  45. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  46. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  47. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  48. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  49. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  50. fides/ui-build/static/admin/datamap.html +1 -1
  51. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  52. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  53. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  54. fides/ui-build/static/admin/dataset/new.html +1 -1
  55. fides/ui-build/static/admin/dataset.html +1 -1
  56. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  57. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  58. fides/ui-build/static/admin/datastore-connection.html +1 -1
  59. fides/ui-build/static/admin/index.html +1 -1
  60. fides/ui-build/static/admin/integrations/[id].html +1 -1
  61. fides/ui-build/static/admin/integrations.html +1 -1
  62. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  63. fides/ui-build/static/admin/login/[provider].html +1 -1
  64. fides/ui-build/static/admin/login.html +1 -1
  65. fides/ui-build/static/admin/messaging/[id].html +1 -1
  66. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  67. fides/ui-build/static/admin/messaging.html +1 -1
  68. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  69. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  70. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  71. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  72. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  73. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  74. fides/ui-build/static/admin/poc/forms.html +1 -1
  75. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  76. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  77. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  78. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  79. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  80. fides/ui-build/static/admin/privacy-requests.html +1 -1
  81. fides/ui-build/static/admin/properties/[id].html +1 -1
  82. fides/ui-build/static/admin/properties/add-property.html +1 -1
  83. fides/ui-build/static/admin/properties.html +1 -1
  84. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  85. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  86. fides/ui-build/static/admin/settings/about.html +1 -1
  87. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  88. fides/ui-build/static/admin/settings/consent.html +1 -1
  89. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  90. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  91. fides/ui-build/static/admin/settings/domains.html +1 -1
  92. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  93. fides/ui-build/static/admin/settings/locations.html +1 -1
  94. fides/ui-build/static/admin/settings/organization.html +1 -1
  95. fides/ui-build/static/admin/settings/regulations.html +1 -1
  96. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  97. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  98. fides/ui-build/static/admin/systems.html +1 -1
  99. fides/ui-build/static/admin/taxonomy.html +1 -1
  100. fides/ui-build/static/admin/user-management/new.html +1 -1
  101. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  102. fides/ui-build/static/admin/user-management.html +1 -1
  103. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/WHEEL +0 -0
  104. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/entry_points.txt +0 -0
  105. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/licenses/LICENSE +0 -0
  106. {ethyca_fides-2.67.2b2.dist-info → ethyca_fides-2.67.2rc0.dist-info}/top_level.txt +0 -0
  107. /fides/ui-build/static/admin/_next/static/{gqCWjlCr8J6bJ_5t4lTGZ → Y7C7V1jdXK7rWXDIdtD13}/_ssgManifest.js +0 -0
@@ -1,43 +1,40 @@
1
- from typing import Optional
2
-
3
- from loguru import logger
4
1
  from sqlalchemy.orm import Session
5
2
 
6
3
  from fides.api.graph.config import (
7
4
  Collection,
8
5
  CollectionAddress,
9
- FieldAddress,
6
+ Field,
10
7
  GraphDataset,
11
8
  ScalarField,
12
9
  )
10
+ from fides.api.graph.graph import Node
11
+ from fides.api.graph.traversal import TraversalNode
13
12
  from fides.api.models.connectionconfig import ConnectionConfig
14
13
 
15
14
  # Import application models
16
15
  from fides.api.models.manual_task import (
17
16
  ManualTask,
18
- ManualTaskConditionalDependencyType,
17
+ ManualTaskConfig,
19
18
  ManualTaskConfigurationType,
19
+ ManualTaskEntityType,
20
+ ManualTaskInstance,
20
21
  )
22
+ from fides.api.models.privacy_request import PrivacyRequest
23
+ from fides.api.schemas.policy import ActionType
21
24
  from fides.api.task.manual.manual_task_address import ManualTaskAddress
22
25
 
23
- PRIVACY_REQUEST_CONFIG_TYPES = {
24
- ManualTaskConfigurationType.access_privacy_request,
25
- ManualTaskConfigurationType.erasure_privacy_request,
26
- }
27
-
28
26
 
29
27
  def get_connection_configs_with_manual_tasks(db: Session) -> list[ConnectionConfig]:
30
28
  """
31
29
  Get all connection configs that have manual tasks.
32
30
  """
33
- connection_configs = (
31
+ return (
34
32
  db.query(ConnectionConfig)
35
33
  .join(ManualTask, ConnectionConfig.id == ManualTask.parent_entity_id)
36
34
  .filter(ManualTask.parent_entity_type == "connection_config")
37
35
  .filter(ConnectionConfig.disabled.is_(False))
38
36
  .all()
39
37
  )
40
- return connection_configs
41
38
 
42
39
 
43
40
  def get_manual_task_addresses(db: Session) -> list[CollectionAddress]:
@@ -51,11 +48,12 @@ def get_manual_task_addresses(db: Session) -> list[CollectionAddress]:
51
48
  # Get all connection configs that have manual tasks (excluding disabled ones)
52
49
  connection_configs_with_manual_tasks = get_connection_configs_with_manual_tasks(db)
53
50
 
54
- # Return addresses for all connections that have manual tasks
55
- return [
56
- ManualTaskAddress.create(config.key)
57
- for config in connection_configs_with_manual_tasks
58
- ]
51
+ # Create addresses for all connections that have manual tasks
52
+ manual_task_addresses = []
53
+ for config in connection_configs_with_manual_tasks:
54
+ manual_task_addresses.append(ManualTaskAddress.create(config.key))
55
+
56
+ return manual_task_addresses
59
57
 
60
58
 
61
59
  def get_manual_task_for_connection_config(
@@ -75,18 +73,20 @@ def get_manual_task_for_connection_config(
75
73
  )
76
74
 
77
75
 
78
- def create_data_category_scalar_fields(manual_task: ManualTask) -> list[ScalarField]:
76
+ def create_manual_data_traversal_node(
77
+ db: Session, address: CollectionAddress
78
+ ) -> "TraversalNode":
79
79
  """
80
- Create scalar fields for each field in the given manual task configs.
80
+ Create a TraversalNode for a manual_data collection
81
81
  """
82
- fields = []
83
- # Get current privacy request configs for this manual task
84
- current_configs = [
85
- config
86
- for config in manual_task.configs
87
- if config.is_current and config.config_type in PRIVACY_REQUEST_CONFIG_TYPES
88
- ]
89
- for config in current_configs:
82
+ connection_key = address.dataset
83
+
84
+ # Get manual tasks for this connection to determine fields
85
+ manual_task = get_manual_task_for_connection_config(db, connection_key)
86
+
87
+ # Create fields based on ManualTaskConfigFields
88
+ fields: list[Field] = []
89
+ for config in manual_task.configs:
90
90
  for field in config.field_definitions:
91
91
  # Create a scalar field for each manual task field
92
92
  # Extract data categories from field metadata if available
@@ -99,94 +99,211 @@ def create_data_category_scalar_fields(manual_task: ManualTask) -> list[ScalarFi
99
99
  # Manual task fields don't have complex relationships
100
100
  )
101
101
  fields.append(scalar_field)
102
- return fields
103
-
104
-
105
- def create_conditional_dependency_scalar_fields(
106
- field_addresses: set[str],
107
- ) -> list[ScalarField]:
108
- fields: list[ScalarField] = []
109
- for field_address in field_addresses:
110
- # Use the full field address as the field name to preserve collection context
111
- # This allows the manual task to receive data from specific collections
112
- # e.g., "user.name" or "customer.profile.email" instead of just "name" or "email"
113
- logger.info(
114
- f"Creating conditional dependency scalar field for field address: {field_address}"
115
- )
116
- field_address_obj = FieldAddress.from_string(field_address)
117
102
 
118
- scalar_field = ScalarField(
119
- name=field_address_obj.value,
120
- # Conditional dependency fields don't have predefined data categories
121
- data_categories=[],
122
- references=[(field_address_obj, "from")],
123
- )
124
- fields.append(scalar_field)
103
+ # Create a synthetic Collection
104
+ collection = Collection(
105
+ name=ManualTaskAddress.MANUAL_DATA_COLLECTION,
106
+ fields=fields,
107
+ # Manual tasks don't have complex dependencies
108
+ after=set(),
109
+ )
125
110
 
126
- return fields
111
+ # Create a synthetic GraphDataset
112
+ dataset = GraphDataset(
113
+ name=connection_key,
114
+ collections=[collection],
115
+ connection_key=connection_key,
116
+ after=set(),
117
+ )
127
118
 
119
+ node = Node(dataset, collection)
120
+ traversal_node = TraversalNode(node)
128
121
 
129
- def create_collection_for_connection_key(
130
- db: Session, connection_key: str
131
- ) -> Optional[Collection]:
132
- # Get the manual task for this connection config
133
- manual_task = get_manual_task_for_connection_config(db, connection_key)
122
+ return traversal_node
123
+
124
+
125
+ def create_manual_task_instances_for_privacy_request(
126
+ db: Session, privacy_request: PrivacyRequest
127
+ ) -> list[ManualTaskInstance]:
128
+ """Create ManualTaskInstance entries for all active manual tasks relevant to a privacy request."""
129
+ instances = []
130
+
131
+ # Get all connection configs that have manual tasks (excluding disabled ones)
132
+ connection_configs_with_manual_tasks = get_connection_configs_with_manual_tasks(db)
134
133
 
135
- if not manual_task:
136
- return None
137
-
138
- # Get conditional dependency field addresses - raw field data
139
- conditional_field_addresses: set[str] = {
140
- dependency.field_address
141
- for dependency in manual_task.conditional_dependencies
142
- if dependency.condition_type == ManualTaskConditionalDependencyType.leaf
143
- and dependency.field_address is not None
144
- }
145
-
146
- # Create scalar fields for data category fields and conditional dependency field addresses
147
- fields: list[ScalarField] = []
148
- fields.extend(create_data_category_scalar_fields(manual_task))
149
- fields.extend(
150
- create_conditional_dependency_scalar_fields(conditional_field_addresses)
134
+ # Determine the privacy request type based on policy rules
135
+ has_access_rules = bool(
136
+ privacy_request.policy.get_rules_for_action(action_type=ActionType.access)
137
+ )
138
+ has_erasure_rules = bool(
139
+ privacy_request.policy.get_rules_for_action(action_type=ActionType.erasure)
151
140
  )
152
141
 
153
- # Only create collection if there are fields
154
- if not fields:
155
- return None
142
+ for connection_config in connection_configs_with_manual_tasks:
143
+ manual_tasks = (
144
+ db.query(ManualTask)
145
+ .filter(
146
+ ManualTask.parent_entity_id == connection_config.id,
147
+ ManualTask.parent_entity_type == "connection_config",
148
+ )
149
+ .all()
150
+ )
156
151
 
157
- return Collection(name=ManualTaskAddress.MANUAL_DATA_COLLECTION, fields=fields)
152
+ for manual_task in manual_tasks:
153
+ # Get the active config for this manual task, filtered by request type
154
+ active_config_query = db.query(ManualTaskConfig).filter(
155
+ ManualTaskConfig.task_id == manual_task.id,
156
+ ManualTaskConfig.is_current.is_(True),
157
+ )
158
+
159
+ # Filter by configuration type based on privacy request type
160
+ if has_access_rules and has_erasure_rules:
161
+ # If both access and erasure rules exist, include both types
162
+ active_config_query = active_config_query.filter(
163
+ ManualTaskConfig.config_type.in_(
164
+ [
165
+ ManualTaskConfigurationType.access_privacy_request,
166
+ ManualTaskConfigurationType.erasure_privacy_request,
167
+ ]
168
+ )
169
+ )
170
+ elif has_access_rules:
171
+ # Only access rules - only include access configurations
172
+ active_config_query = active_config_query.filter(
173
+ ManualTaskConfig.config_type
174
+ == ManualTaskConfigurationType.access_privacy_request
175
+ )
176
+ elif has_erasure_rules:
177
+ # Only erasure rules - only include erasure configurations
178
+ active_config_query = active_config_query.filter(
179
+ ManualTaskConfig.config_type
180
+ == ManualTaskConfigurationType.erasure_privacy_request
181
+ )
182
+ else:
183
+ # No relevant rules - skip this manual task
184
+ continue
185
+
186
+ active_configs = active_config_query.all()
187
+
188
+ if not active_configs:
189
+ continue # Skip if no active configs
190
+
191
+ # Create instances for each active config
192
+ for active_config in active_configs:
193
+ # Check if instance already exists for this config
194
+ existing_instance = (
195
+ db.query(ManualTaskInstance)
196
+ .filter(
197
+ ManualTaskInstance.entity_id == privacy_request.id,
198
+ ManualTaskInstance.entity_type == "privacy_request",
199
+ ManualTaskInstance.task_id == manual_task.id,
200
+ ManualTaskInstance.config_id == active_config.id,
201
+ )
202
+ .first()
203
+ )
204
+
205
+ if not existing_instance:
206
+ instance = ManualTaskInstance(
207
+ entity_id=privacy_request.id,
208
+ entity_type=ManualTaskEntityType.privacy_request,
209
+ task_id=manual_task.id,
210
+ config_id=active_config.id,
211
+ )
212
+ db.add(instance)
213
+ instances.append(instance)
214
+
215
+ if instances:
216
+ db.commit()
217
+
218
+ return instances
219
+
220
+
221
+ def get_manual_task_instances_for_privacy_request(
222
+ db: Session, privacy_request: PrivacyRequest
223
+ ) -> list[ManualTaskInstance]:
224
+ """Get all manual task instances for a privacy request."""
225
+ return (
226
+ db.query(ManualTaskInstance)
227
+ .filter(
228
+ ManualTaskInstance.entity_id == privacy_request.id,
229
+ ManualTaskInstance.entity_type == "privacy_request",
230
+ )
231
+ .all()
232
+ )
158
233
 
159
234
 
160
- def create_manual_task_artificial_graphs(db: Session) -> list[GraphDataset]:
235
+ def create_manual_task_artificial_graphs(
236
+ db: Session,
237
+ ) -> list:
161
238
  """
162
239
  Create artificial GraphDataset objects for manual tasks that can be included
163
240
  in the main dataset graph during the dataset configuration phase.
164
241
 
165
- Each manual task gets its own collection with its own dependencies based on
166
- its specific conditional dependencies. This allows individual manual tasks
167
- to receive only the data they need from regular tasks.
242
+ Manual tasks should be treated as data sources/datasets rather than being
243
+ appended to the traversal graph later.
244
+
245
+ Manual task collections are designed as root nodes that execute immediately when
246
+ the privacy request starts, in parallel with identity processing. They don't depend
247
+ on identity data since they provide manually-entered data rather than consuming it.
168
248
 
169
249
  Args:
170
250
  db: Database session
251
+ policy: The policy being executed (optional, for filtering manual task configs)
171
252
 
172
253
  Returns:
173
- List of GraphDataset objects representing manual tasks as individual collections
254
+ List of GraphDataset objects representing manual tasks as root nodes
174
255
  """
256
+
175
257
  manual_task_graphs = []
176
258
  manual_addresses = get_manual_task_addresses(db)
177
259
 
178
260
  for address in manual_addresses:
179
261
  connection_key = address.dataset
180
262
 
181
- # Get the collection for this connection config using the reusable function
182
- collection = create_collection_for_connection_key(db, connection_key)
263
+ # Get manual tasks for this connection to determine fields
264
+ manual_task = get_manual_task_for_connection_config(db, connection_key)
265
+
266
+ # Create fields based only on ManualTaskConfigFields
267
+ fields: list = []
268
+
269
+ # Manual task collections act as root nodes - they don't need identity dependencies
270
+ # since they provide manually-entered data rather than consuming identity data.
271
+ current_configs = [
272
+ config for config in manual_task.configs if config.is_current
273
+ ]
274
+ for config in current_configs:
275
+ if config.config_type not in [
276
+ ManualTaskConfigurationType.access_privacy_request,
277
+ ManualTaskConfigurationType.erasure_privacy_request,
278
+ ]:
279
+ continue
280
+
281
+ for field in config.field_definitions:
282
+ # Create a scalar field for each manual task field
283
+ field_metadata = field.field_metadata or {}
284
+ data_categories = field_metadata.get("data_categories", [])
285
+
286
+ scalar_field = ScalarField(
287
+ name=field.field_key,
288
+ data_categories=data_categories,
289
+ )
290
+ fields.append(scalar_field)
291
+
292
+ if fields: # Only create graph if there are fields
293
+ # Create a synthetic Collection
294
+ collection = Collection(
295
+ name=ManualTaskAddress.MANUAL_DATA_COLLECTION,
296
+ fields=fields,
297
+ # Manual tasks have no dependencies - they're root nodes
298
+ after=set(),
299
+ )
183
300
 
184
- if collection: # Only create graph if there are collections
185
- # Create a synthetic GraphDataset with all manual task collections
301
+ # Create a synthetic GraphDataset
186
302
  graph_dataset = GraphDataset(
187
303
  name=connection_key,
188
304
  collections=[collection],
189
305
  connection_key=connection_key,
306
+ after=set(),
190
307
  )
191
308
 
192
309
  manual_task_graphs.append(graph_dataset)
@@ -122,9 +122,6 @@ def upload_to_s3( # pylint: disable=R0913
122
122
  s3_client = get_s3_client(
123
123
  auth_method,
124
124
  storage_secrets,
125
- assume_role_arn=CONFIG.credentials.get( # pylint: disable=no-member
126
- "storage", {}
127
- ).get("aws_s3_assume_role_arn"),
128
125
  )
129
126
  except (ClientError, ParamValidationError) as e:
130
127
  logger.error(f"Error getting s3 client: {str(e)}")
@@ -7,6 +7,7 @@ from loguru import logger
7
7
 
8
8
  from fides.api.common_exceptions import StorageUploadError
9
9
  from fides.api.schemas.storage.storage import AWSAuthMethod, StorageSecrets
10
+ from fides.config import CONFIG
10
11
 
11
12
 
12
13
  def get_aws_session(
@@ -94,11 +95,22 @@ def get_s3_client(
94
95
 
95
96
  If an `assume_role_arn` is provided, the secrets will be used to
96
97
  assume that role and return a Session instantiated with that role.
98
+
99
+ If no `assume_role_arn` is provided, and `aws_s3_assume_role_arn` is
100
+ configured in the global `credentials.storage` config, then the secrets
101
+ will be used to assume that role and return a Session instantiated with
102
+ that role.
97
103
  """
104
+
105
+ configured_assume_role_arn = CONFIG.credentials.get( # pylint: disable=no-member
106
+ "storage", {}
107
+ ).get( # pylint: disable=no-member
108
+ "aws_s3_assume_role_arn"
109
+ )
98
110
  session = get_aws_session(
99
111
  auth_method=auth_method,
100
112
  storage_secrets=storage_secrets,
101
- assume_role_arn=assume_role_arn,
113
+ assume_role_arn=assume_role_arn or configured_assume_role_arn,
102
114
  )
103
115
 
104
116
  # Configure S3 client to use signature version 4 for KMS compatibility
@@ -14,25 +14,6 @@ from fides.api.schemas.storage.storage_secrets_docs_only import possible_storage
14
14
  from fides.api.util.custom_json_encoder import CustomJSONEncoder
15
15
 
16
16
 
17
- def format_size(size_bytes: float) -> str:
18
- """
19
- Format size in bytes to human readable format.
20
-
21
- Args:
22
- size_bytes: Size in bytes
23
-
24
- Returns:
25
- Formatted string with appropriate unit (B, KB, MB, GB, TB, PB)
26
- """
27
- units = ["B", "KB", "MB", "GB", "TB"]
28
- size = float(size_bytes)
29
- for unit in units:
30
- if size < 1024.0:
31
- return f"{size:.1f} {unit}"
32
- size /= 1024.0
33
- return f"{size:.1f} PB"
34
-
35
-
36
17
  def get_schema_for_secrets(
37
18
  storage_type: Union[StorageType, str],
38
19
  secrets: possible_storage_secrets,
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d9924caa849931b3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d9924caa849931b3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-90e8ec1fc5c6455b.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-750d6bd16c971bb9.js" defer=""></script><script src="/_next/static/chunks/pages/404-2d803dab6a00f353.js" defer=""></script><script src="/_next/static/gqCWjlCr8J6bJ_5t4lTGZ/_buildManifest.js" defer=""></script><script src="/_next/static/gqCWjlCr8J6bJ_5t4lTGZ/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"gqCWjlCr8J6bJ_5t4lTGZ","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d9924caa849931b3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d9924caa849931b3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-90e8ec1fc5c6455b.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-090643377c8254e6.js" defer=""></script><script src="/_next/static/chunks/pages/_app-750d6bd16c971bb9.js" defer=""></script><script src="/_next/static/chunks/pages/404-2d803dab6a00f353.js" defer=""></script><script src="/_next/static/Y7C7V1jdXK7rWXDIdtD13/_buildManifest.js" defer=""></script><script src="/_next/static/Y7C7V1jdXK7rWXDIdtD13/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"Y7C7V1jdXK7rWXDIdtD13","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,p,u,g,f,m,j,b,k,h,y,l,v,I,F,x,_,U,w,q,N,A,S,B,C,z,D,E,L,M,T,P,G,H,J,K,O,Q){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[I,"static/chunks/pages/index-fbf9b845bb901238.js"],"/404":["static/chunks/pages/404-2d803dab6a00f353.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[I,"static/chunks/pages/add-systems-0902f0bb4080643e.js"],"/add-systems/manual":[s,e,t,c,p,a,i,u,b,F,x,"static/chunks/pages/add-systems/manual-2a655ff3a97f2492.js"],"/add-systems/multiple":[i,g,_,"static/chunks/pages/add-systems/multiple-8ff7f37913ad736a.js"],"/consent":["static/chunks/pages/consent-e17c56eec8d91371.js"],"/consent/configure":[i,g,"static/chunks/pages/consent/configure-0e1ca0f4c8e7f4da.js"],"/consent/configure/add-vendors":[i,g,_,"static/chunks/pages/consent/configure/add-vendors-d00c9034cdeb0236.js"],"/consent/privacy-experience":[p,U,"static/chunks/pages/consent/privacy-experience-21f997c69fc3b4c2.js"],"/consent/privacy-experience/new":[s,d,f,m,w,"static/chunks/pages/consent/privacy-experience/new-e74cb5ea87f15b40.js"],"/consent/privacy-experience/[id]":[s,d,f,m,w,"static/chunks/pages/consent/privacy-experience/[id]-f22ddd9b48a5c418.js"],"/consent/privacy-notices":[U,"static/chunks/pages/consent/privacy-notices-ad105181bc91209b.js"],"/consent/privacy-notices/new":[s,d,f,m,q,"static/chunks/pages/consent/privacy-notices/new-a57d251c88ce68ae.js"],"/consent/privacy-notices/[id]":[s,d,f,m,q,"static/chunks/pages/consent/privacy-notices/[id]-da4124b7600a2a1d.js"],"/consent/properties":[N,"static/chunks/pages/consent/properties-057cad65e7414a44.js"],"/consent/reporting":["static/chunks/2150-930ffaf2c4718edc.js","static/chunks/pages/consent/reporting-b0c4235fe6d0b0c8.js"],"/data-catalog":[s,e,t,a,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-7770a8dc34bd0fc0.js"],"/data-catalog/[systemId]/projects":[s,e,t,a,k,n,"static/chunks/pages/data-catalog/[systemId]/projects-29784a11fe0fbd0a.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[A,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-80a6cc8e8573514a.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,e,t,a,k,S,n,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-aad6047a4604b945.js"],"/data-catalog/[systemId]/resources":[A,"static/chunks/pages/data-catalog/[systemId]/resources-6c3714ee97a718c1.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,e,t,a,k,S,n,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-b6b98cea25dd94fa.js"],"/data-discovery/action-center":[h,"static/chunks/pages/data-discovery/action-center-ee3c0a103346fc06.js"],"/data-discovery/action-center/[monitorId]":[s,e,t,h,B,y,"static/chunks/pages/data-discovery/action-center/[monitorId]-92b0bd97d8e79340.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,e,t,i,b,h,B,"static/css/23cf870196941c9a.css","static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-3e5725cd06d7fe6c.js"],"/data-discovery/activity":[r,"static/chunks/pages/data-discovery/activity-ad6a84a6276f914c.js"],"/data-discovery/detection":[r,C,"static/chunks/pages/data-discovery/detection-2822a423a7ad0550.js"],"/data-discovery/detection/[resourceUrn]":[r,C,"static/chunks/pages/data-discovery/detection/[resourceUrn]-31e6c54794a9883e.js"],"/data-discovery/discovery":[s,e,t,a,r,z,n,"static/chunks/pages/data-discovery/discovery-56eb4c014f0d96a3.js"],"/data-discovery/discovery/[resourceUrn]":[s,e,t,a,r,z,n,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-f98dd251babb7e28.js"],"/datamap":[t,"static/chunks/255-1bc0cbef7a59cdc6.js",u,D,"static/chunks/pages/datamap-d23b3ae139f0428b.js"],"/dataset":[o,j,"static/chunks/pages/dataset-f3348d0a92543bab.js"],"/dataset/new":[o,j,"static/chunks/pages/dataset/new-0d50084fbdf9b84c.js"],"/dataset/[datasetId]":["static/chunks/9729-fcf6ff4e3534e4a8.js",l,"static/chunks/pages/dataset/[datasetId]-a8e8b5f4ee7af86c.js"],"/dataset/[datasetId]/[collectionName]":[s,e,t,c,a,l,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]-0fa72873e464f581.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,e,t,c,a,l,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-15301bd6bf7cf718.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-3bd77864da523d41.js"],"/datastore-connection/new":[s,c,o,p,E,j,L,"static/chunks/pages/datastore-connection/new-c6614583b14dc9f2.js"],"/datastore-connection/[id]":[s,c,o,E,j,L,"static/chunks/pages/datastore-connection/[id]-7d6027570d05c57f.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",s,e,t,c,o,"static/chunks/5619-9b50cec521203989.js",M,"static/css/ab65b8cc3144bfc8.css","static/chunks/5596-4378b2927dae65b2.js","static/chunks/pages/fides-js-docs-1f4335dca5c09860.js"],"/integrations":[s,e,t,c,d,T,P,n,"static/chunks/pages/integrations-7f15cd8538cdc24d.js"],"/integrations/[id]":[s,e,t,c,d,T,P,n,"static/chunks/pages/integrations/[id]-330475705adbd36f.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,e,"static/chunks/346-aa3b88efb85f2e28.js","static/chunks/pages/messaging-1bae386d8c190348.js"],"/messaging/add-template":[G,"static/chunks/pages/messaging/add-template-feca66ad5c5fe54a.js"],"/messaging/[id]":[G,"static/chunks/pages/messaging/[id]-5627d0d0668077f9.js"],"/poc/ant-components":["static/chunks/pages/poc/ant-components-64a322d01aae5ca7.js"],"/poc/form-experiments/AntForm":["static/chunks/pages/poc/form-experiments/AntForm-8bca16a7726e7eb2.js"],"/poc/form-experiments/FormikAntFormItem":["static/chunks/pages/poc/form-experiments/FormikAntFormItem-b0f246fc3b67ebf7.js"],"/poc/form-experiments/FormikControlled":["static/chunks/pages/poc/form-experiments/FormikControlled-1a0852b090bfc392.js"],"/poc/form-experiments/FormikField":["static/chunks/pages/poc/form-experiments/FormikField-11f3de1b45e36583.js"],"/poc/form-experiments/FormikSpreadField":[H,"static/chunks/pages/poc/form-experiments/FormikSpreadField-af097d661f6abcf4.js"],"/poc/forms":[H,"static/chunks/pages/poc/forms-1b73a1c2b6c6285f.js"],"/poc/table-migration":[i,g,"static/chunks/pages/poc/table-migration-05616e2ae20ff4f8.js"],"/privacy-requests":[s,"static/chunks/3550-d04125c828d591a1.js",J,"static/chunks/pages/privacy-requests-96a08c4431b5462c.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-e551a860ec727802.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-f1d818242d8550f8.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-d40a26bddb126c5c.js"],"/privacy-requests/[id]":[J,"static/css/8bc1833f1fa53ff0.css","static/chunks/pages/privacy-requests/[id]-79f1576b1126975c.js"],"/properties":[N,"static/chunks/pages/properties-e959378bb32b6b73.js"],"/properties/add-property":[K,"static/chunks/pages/properties/add-property-0bdbc1fcbf553b8f.js"],"/properties/[id]":[K,"static/chunks/pages/properties/[id]-dd99183f93763ae4.js"],"/reporting/datamap":[s,e,t,M,u,D,"static/chunks/pages/reporting/datamap-9d1840f8309b706e.js"],"/settings/about":["static/chunks/pages/settings/about-37ba24a72a06862e.js"],"/settings/about/alpha":["static/chunks/pages/settings/about/alpha-1066f0c202ef744c.js"],"/settings/consent":["static/chunks/pages/settings/consent-f61b87e79367865b.js"],"/settings/consent/[configuration_id]/[purpose_id]":["static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e891d01ece59669e.js"],"/settings/custom-fields":["static/chunks/pages/settings/custom-fields-f8eea5d508c60c64.js"],"/settings/domain-records":["static/chunks/pages/settings/domain-records-51333dbd21cb37c8.js"],"/settings/domains":["static/chunks/pages/settings/domains-bde86e5f6c09da5a.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-4f9a5cc8bea7725b.js"],"/settings/locations":[O,y,"static/chunks/pages/settings/locations-ed6a140b362c5baa.js"],"/settings/organization":["static/chunks/pages/settings/organization-ff9a34264d48c35f.js"],"/settings/regulations":[O,y,"static/chunks/pages/settings/regulations-102efd9199e87124.js"],"/systems":["static/chunks/pages/systems-c05b49ddec1a1b4f.js"],"/systems/configure/[id]":[s,e,t,c,p,a,i,u,b,F,x,"static/chunks/pages/systems/configure/[id]-c8f5fbaa83dd9945.js"],"/systems/configure/[id]/test-datasets":[o,"static/chunks/pages/systems/configure/[id]/test-datasets-a4b6d41ca679298b.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",s,e,d,"static/chunks/6148-59a59d5c5925344f.js","static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-df0d88716578e295.js"],"/user-management":[v,"static/chunks/pages/user-management-e98dfc7d4f2a4e16.js"],"/user-management/new":[v,Q,"static/chunks/pages/user-management/new-de8cb3739ab99c09.js"],"/user-management/profile/[id]":[v,Q,"static/chunks/pages/user-management/profile/[id]-da68efc31998dc66.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/poc/ant-components","/poc/form-experiments/AntForm","/poc/form-experiments/FormikAntFormItem","/poc/form-experiments/FormikControlled","/poc/form-experiments/FormikField","/poc/form-experiments/FormikSpreadField","/poc/forms","/poc/table-migration","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/about/alpha","/settings/consent","/settings/consent/[configuration_id]/[purpose_id]","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/8765-f622a35b40a7ec63.js","static/chunks/9278-08cc704317fe535e.js","static/chunks/5163-e682273cd76a7d07.js","static/chunks/409-ea70638a59296659.js","static/chunks/699-8ca44b0de9fa20f0.js","static/css/d2d4e9a6923e6730.css","static/chunks/401-3cc1fee61494e3bd.js","static/chunks/3662-f6a1ddca5ee42076.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/431-1db919f6569a4021.js","static/chunks/5277-e8a036319456127f.js","static/chunks/9951-7c6639e5d062779e.js","static/chunks/3923-13a6b4da2d51bf8f.js","static/chunks/6419-d0c00d661b01f8fa.js","static/chunks/6084-ddbad3149364725d.js","static/chunks/5574-9312f97b637d9ee2.js","static/chunks/6780-b42a27e72707936d.js","static/chunks/6882-59ea739e3616ce83.js","static/chunks/7725-539d3a906f627531.js","static/css/10994e916bc9a00a.css","static/chunks/9226-2dcac54ab3fb94be.js","static/chunks/7476-cc0d9a94ed7aad53.js","static/css/972dc7eef106ee7c.css","static/chunks/3450-69f4e16978971bb8.js","static/css/304c6f148886a8d4.css","static/chunks/796-3bdda2a7868464af.js","static/chunks/6853-d0190d2cca9dbde2.js","static/chunks/1817-b78b58ae3b75d75a.js","static/chunks/6954-ba98e778a5b45ebf.js","static/chunks/79-2aab56be75e16187.js","static/chunks/3872-0a0f0032ca39a93f.js","static/chunks/3855-509ca7ac99b5eada.js","static/chunks/8735-40caf91800a3610c.js","static/chunks/5309-d9a488457898263b.js","static/chunks/9046-7085a401297c5520.js","static/chunks/4230-114e31621c19ea69.js","static/chunks/1467-8808ec8836e033f9.js","static/chunks/4608-f16f281f2d05d963.js","static/chunks/9187-7438242f0d380bb0.js","static/chunks/1316-2606e19807c08aa5.js","static/chunks/6662-ef0edd3598b1d431.js","static/chunks/7630-b1c93688013ef013.js","static/chunks/2921-86f1547ac40a5cdf.js","static/chunks/203-cd78ea279cecba60.js","static/chunks/787-c57185ad89c4e288.js","static/chunks/9826-3c578665c6d3b21d.js","static/chunks/4121-877e19d3fa078c7b.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
1
+ self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,p,u,g,f,m,j,b,k,h,y,l,v,I,F,x,_,U,w,q,N,A,S,B,C,z,D,E,L,M,T,P,G,H,J,K,O,Q){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[I,"static/chunks/pages/index-fbf9b845bb901238.js"],"/404":["static/chunks/pages/404-2d803dab6a00f353.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[I,"static/chunks/pages/add-systems-0902f0bb4080643e.js"],"/add-systems/manual":[s,e,t,c,p,a,i,u,b,F,x,"static/chunks/pages/add-systems/manual-2a655ff3a97f2492.js"],"/add-systems/multiple":[i,g,_,"static/chunks/pages/add-systems/multiple-8ff7f37913ad736a.js"],"/consent":["static/chunks/pages/consent-e17c56eec8d91371.js"],"/consent/configure":[i,g,"static/chunks/pages/consent/configure-0e1ca0f4c8e7f4da.js"],"/consent/configure/add-vendors":[i,g,_,"static/chunks/pages/consent/configure/add-vendors-d00c9034cdeb0236.js"],"/consent/privacy-experience":[p,U,"static/chunks/pages/consent/privacy-experience-21f997c69fc3b4c2.js"],"/consent/privacy-experience/new":[s,d,f,m,w,"static/chunks/pages/consent/privacy-experience/new-e74cb5ea87f15b40.js"],"/consent/privacy-experience/[id]":[s,d,f,m,w,"static/chunks/pages/consent/privacy-experience/[id]-f22ddd9b48a5c418.js"],"/consent/privacy-notices":[U,"static/chunks/pages/consent/privacy-notices-ad105181bc91209b.js"],"/consent/privacy-notices/new":[s,d,f,m,q,"static/chunks/pages/consent/privacy-notices/new-a57d251c88ce68ae.js"],"/consent/privacy-notices/[id]":[s,d,f,m,q,"static/chunks/pages/consent/privacy-notices/[id]-da4124b7600a2a1d.js"],"/consent/properties":[N,"static/chunks/pages/consent/properties-057cad65e7414a44.js"],"/consent/reporting":["static/chunks/2150-930ffaf2c4718edc.js","static/chunks/pages/consent/reporting-b0c4235fe6d0b0c8.js"],"/data-catalog":[s,e,t,a,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-7770a8dc34bd0fc0.js"],"/data-catalog/[systemId]/projects":[s,e,t,a,k,n,"static/chunks/pages/data-catalog/[systemId]/projects-29784a11fe0fbd0a.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[A,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-80a6cc8e8573514a.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,e,t,a,k,S,n,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-aad6047a4604b945.js"],"/data-catalog/[systemId]/resources":[A,"static/chunks/pages/data-catalog/[systemId]/resources-6c3714ee97a718c1.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,e,t,a,k,S,n,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-b6b98cea25dd94fa.js"],"/data-discovery/action-center":[h,"static/chunks/pages/data-discovery/action-center-ee3c0a103346fc06.js"],"/data-discovery/action-center/[monitorId]":[s,e,t,h,B,y,"static/chunks/pages/data-discovery/action-center/[monitorId]-92b0bd97d8e79340.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,e,t,i,b,h,B,"static/css/23cf870196941c9a.css","static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-3e5725cd06d7fe6c.js"],"/data-discovery/activity":[r,"static/chunks/pages/data-discovery/activity-ad6a84a6276f914c.js"],"/data-discovery/detection":[r,C,"static/chunks/pages/data-discovery/detection-2822a423a7ad0550.js"],"/data-discovery/detection/[resourceUrn]":[r,C,"static/chunks/pages/data-discovery/detection/[resourceUrn]-31e6c54794a9883e.js"],"/data-discovery/discovery":[s,e,t,a,r,z,n,"static/chunks/pages/data-discovery/discovery-56eb4c014f0d96a3.js"],"/data-discovery/discovery/[resourceUrn]":[s,e,t,a,r,z,n,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-f98dd251babb7e28.js"],"/datamap":[t,"static/chunks/255-1bc0cbef7a59cdc6.js",u,D,"static/chunks/pages/datamap-d23b3ae139f0428b.js"],"/dataset":[o,j,"static/chunks/pages/dataset-f3348d0a92543bab.js"],"/dataset/new":[o,j,"static/chunks/pages/dataset/new-0d50084fbdf9b84c.js"],"/dataset/[datasetId]":["static/chunks/9729-fcf6ff4e3534e4a8.js",l,"static/chunks/pages/dataset/[datasetId]-a8e8b5f4ee7af86c.js"],"/dataset/[datasetId]/[collectionName]":[s,e,t,c,a,l,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]-0fa72873e464f581.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,e,t,c,a,l,n,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-15301bd6bf7cf718.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-3bd77864da523d41.js"],"/datastore-connection/new":[s,c,o,p,E,j,L,"static/chunks/pages/datastore-connection/new-c6614583b14dc9f2.js"],"/datastore-connection/[id]":[s,c,o,E,j,L,"static/chunks/pages/datastore-connection/[id]-7d6027570d05c57f.js"],"/fides-js-docs":["static/chunks/2fbcc6de-a6c61724c327e9fa.js","static/chunks/e3251fe7-5777b5d778e6fffa.js",s,e,t,c,o,"static/chunks/5619-9b50cec521203989.js",M,"static/css/ab65b8cc3144bfc8.css","static/chunks/5596-4378b2927dae65b2.js","static/chunks/pages/fides-js-docs-1f4335dca5c09860.js"],"/integrations":[s,e,t,c,d,T,P,n,"static/chunks/pages/integrations-7f15cd8538cdc24d.js"],"/integrations/[id]":[s,e,t,c,d,T,P,n,"static/chunks/pages/integrations/[id]-e0a755c69081fffa.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,e,"static/chunks/346-aa3b88efb85f2e28.js","static/chunks/pages/messaging-1bae386d8c190348.js"],"/messaging/add-template":[G,"static/chunks/pages/messaging/add-template-feca66ad5c5fe54a.js"],"/messaging/[id]":[G,"static/chunks/pages/messaging/[id]-5627d0d0668077f9.js"],"/poc/ant-components":["static/chunks/pages/poc/ant-components-64a322d01aae5ca7.js"],"/poc/form-experiments/AntForm":["static/chunks/pages/poc/form-experiments/AntForm-8bca16a7726e7eb2.js"],"/poc/form-experiments/FormikAntFormItem":["static/chunks/pages/poc/form-experiments/FormikAntFormItem-b0f246fc3b67ebf7.js"],"/poc/form-experiments/FormikControlled":["static/chunks/pages/poc/form-experiments/FormikControlled-1a0852b090bfc392.js"],"/poc/form-experiments/FormikField":["static/chunks/pages/poc/form-experiments/FormikField-11f3de1b45e36583.js"],"/poc/form-experiments/FormikSpreadField":[H,"static/chunks/pages/poc/form-experiments/FormikSpreadField-af097d661f6abcf4.js"],"/poc/forms":[H,"static/chunks/pages/poc/forms-1b73a1c2b6c6285f.js"],"/poc/table-migration":[i,g,"static/chunks/pages/poc/table-migration-05616e2ae20ff4f8.js"],"/privacy-requests":[s,"static/chunks/3550-d04125c828d591a1.js",J,"static/chunks/pages/privacy-requests-96a08c4431b5462c.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-e551a860ec727802.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-f1d818242d8550f8.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-d40a26bddb126c5c.js"],"/privacy-requests/[id]":[J,"static/css/8bc1833f1fa53ff0.css","static/chunks/pages/privacy-requests/[id]-79f1576b1126975c.js"],"/properties":[N,"static/chunks/pages/properties-e959378bb32b6b73.js"],"/properties/add-property":[K,"static/chunks/pages/properties/add-property-0bdbc1fcbf553b8f.js"],"/properties/[id]":[K,"static/chunks/pages/properties/[id]-dd99183f93763ae4.js"],"/reporting/datamap":[s,e,t,M,u,D,"static/chunks/pages/reporting/datamap-9d1840f8309b706e.js"],"/settings/about":["static/chunks/pages/settings/about-37ba24a72a06862e.js"],"/settings/about/alpha":["static/chunks/pages/settings/about/alpha-1066f0c202ef744c.js"],"/settings/consent":["static/chunks/pages/settings/consent-f61b87e79367865b.js"],"/settings/consent/[configuration_id]/[purpose_id]":["static/chunks/pages/settings/consent/[configuration_id]/[purpose_id]-e891d01ece59669e.js"],"/settings/custom-fields":["static/chunks/pages/settings/custom-fields-f8eea5d508c60c64.js"],"/settings/domain-records":["static/chunks/pages/settings/domain-records-51333dbd21cb37c8.js"],"/settings/domains":["static/chunks/pages/settings/domains-bde86e5f6c09da5a.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-4f9a5cc8bea7725b.js"],"/settings/locations":[O,y,"static/chunks/pages/settings/locations-ed6a140b362c5baa.js"],"/settings/organization":["static/chunks/pages/settings/organization-ff9a34264d48c35f.js"],"/settings/regulations":[O,y,"static/chunks/pages/settings/regulations-102efd9199e87124.js"],"/systems":["static/chunks/pages/systems-c05b49ddec1a1b4f.js"],"/systems/configure/[id]":[s,e,t,c,p,a,i,u,b,F,x,"static/chunks/pages/systems/configure/[id]-c8f5fbaa83dd9945.js"],"/systems/configure/[id]/test-datasets":[o,"static/chunks/pages/systems/configure/[id]/test-datasets-a4b6d41ca679298b.js"],"/taxonomy":["static/chunks/678d4732-50255cc09048e643.js",s,e,d,"static/chunks/6148-59a59d5c5925344f.js","static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-df0d88716578e295.js"],"/user-management":[v,"static/chunks/pages/user-management-e98dfc7d4f2a4e16.js"],"/user-management/new":[v,Q,"static/chunks/pages/user-management/new-de8cb3739ab99c09.js"],"/user-management/profile/[id]":[v,Q,"static/chunks/pages/user-management/profile/[id]-da68efc31998dc66.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/fides-js-docs","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/poc/ant-components","/poc/form-experiments/AntForm","/poc/form-experiments/FormikAntFormItem","/poc/form-experiments/FormikControlled","/poc/form-experiments/FormikField","/poc/form-experiments/FormikSpreadField","/poc/forms","/poc/table-migration","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/about/alpha","/settings/consent","/settings/consent/[configuration_id]/[purpose_id]","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/8765-f622a35b40a7ec63.js","static/chunks/9278-08cc704317fe535e.js","static/chunks/5163-e682273cd76a7d07.js","static/chunks/409-ea70638a59296659.js","static/chunks/699-8ca44b0de9fa20f0.js","static/css/d2d4e9a6923e6730.css","static/chunks/401-3cc1fee61494e3bd.js","static/chunks/3662-f6a1ddca5ee42076.js","static/chunks/6527-0eed08abe252a918.js","static/chunks/431-1db919f6569a4021.js","static/chunks/5277-e8a036319456127f.js","static/chunks/9951-7c6639e5d062779e.js","static/chunks/3923-13a6b4da2d51bf8f.js","static/chunks/6419-d0c00d661b01f8fa.js","static/chunks/6084-ddbad3149364725d.js","static/chunks/5574-9312f97b637d9ee2.js","static/chunks/6780-b42a27e72707936d.js","static/chunks/6882-59ea739e3616ce83.js","static/chunks/7725-539d3a906f627531.js","static/css/10994e916bc9a00a.css","static/chunks/9226-2dcac54ab3fb94be.js","static/chunks/7476-cc0d9a94ed7aad53.js","static/css/972dc7eef106ee7c.css","static/chunks/3450-69f4e16978971bb8.js","static/css/304c6f148886a8d4.css","static/chunks/796-3bdda2a7868464af.js","static/chunks/6853-d0190d2cca9dbde2.js","static/chunks/1817-b78b58ae3b75d75a.js","static/chunks/6954-ba98e778a5b45ebf.js","static/chunks/79-2aab56be75e16187.js","static/chunks/3872-0a0f0032ca39a93f.js","static/chunks/3855-509ca7ac99b5eada.js","static/chunks/8735-40caf91800a3610c.js","static/chunks/5309-d9a488457898263b.js","static/chunks/9046-7085a401297c5520.js","static/chunks/4230-114e31621c19ea69.js","static/chunks/1467-8808ec8836e033f9.js","static/chunks/4608-f16f281f2d05d963.js","static/chunks/9187-7438242f0d380bb0.js","static/chunks/1316-2606e19807c08aa5.js","static/chunks/6662-ef0edd3598b1d431.js","static/chunks/7630-b1c93688013ef013.js","static/chunks/2921-86f1547ac40a5cdf.js","static/chunks/203-cd78ea279cecba60.js","static/chunks/787-c57185ad89c4e288.js","static/chunks/9826-3c578665c6d3b21d.js","static/chunks/4121-877e19d3fa078c7b.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();