ethyca-fides 2.66.0rc0__py2.py3-none-any.whl → 2.66.1b0__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 (216) hide show
  1. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/RECORD +207 -200
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/d0031087eacb_create_manualtaskconditionaldependency_.py +106 -0
  5. fides/api/db/base.py +1 -0
  6. fides/api/models/manual_task/__init__.py +2 -0
  7. fides/api/models/manual_task/conditional_dependency.py +144 -0
  8. fides/api/models/{manual_task.py → manual_task/manual_task.py} +10 -0
  9. fides/api/task/conditional_dependencies/__init__.py +0 -0
  10. fides/api/task/conditional_dependencies/evaluator.py +109 -0
  11. fides/api/task/conditional_dependencies/schemas.py +54 -0
  12. fides/ui-build/static/admin/404.html +1 -1
  13. fides/ui-build/static/admin/_next/static/chunks/3450-24041e1b2a846739.js +1 -0
  14. fides/ui-build/static/admin/_next/static/chunks/{3923-8d3bc8c052a41e83.js → 3923-13a6b4da2d51bf8f.js} +1 -1
  15. fides/ui-build/static/admin/_next/static/chunks/{4230-b214ba26fa901c4c.js → 4230-840c287045c88b34.js} +1 -1
  16. fides/ui-build/static/admin/_next/static/chunks/431-0e77abba7e220e31.js +1 -0
  17. fides/ui-build/static/admin/_next/static/chunks/6780-4b687168dd8daa84.js +1 -0
  18. fides/ui-build/static/admin/_next/static/chunks/8237-55049f8f5fd5e058.js +1 -0
  19. fides/ui-build/static/admin/_next/static/chunks/pages/{_app-8b3c5d3146ed7692.js → _app-f66151e613766714.js} +56 -56
  20. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-031d7589a07fde30.js +1 -0
  21. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-efcbfd52186591bc.js +1 -0
  22. fides/ui-build/static/admin/_next/static/chunks/pages/{integrations-e2d5d7e2a5265e68.js → integrations-0f91eae539d47163.js} +1 -1
  23. fides/ui-build/static/admin/_next/static/chunks/pages/poc/{table-migration-69ad86b7a8a9a115.js → table-migration-8bfde56c86128ec3.js} +1 -1
  24. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-444ec9b3fec6e428.js +1 -0
  25. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-7eb7d26fa4b5cf17.js +1 -0
  26. fides/ui-build/static/admin/_next/static/css/{5bfb2473e5701527.css → 23cf870196941c9a.css} +1 -1
  27. fides/ui-build/static/admin/_next/static/css/b81194f2c3930152.css +1 -0
  28. fides/ui-build/static/admin/_next/static/jeMhTiDcCKPk_H4S0nSQq/_buildManifest.js +1 -0
  29. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  30. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  31. fides/ui-build/static/admin/add-systems.html +1 -1
  32. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  33. fides/ui-build/static/admin/consent/configure.html +1 -1
  34. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  35. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  36. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  37. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  38. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  39. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  40. fides/ui-build/static/admin/consent/properties.html +1 -1
  41. fides/ui-build/static/admin/consent/reporting.html +1 -1
  42. fides/ui-build/static/admin/consent.html +1 -1
  43. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  44. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  45. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  46. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  47. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  48. fides/ui-build/static/admin/data-catalog.html +1 -1
  49. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  50. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  51. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  52. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  53. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  54. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  55. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  56. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  57. fides/ui-build/static/admin/datamap.html +1 -1
  58. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  59. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  60. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  61. fides/ui-build/static/admin/dataset/new.html +1 -1
  62. fides/ui-build/static/admin/dataset.html +1 -1
  63. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  64. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  65. fides/ui-build/static/admin/datastore-connection.html +1 -1
  66. fides/ui-build/static/admin/index.html +1 -1
  67. fides/ui-build/static/admin/integrations/[id].html +1 -1
  68. fides/ui-build/static/admin/integrations.html +1 -1
  69. fides/ui-build/static/admin/lib/fides-ext-gpp.js +1 -1
  70. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  71. fides/ui-build/static/admin/lib/fides-preview.js +1 -1
  72. fides/ui-build/static/admin/lib/fides-tcf.js +2 -2
  73. fides/ui-build/static/admin/lib/fides.js +2 -2
  74. fides/ui-build/static/admin/login/[provider].html +1 -1
  75. fides/ui-build/static/admin/login.html +1 -1
  76. fides/ui-build/static/admin/messaging/[id].html +1 -1
  77. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  78. fides/ui-build/static/admin/messaging.html +1 -1
  79. fides/ui-build/static/admin/poc/ant-components.html +1 -1
  80. fides/ui-build/static/admin/poc/form-experiments/AntForm.html +1 -1
  81. fides/ui-build/static/admin/poc/form-experiments/FormikAntFormItem.html +1 -1
  82. fides/ui-build/static/admin/poc/form-experiments/FormikControlled.html +1 -1
  83. fides/ui-build/static/admin/poc/form-experiments/FormikField.html +1 -1
  84. fides/ui-build/static/admin/poc/form-experiments/FormikSpreadField.html +1 -1
  85. fides/ui-build/static/admin/poc/forms.html +1 -1
  86. fides/ui-build/static/admin/poc/table-migration.html +1 -1
  87. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  88. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  89. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  90. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  91. fides/ui-build/static/admin/privacy-requests.html +1 -1
  92. fides/ui-build/static/admin/properties/[id].html +1 -1
  93. fides/ui-build/static/admin/properties/add-property.html +1 -1
  94. fides/ui-build/static/admin/properties.html +1 -1
  95. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  96. fides/ui-build/static/admin/settings/about/alpha.html +1 -1
  97. fides/ui-build/static/admin/settings/about.html +1 -1
  98. fides/ui-build/static/admin/settings/consent/[configuration_id]/[purpose_id].html +1 -1
  99. fides/ui-build/static/admin/settings/consent.html +1 -1
  100. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  101. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  102. fides/ui-build/static/admin/settings/domains.html +1 -1
  103. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  104. fides/ui-build/static/admin/settings/locations.html +1 -1
  105. fides/ui-build/static/admin/settings/organization.html +1 -1
  106. fides/ui-build/static/admin/settings/regulations.html +1 -1
  107. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  108. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  109. fides/ui-build/static/admin/systems.html +1 -1
  110. fides/ui-build/static/admin/taxonomy.html +1 -1
  111. fides/ui-build/static/admin/user-management/new.html +1 -1
  112. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  113. fides/ui-build/static/admin/user-management.html +1 -1
  114. fides/ui-build/static/admin/_next/static/chunks/3450-f3de4256f728cb13.js +0 -1
  115. fides/ui-build/static/admin/_next/static/chunks/431-34f0b91c26f8d9ab.js +0 -1
  116. fides/ui-build/static/admin/_next/static/chunks/6780-5bd185892f6af46e.js +0 -1
  117. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-2265ecb899d45fbc.js +0 -1
  118. fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/action-center/[monitorId]-8ab33a1e0272df1f.js +0 -1
  119. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/[id]-32600543eb7b584f.js +0 -1
  120. fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests-cbe4c8f9096b6543.js +0 -1
  121. fides/ui-build/static/admin/_next/static/css/2cadb5f62dcd7c2b.css +0 -1
  122. fides/ui-build/static/admin/_next/static/wBqdsil8VpFrsdFaO2xpv/_buildManifest.js +0 -1
  123. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/WHEEL +0 -0
  124. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/entry_points.txt +0 -0
  125. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/licenses/LICENSE +0 -0
  126. {ethyca_fides-2.66.0rc0.dist-info → ethyca_fides-2.66.1b0.dist-info}/top_level.txt +0 -0
  127. /fides/ui-build/static/admin/_next/static/chunks/{1817-e601e737e3cc7a0e.js → 1817-10f6ab6da28df4d2.js} +0 -0
  128. /fides/ui-build/static/admin/_next/static/chunks/{203-5a663f465ba26bb4.js → 203-d9fe5384a6e94799.js} +0 -0
  129. /fides/ui-build/static/admin/_next/static/chunks/{2921-455e6357b74d2f76.js → 2921-86f1547ac40a5cdf.js} +0 -0
  130. /fides/ui-build/static/admin/_next/static/chunks/{3855-e172870d3e21b0dd.js → 3855-e2fa6db53d32c3de.js} +0 -0
  131. /fides/ui-build/static/admin/_next/static/chunks/{3872-46cebf7ec1b31a2b.js → 3872-b97dd7695d6532bc.js} +0 -0
  132. /fides/ui-build/static/admin/_next/static/chunks/{401-1b529d5800aa1f3a.js → 401-3cc1fee61494e3bd.js} +0 -0
  133. /fides/ui-build/static/admin/_next/static/chunks/{409-a257e14acebcd73b.js → 409-45a125437261580c.js} +0 -0
  134. /fides/ui-build/static/admin/_next/static/chunks/{4121-2bc09fc4ddbfe5cb.js → 4121-c4747258599705d0.js} +0 -0
  135. /fides/ui-build/static/admin/_next/static/chunks/{4608-bbb7bf511a05c3c2.js → 4608-b2d8a76e3a680db4.js} +0 -0
  136. /fides/ui-build/static/admin/_next/static/chunks/{5309-d73339f062763fed.js → 5309-67bdf9001531e972.js} +0 -0
  137. /fides/ui-build/static/admin/_next/static/chunks/{5574-b13021775a15bfd2.js → 5574-0b7c88e3f81b08fb.js} +0 -0
  138. /fides/ui-build/static/admin/_next/static/chunks/{6084-7178ff6ea6822475.js → 6084-7bc3756bd23c3a4c.js} +0 -0
  139. /fides/ui-build/static/admin/_next/static/chunks/{6662-507be5d46e5b719b.js → 6662-8c43dd2b75e0264c.js} +0 -0
  140. /fides/ui-build/static/admin/_next/static/chunks/{6853-2ad3e08fe6f9f5f2.js → 6853-4f8bf6558f8c6a46.js} +0 -0
  141. /fides/ui-build/static/admin/_next/static/chunks/{6882-6af16fef26c21e06.js → 6882-0fa957731918160e.js} +0 -0
  142. /fides/ui-build/static/admin/_next/static/chunks/{6954-bb875d9ac89f6030.js → 6954-d30c6dff440d46b0.js} +0 -0
  143. /fides/ui-build/static/admin/_next/static/chunks/{7476-281ee9a8286556f3.js → 7476-2d2c80dfe64c0f90.js} +0 -0
  144. /fides/ui-build/static/admin/_next/static/chunks/{7630-9aac73191ed5ed13.js → 7630-06f4207597225cbb.js} +0 -0
  145. /fides/ui-build/static/admin/_next/static/chunks/{787-fb41002f797eb2df.js → 787-32ca132be974eaf9.js} +0 -0
  146. /fides/ui-build/static/admin/_next/static/chunks/{79-7e87aff851423d4a.js → 79-056290dba15480c2.js} +0 -0
  147. /fides/ui-build/static/admin/_next/static/chunks/{796-329a5f823ec258a5.js → 796-00487f9036709b7b.js} +0 -0
  148. /fides/ui-build/static/admin/_next/static/chunks/{9046-ce9567c9074563e2.js → 9046-54877976a0529de2.js} +0 -0
  149. /fides/ui-build/static/admin/_next/static/chunks/{9226-746771d47dff6266.js → 9226-081cb18771536d64.js} +0 -0
  150. /fides/ui-build/static/admin/_next/static/chunks/{9826-111aaee8bd8dbd09.js → 9826-e77d5e5b8458fe77.js} +0 -0
  151. /fides/ui-build/static/admin/_next/static/chunks/{9951-9b753ad7c3f51bdf.js → 9951-595d0f1588215081.js} +0 -0
  152. /fides/ui-build/static/admin/_next/static/chunks/pages/{404-aece2c920ea14514.js → 404-2d803dab6a00f353.js} +0 -0
  153. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{manual-98777246bec9dc2a.js → manual-a539d34e7c9ab0ee.js} +0 -0
  154. /fides/ui-build/static/admin/_next/static/chunks/pages/add-systems/{multiple-dc75dc6e37e52f05.js → multiple-fa0c254854fbf79c.js} +0 -0
  155. /fides/ui-build/static/admin/_next/static/chunks/pages/{add-systems-a71c0aff4e0e6535.js → add-systems-9c86d99f81d128ac.js} +0 -0
  156. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/configure/{add-vendors-24d226b5a8de5c74.js → add-vendors-3a77a92d2a94426a.js} +0 -0
  157. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{configure-6a8ef51138ac926a.js → configure-886518c906a28271.js} +0 -0
  158. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-1edf582ba3cd3bbb.js → [id]-fc3a011154a2e1de.js} +0 -0
  159. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-experience-685771e5f7196d87.js → privacy-experience-a333f503aa057e06.js} +0 -0
  160. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-6ccedc70dc447089.js → [id]-7a1c8073262ff0b4.js} +0 -0
  161. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-944bca1cc57985b5.js → new-39ef289b3c88ebd4.js} +0 -0
  162. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{privacy-notices-84f4bd14ce8673bc.js → privacy-notices-deeb59b8332261c1.js} +0 -0
  163. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{properties-6f86ab63a08a6528.js → properties-057cad65e7414a44.js} +0 -0
  164. /fides/ui-build/static/admin/_next/static/chunks/pages/consent/{reporting-afdbd4665657cfa1.js → reporting-8f891957c8944137.js} +0 -0
  165. /fides/ui-build/static/admin/_next/static/chunks/pages/{consent-73d3cbf68f7c3a31.js → consent-7507764f89f9d9c8.js} +0 -0
  166. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/projects/{[projectUrn]-6ba9e160dae64695.js → [projectUrn]-6020cd361c57b387.js} +0 -0
  167. /fides/ui-build/static/admin/_next/static/chunks/pages/data-catalog/[systemId]/{projects-32eac8bbd217615a.js → projects-2fc76749940a06fd.js} +0 -0
  168. /fides/ui-build/static/admin/_next/static/chunks/pages/{data-catalog-6f630d42ac9fb6b4.js → data-catalog-7d1c53686a9a5d73.js} +0 -0
  169. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{action-center-9ddb52ebb7ac4c71.js → action-center-94acf9cc27209714.js} +0 -0
  170. /fides/ui-build/static/admin/_next/static/chunks/pages/data-discovery/{activity-9aa744d56cdacb0d.js → activity-5af9381f02b2aff6.js} +0 -0
  171. /fides/ui-build/static/admin/_next/static/chunks/pages/{datamap-7674b97d655c193b.js → datamap-e48f4ef032791c1d.js} +0 -0
  172. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/[collectionName]/{[...subfieldNames]-c0d2bfd465df20e0.js → [...subfieldNames]-24f87303adb9428e.js} +0 -0
  173. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/[datasetId]/{[collectionName]-28280a8a39a6e37c.js → [collectionName]-41aa4e51bd73d13e.js} +0 -0
  174. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{[datasetId]-006b695e5af5ef24.js → [datasetId]-b296323ed0922fd5.js} +0 -0
  175. /fides/ui-build/static/admin/_next/static/chunks/pages/dataset/{new-82fb246d87e58ebd.js → new-cbb409d1bc89d10b.js} +0 -0
  176. /fides/ui-build/static/admin/_next/static/chunks/pages/{dataset-20165c31ab1bc7cf.js → dataset-07df9c4896721e9f.js} +0 -0
  177. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-b4a6bcc87d126840.js → [id]-0a60fe49678a3ece.js} +0 -0
  178. /fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-f95d7b0bbfc58f5a.js → new-c903ab62611245d8.js} +0 -0
  179. /fides/ui-build/static/admin/_next/static/chunks/pages/{datastore-connection-c391c6fad56eec48.js → datastore-connection-33b01e2ab2d5ce7e.js} +0 -0
  180. /fides/ui-build/static/admin/_next/static/chunks/pages/{index-1919aab9e5834b51.js → index-ca1c9d4de5abec7a.js} +0 -0
  181. /fides/ui-build/static/admin/_next/static/chunks/pages/integrations/{[id]-eacabe4a80cb8813.js → [id]-2f9efedecc4b9273.js} +0 -0
  182. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{[id]-53fecfb9dd6a1e0c.js → [id]-8b20a058d18181b9.js} +0 -0
  183. /fides/ui-build/static/admin/_next/static/chunks/pages/messaging/{add-template-76b01cec5fde10a9.js → add-template-c7054125338aee6c.js} +0 -0
  184. /fides/ui-build/static/admin/_next/static/chunks/pages/{messaging-5094ffea13f32ed9.js → messaging-a4fdfa9047bb5770.js} +0 -0
  185. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{ant-components-5c08e8447c45ce44.js → ant-components-64a322d01aae5ca7.js} +0 -0
  186. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{AntForm-06ad5f34585480aa.js → AntForm-8bca16a7726e7eb2.js} +0 -0
  187. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikAntFormItem-6f071c2bc9446cb0.js → FormikAntFormItem-b0f246fc3b67ebf7.js} +0 -0
  188. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikControlled-efcc38c58991ac9e.js → FormikControlled-1a0852b090bfc392.js} +0 -0
  189. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/form-experiments/{FormikField-430ba5c979abfb7c.js → FormikField-11f3de1b45e36583.js} +0 -0
  190. /fides/ui-build/static/admin/_next/static/chunks/pages/poc/{forms-5c561880bf131afb.js → forms-1b73a1c2b6c6285f.js} +0 -0
  191. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{messaging-10ce53ea356f8bad.js → messaging-08a6d60bb9230d5f.js} +0 -0
  192. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/configure/{storage-5501bbb129fee9c4.js → storage-29d47f1bdd08c45d.js} +0 -0
  193. /fides/ui-build/static/admin/_next/static/chunks/pages/privacy-requests/{configure-d888a69a3bbe040e.js → configure-2806f3458fe85897.js} +0 -0
  194. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{[id]-d3d8e3d7583ec635.js → [id]-568620fc7e239e7b.js} +0 -0
  195. /fides/ui-build/static/admin/_next/static/chunks/pages/properties/{add-property-1af10ed303815d46.js → add-property-394043fd823d69f5.js} +0 -0
  196. /fides/ui-build/static/admin/_next/static/chunks/pages/{properties-cebc0dc186be499a.js → properties-e959378bb32b6b73.js} +0 -0
  197. /fides/ui-build/static/admin/_next/static/chunks/pages/reporting/{datamap-e130c0197362e8f3.js → datamap-2a98bd257edd8f47.js} +0 -0
  198. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/about/{alpha-5e1322de868d615e.js → alpha-92d7f12a95a1adc5.js} +0 -0
  199. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{about-241f95e372b65d0f.js → about-70fb68b7519d5222.js} +0 -0
  200. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/consent/[configuration_id]/{[purpose_id]-fc201657f4a782c7.js → [purpose_id]-668d74c041d74650.js} +0 -0
  201. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{consent-c2d39cba8396ef3a.js → consent-7c8bda96813441c5.js} +0 -0
  202. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{custom-fields-d992103cc55901ae.js → custom-fields-b773691516488006.js} +0 -0
  203. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domain-records-41242f805599feda.js → domain-records-21f14d9141a5ad8a.js} +0 -0
  204. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{domains-2e885f74c92f669c.js → domains-3022368d5438dfb7.js} +0 -0
  205. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{email-templates-ff112655ad5f41e5.js → email-templates-89903d6f579b1aeb.js} +0 -0
  206. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{locations-023e1895552817de.js → locations-14621f32ad4f9120.js} +0 -0
  207. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{organization-ac403c0886b20e20.js → organization-5106ff9a9403ee92.js} +0 -0
  208. /fides/ui-build/static/admin/_next/static/chunks/pages/settings/{regulations-86062a18e081a52a.js → regulations-0927740524f79b02.js} +0 -0
  209. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/[id]/{test-datasets-7a3396ac819c7904.js → test-datasets-47284d49803f8b3b.js} +0 -0
  210. /fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-8314a819837f5b2a.js → [id]-7bc2d6b23d5bb71f.js} +0 -0
  211. /fides/ui-build/static/admin/_next/static/chunks/pages/{systems-21f423a7c417aa9d.js → systems-c3a536901d6b445d.js} +0 -0
  212. /fides/ui-build/static/admin/_next/static/chunks/pages/{taxonomy-6387fcc8cce872eb.js → taxonomy-ab4f4d260c01163b.js} +0 -0
  213. /fides/ui-build/static/admin/_next/static/chunks/pages/user-management/profile/{[id]-ff5738706da07801.js → [id]-79fe68f1eb3add49.js} +0 -0
  214. /fides/ui-build/static/admin/_next/static/chunks/pages/{user-management-173ac3a1ed2b05a6.js → user-management-6111bb65a2607dc5.js} +0 -0
  215. /fides/ui-build/static/admin/_next/static/chunks/{webpack-ff0cd6bff75588da.js → webpack-ff4c22c9f0840531.js} +0 -0
  216. /fides/ui-build/static/admin/_next/static/{wBqdsil8VpFrsdFaO2xpv → jeMhTiDcCKPk_H4S0nSQq}/_ssgManifest.js +0 -0
fides/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-07-16T16:21:03-0400",
11
+ "date": "2025-07-22T14:39:31-0600",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "9a09eee11a4859a3c1f487748be0224703c52bb6",
15
- "version": "2.66.0rc0"
14
+ "full-revisionid": "32734cca4a0241242f49aa52436361d77f7d63ea",
15
+ "version": "2.66.1b0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,106 @@
1
+ """create ManualTaskConditionalDependency table
2
+
3
+ Revision ID: d0031087eacb
4
+ Revises: 9e3dab26f75f
5
+ Create Date: 2025-07-17 21:28:20.937945
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+ from sqlalchemy.dialects import postgresql
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "d0031087eacb"
15
+ down_revision = "9e3dab26f75f"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade():
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+
23
+ op.create_table(
24
+ "manual_task_conditional_dependency",
25
+ sa.Column(
26
+ "created_at",
27
+ sa.DateTime(timezone=True),
28
+ server_default=sa.text("now()"),
29
+ nullable=True,
30
+ ),
31
+ sa.Column(
32
+ "updated_at",
33
+ sa.DateTime(timezone=True),
34
+ server_default=sa.text("now()"),
35
+ nullable=True,
36
+ ),
37
+ sa.Column("id", sa.String(length=255), nullable=False),
38
+ sa.Column("manual_task_id", sa.String(), nullable=False),
39
+ sa.Column("parent_id", sa.String(), nullable=True),
40
+ sa.Column(
41
+ "condition_type",
42
+ sa.String(), # Use String instead of Enum to avoid auto-creation
43
+ nullable=False,
44
+ ),
45
+ sa.Column("field_address", sa.String(), nullable=True),
46
+ sa.Column("operator", sa.String(), nullable=True),
47
+ sa.Column("value", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
48
+ sa.Column("logical_operator", sa.String(), nullable=True),
49
+ sa.Column("sort_order", sa.Integer(), nullable=False),
50
+ sa.ForeignKeyConstraint(
51
+ ["manual_task_id"], ["manual_task.id"], ondelete="CASCADE"
52
+ ),
53
+ sa.ForeignKeyConstraint(
54
+ ["parent_id"], ["manual_task_conditional_dependency.id"], ondelete="CASCADE"
55
+ ),
56
+ sa.PrimaryKeyConstraint("id"),
57
+ )
58
+
59
+ op.create_index(
60
+ "ix_manual_task_conditional_dependency_condition_type",
61
+ "manual_task_conditional_dependency",
62
+ ["condition_type"],
63
+ unique=False,
64
+ )
65
+ op.create_index(
66
+ "ix_manual_task_conditional_dependency_manual_task_id",
67
+ "manual_task_conditional_dependency",
68
+ ["manual_task_id"],
69
+ unique=False,
70
+ )
71
+ op.create_index(
72
+ "ix_manual_task_conditional_dependency_parent_id",
73
+ "manual_task_conditional_dependency",
74
+ ["parent_id"],
75
+ unique=False,
76
+ )
77
+ op.create_index(
78
+ "ix_manual_task_conditional_dependency_sort_order",
79
+ "manual_task_conditional_dependency",
80
+ ["sort_order"],
81
+ unique=False,
82
+ )
83
+ # ### end Alembic commands ###
84
+
85
+
86
+ def downgrade():
87
+ # ### commands auto generated by Alembic - please adjust! ###
88
+ op.drop_index(
89
+ "ix_manual_task_conditional_dependency_sort_order",
90
+ table_name="manual_task_conditional_dependency",
91
+ )
92
+ op.drop_index(
93
+ "ix_manual_task_conditional_dependency_parent_id",
94
+ table_name="manual_task_conditional_dependency",
95
+ )
96
+ op.drop_index(
97
+ "ix_manual_task_conditional_dependency_manual_task_id",
98
+ table_name="manual_task_conditional_dependency",
99
+ )
100
+ op.drop_index(
101
+ "ix_manual_task_conditional_dependency_condition_type",
102
+ table_name="manual_task_conditional_dependency",
103
+ )
104
+
105
+ op.drop_table("manual_task_conditional_dependency")
106
+ # ### end Alembic commands ###
fides/api/db/base.py CHANGED
@@ -33,6 +33,7 @@ from fides.api.models.identity_salt import IdentitySalt
33
33
  from fides.api.models.location_regulation_selections import LocationRegulationSelections
34
34
  from fides.api.models.manual_task import (
35
35
  ManualTask,
36
+ ManualTaskConditionalDependency,
36
37
  ManualTaskConfig,
37
38
  ManualTaskConfigField,
38
39
  ManualTaskInstance,
@@ -0,0 +1,2 @@
1
+ from .conditional_dependency import *
2
+ from .manual_task import *
@@ -0,0 +1,144 @@
1
+ from enum import Enum
2
+ from typing import TYPE_CHECKING, Optional, Union
3
+
4
+ from sqlalchemy import Column, ForeignKey, Index, Integer, String
5
+ from sqlalchemy.dialects.postgresql import JSONB
6
+ from sqlalchemy.ext.declarative import declared_attr
7
+ from sqlalchemy.orm import Session, relationship
8
+
9
+ from fides.api.db.base_class import Base, FidesBase
10
+ from fides.api.db.util import EnumColumn
11
+ from fides.api.task.conditional_dependencies.schemas import (
12
+ ConditionGroup,
13
+ ConditionLeaf,
14
+ )
15
+
16
+ if TYPE_CHECKING:
17
+ from fides.api.models.manual_task.manual_task import ManualTask
18
+
19
+
20
+ class ManualTaskConditionalDependencyType(str, Enum):
21
+ """Enum for manual task conditional dependency types.
22
+
23
+ This enum defines the two types of nodes in a conditional dependency tree:
24
+
25
+ - leaf: A terminal node that represents a single condition (e.g., "user.age >= 18")
26
+ - group: A non-terminal node that groups multiple conditions with logical operators (AND/OR)
27
+
28
+ Examples:
29
+ leaf: Used for simple field comparisons like:
30
+ - "user.name exists"
31
+ - "user.age >= 18"
32
+ - "billing.subscription.status == 'active'"
33
+
34
+ group: Used to combine multiple conditions with logical operators:
35
+ - AND group: "user.age >= 18 AND user.active == true"
36
+ - OR group: "user.role == 'admin' OR user.verified == true"
37
+ - Nested groups: "(user.age >= 18 AND (user.role == 'admin' OR user.verified == true))"
38
+ """
39
+
40
+ leaf = "leaf"
41
+ group = "group"
42
+
43
+
44
+ class ManualTaskConditionalDependency(Base):
45
+ """Model for storing conditional dependencies."""
46
+
47
+ @declared_attr
48
+ def __tablename__(cls) -> str:
49
+ """Overriding base class method to set the table name."""
50
+ return "manual_task_conditional_dependency"
51
+
52
+ # We need to redefine it here so that self-referential relationships
53
+ # can properly reference the `id` column instead of the built-in Python function.
54
+ id = Column(String(255), primary_key=True, default=FidesBase.generate_uuid)
55
+
56
+ # Foreign key relationships
57
+ manual_task_id = Column(
58
+ String, ForeignKey("manual_task.id", ondelete="CASCADE"), nullable=False
59
+ )
60
+ parent_id = Column(
61
+ String,
62
+ ForeignKey("manual_task_conditional_dependency.id", ondelete="CASCADE"),
63
+ nullable=True,
64
+ )
65
+
66
+ # Condition metadata
67
+ condition_type = Column(
68
+ EnumColumn(ManualTaskConditionalDependencyType), nullable=False
69
+ ) # leaf or group
70
+ field_address = Column(String, nullable=True) # For leaf conditions
71
+ operator = Column(String, nullable=True) # For leaf conditions
72
+ value = Column(JSONB, nullable=True) # For leaf conditions
73
+ logical_operator = Column(String, nullable=True) # 'and' or 'or' for groups
74
+
75
+ # Ordering
76
+ sort_order = Column(Integer, nullable=False, default=0)
77
+
78
+ __table_args__ = (
79
+ Index("ix_manual_task_conditional_dependency_manual_task_id", "manual_task_id"),
80
+ Index("ix_manual_task_conditional_dependency_parent_id", "parent_id"),
81
+ Index("ix_manual_task_conditional_dependency_condition_type", "condition_type"),
82
+ Index("ix_manual_task_conditional_dependency_sort_order", "sort_order"),
83
+ )
84
+
85
+ # Relationships
86
+ task = relationship("ManualTask", back_populates="conditional_dependencies")
87
+ parent = relationship(
88
+ "ManualTaskConditionalDependency",
89
+ remote_side=[id],
90
+ back_populates="children",
91
+ foreign_keys=[parent_id],
92
+ )
93
+ children = relationship(
94
+ "ManualTaskConditionalDependency",
95
+ back_populates="parent",
96
+ cascade="all, delete-orphan",
97
+ foreign_keys=[parent_id],
98
+ )
99
+
100
+ def to_condition_leaf(self) -> ConditionLeaf:
101
+ """Convert to ConditionLeaf if this is a leaf condition"""
102
+ if self.condition_type != "leaf":
103
+ raise ValueError("Cannot convert group condition to leaf")
104
+
105
+ return ConditionLeaf(
106
+ field_address=self.field_address, operator=self.operator, value=self.value
107
+ )
108
+
109
+ def to_condition_group(self) -> ConditionGroup:
110
+ """Convert to ConditionGroup if this is a group condition"""
111
+ if self.condition_type != "group":
112
+ raise ValueError("Cannot convert leaf condition to group")
113
+
114
+ # Recursively build children
115
+ child_conditions = []
116
+ children_list = [child for child in self.children] # type: ignore[attr-defined]
117
+ for child in sorted(children_list, key=lambda x: x.sort_order):
118
+ if child.condition_type == "leaf":
119
+ child_conditions.append(child.to_condition_leaf())
120
+ else:
121
+ child_conditions.append(child.to_condition_group())
122
+
123
+ return ConditionGroup(
124
+ logical_operator=self.logical_operator, conditions=child_conditions
125
+ )
126
+
127
+ @classmethod
128
+ def get_root_condition(
129
+ cls, db: Session, manual_task_id: str
130
+ ) -> Optional[Union[ConditionLeaf, ConditionGroup]]:
131
+ """Get the root condition for a config"""
132
+ root = (
133
+ db.query(cls)
134
+ .filter(cls.manual_task_id == manual_task_id, cls.parent_id.is_(None))
135
+ .first()
136
+ )
137
+
138
+ if not root:
139
+ return None
140
+
141
+ if root.condition_type == "leaf":
142
+ return root.to_condition_leaf()
143
+
144
+ return root.to_condition_group()
@@ -26,6 +26,9 @@ from fides.api.schemas.base_class import FidesSchema
26
26
  if TYPE_CHECKING:
27
27
  from fides.api.models.attachment import Attachment
28
28
  from fides.api.models.fides_user import FidesUser
29
+ from fides.api.models.manual_task.conditional_dependency import (
30
+ ManualTaskConditionalDependency,
31
+ )
29
32
 
30
33
  # ------------------------------------------------------------
31
34
  # Enums
@@ -242,6 +245,13 @@ class ManualTask(Base):
242
245
  viewonly=True, # No cascade delete - submissions are historical data
243
246
  )
244
247
 
248
+ conditional_dependencies = relationship(
249
+ "ManualTaskConditionalDependency",
250
+ back_populates="task",
251
+ uselist=True,
252
+ cascade="all, delete-orphan",
253
+ )
254
+
245
255
  # Properties
246
256
  @property
247
257
  def assigned_users(self) -> list[str]:
File without changes
@@ -0,0 +1,109 @@
1
+ import operator as py_operator
2
+ from typing import Any, Union
3
+
4
+ from loguru import logger
5
+ from sqlalchemy.orm import Session
6
+
7
+ from fides.api.graph.config import FieldPath
8
+ from fides.api.task.conditional_dependencies.schemas import (
9
+ Condition,
10
+ ConditionGroup,
11
+ ConditionLeaf,
12
+ GroupOperator,
13
+ Operator,
14
+ )
15
+
16
+ operator_methods = {
17
+ Operator.exists: lambda a, _: a is not None,
18
+ Operator.not_exists: lambda a, _: a is None,
19
+ Operator.eq: py_operator.eq,
20
+ Operator.neq: py_operator.ne,
21
+ Operator.lt: lambda a, b: a < b if a is not None else False,
22
+ Operator.lte: lambda a, b: a <= b if a is not None else False,
23
+ Operator.gt: lambda a, b: a > b if a is not None else False,
24
+ Operator.gte: lambda a, b: a >= b if a is not None else False,
25
+ Operator.list_contains: lambda a, b: b in a if isinstance(a, list) else False,
26
+ Operator.not_in_list: lambda a, b: a not in b if isinstance(b, list) else True,
27
+ }
28
+
29
+
30
+ class ConditionEvaluator:
31
+ """Evaluates nested conditions for manual task creation"""
32
+
33
+ def __init__(self, db: Session):
34
+ self.db = db
35
+
36
+ def evaluate_rule(self, rule: Condition, data: Union[dict, Any]) -> bool:
37
+ """Evaluate a nested condition rule against input data"""
38
+ if isinstance(rule, ConditionLeaf):
39
+ return self._evaluate_leaf_condition(rule, data)
40
+ # ConditionGroup
41
+ return self._evaluate_group_condition(rule, data)
42
+
43
+ def _evaluate_leaf_condition(
44
+ self, condition: ConditionLeaf, data: Union[dict, Any]
45
+ ) -> bool:
46
+ """Evaluate a leaf condition against input data"""
47
+ actual_value = self._get_nested_value(data, condition.field_address.split("."))
48
+ # Apply operator and return result
49
+ return self._apply_operator(actual_value, condition.operator, condition.value)
50
+
51
+ def _evaluate_group_condition(
52
+ self, group: ConditionGroup, data: Union[dict, Any]
53
+ ) -> bool:
54
+ """Evaluate a group condition against input data"""
55
+ results = [
56
+ self.evaluate_rule(condition, data) for condition in group.conditions
57
+ ]
58
+
59
+ logical_operators = {GroupOperator.and_: all, GroupOperator.or_: any}
60
+ operator_func = logical_operators.get(group.logical_operator)
61
+
62
+ if operator_func is None:
63
+ logger.warning(f"Unknown logical operator: {group.logical_operator}")
64
+ return False
65
+
66
+ return operator_func(results)
67
+
68
+ def _get_nested_value(self, data: Union[dict, Any], keys: list[str]) -> Any:
69
+ """Get nested value from data using dot notation
70
+
71
+ Supports both simple dictionary access and Fides reference structures:
72
+ - Simple dict: data["user"]["name"]
73
+ - Fides FieldAddress: data.get_field_value(FieldAddress("dataset", "collection", "field_address"))
74
+ - Fides Collection: data.get_field_value(FieldPath("field_address", "subfield"))
75
+ """
76
+ if not keys:
77
+ return data
78
+
79
+ current = data
80
+
81
+ # Try Fides reference structures first
82
+ if hasattr(current, "get_field_value"):
83
+ try:
84
+ field_path = FieldPath(*keys) if len(keys) > 1 else FieldPath(keys[0])
85
+ return current.get_field_value(field_path)
86
+ except (AttributeError, ValueError):
87
+ pass
88
+
89
+ # Fall back to dictionary access
90
+ for key in keys:
91
+ if not isinstance(current, dict):
92
+ current = current.get(key, {}) if hasattr(current, "get") else None
93
+ else:
94
+ current = current.get(key, {})
95
+
96
+ return current if current != {} else None
97
+
98
+ def _apply_operator(
99
+ self, actual_value: Any, operator: Operator, expected_value: Any
100
+ ) -> bool:
101
+ """Apply operator to actual and expected values"""
102
+
103
+ # Get the method for the operator and execute it
104
+ operator_method = operator_methods.get(operator)
105
+ if operator_method is None:
106
+ logger.warning(f"Unknown operator: {operator}")
107
+ return False
108
+
109
+ return operator_method(actual_value, expected_value)
@@ -0,0 +1,54 @@
1
+ from enum import Enum
2
+ from typing import List, Optional, Union
3
+
4
+ from pydantic import BaseModel, Field, model_validator
5
+
6
+
7
+ class Operator(str, Enum):
8
+ eq = "eq"
9
+ neq = "neq"
10
+ lt = "lt"
11
+ lte = "lte"
12
+ gt = "gt"
13
+ gte = "gte"
14
+ exists = "exists"
15
+ not_exists = "not_exists"
16
+ list_contains = "list_contains"
17
+ not_in_list = "not_in_list"
18
+
19
+
20
+ class GroupOperator(str, Enum):
21
+ and_ = "and"
22
+ or_ = "or"
23
+
24
+
25
+ # Leaf condition (e.g., "user.name exists", "user.created_at >= 2024-01-01")
26
+ class ConditionLeaf(BaseModel):
27
+ field_address: str = Field(
28
+ description="Field path to check (e.g., 'user.name', 'billing.subscription.status')"
29
+ )
30
+ operator: Operator = Field(description="Operator to apply")
31
+ value: Optional[
32
+ Union[str, int, float, bool, List[Union[str, int, float, bool]]]
33
+ ] = Field(default=None, description="Expected value for comparison")
34
+
35
+
36
+ # Nested logical condition (AND, OR)
37
+ class ConditionGroup(BaseModel):
38
+ logical_operator: GroupOperator = Field(
39
+ description="Logical operator: 'and' or 'or'"
40
+ )
41
+ conditions: list["Condition"] = Field(
42
+ description="List of conditions or nested groups"
43
+ )
44
+
45
+ @model_validator(mode="after")
46
+ def validate_conditions(self) -> "ConditionGroup":
47
+ if not self.conditions:
48
+ raise ValueError("conditions list cannot be empty")
49
+ return self
50
+
51
+
52
+ # Use model_rebuild to allow recursive nesting
53
+ Condition = Union[ConditionLeaf, ConditionGroup]
54
+ ConditionGroup.model_rebuild()
@@ -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/2cadb5f62dcd7c2b.css" as="style"/><link rel="stylesheet" href="/_next/static/css/2cadb5f62dcd7c2b.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-ff0cd6bff75588da.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-8b3c5d3146ed7692.js" defer=""></script><script src="/_next/static/chunks/pages/404-aece2c920ea14514.js" defer=""></script><script src="/_next/static/wBqdsil8VpFrsdFaO2xpv/_buildManifest.js" defer=""></script><script src="/_next/static/wBqdsil8VpFrsdFaO2xpv/_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":"wBqdsil8VpFrsdFaO2xpv","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/b81194f2c3930152.css" as="style"/><link rel="stylesheet" href="/_next/static/css/b81194f2c3930152.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-ff4c22c9f0840531.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-f66151e613766714.js" defer=""></script><script src="/_next/static/chunks/pages/404-2d803dab6a00f353.js" defer=""></script><script src="/_next/static/jeMhTiDcCKPk_H4S0nSQq/_buildManifest.js" defer=""></script><script src="/_next/static/jeMhTiDcCKPk_H4S0nSQq/_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":"jeMhTiDcCKPk_H4S0nSQq","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>