fastapi-admin-kit 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/PKG-INFO +3 -1
  2. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/__init__.py +7 -1
  3. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/admin_template.py +3 -0
  4. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/core.py +10 -2
  5. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/context.py +33 -1
  6. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/events.py +2 -2
  7. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/logger.py +8 -0
  8. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/sqlalchemy_logger.py +6 -0
  9. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/models.py +2 -0
  10. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/permissions.py +15 -1
  11. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/types.py +2 -0
  12. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/nav.py +2 -0
  13. fastapi_admin_kit-0.3.1/fastapi_admin_kit/export_import/__init__.py +28 -0
  14. fastapi_admin_kit-0.3.1/fastapi_admin_kit/export_import/base.py +387 -0
  15. fastapi_admin_kit-0.3.1/fastapi_admin_kit/export_import/csv.py +181 -0
  16. fastapi_admin_kit-0.3.1/fastapi_admin_kit/export_import/excel.py +193 -0
  17. fastapi_admin_kit-0.3.1/fastapi_admin_kit/export_import/registry.py +85 -0
  18. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/modeladmin.py +99 -2
  19. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/router.py +202 -0
  20. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/js/admin.js +4 -0
  21. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/macros/icons.html +1 -0
  22. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/form.html +10 -1
  23. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/list.html +86 -3
  24. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/list_table.html +14 -2
  25. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/sidebar.html +17 -5
  26. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/class_views.py +97 -20
  27. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/context.py +4 -0
  28. fastapi_admin_kit-0.3.1/fastapi_admin_kit/views/factory.py +629 -0
  29. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/renderers.py +139 -13
  30. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/pyproject.toml +1 -0
  31. fastapi_admin_kit-0.3.0/fastapi_admin_kit/views/factory.py +0 -14
  32. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/.gitignore +0 -0
  33. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/CHANGELOG.md +0 -0
  34. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/LICENSE +0 -0
  35. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/README.md +0 -0
  36. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/actions/__init__.py +0 -0
  37. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/actions/base.py +0 -0
  38. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/actions/registry.py +0 -0
  39. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/__init__.py +0 -0
  40. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/admin_config.py +0 -0
  41. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/admin_database.py +0 -0
  42. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/admin_router.py +0 -0
  43. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/builtin_models.py +0 -0
  44. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/decorators.py +0 -0
  45. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/admin/state.py +0 -0
  46. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/__init__.py +0 -0
  47. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/auth.py +0 -0
  48. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/crud.py +0 -0
  49. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/deps.py +0 -0
  50. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/roles.py +0 -0
  51. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/schema_generator.py +0 -0
  52. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/schemas.py +0 -0
  53. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/api/search.py +0 -0
  54. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/__init__.py +0 -0
  55. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/diff.py +0 -0
  56. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/event_bus.py +0 -0
  57. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/listener.py +0 -0
  58. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/middleware.py +0 -0
  59. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/audit/models.py +0 -0
  60. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/__init__.py +0 -0
  61. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/backend.py +0 -0
  62. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/csrf.py +0 -0
  63. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/dependencies.py +0 -0
  64. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/hasher.py +0 -0
  65. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/identity.py +0 -0
  66. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/mixins.py +0 -0
  67. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/password.py +0 -0
  68. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/protocol.py +0 -0
  69. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/ratelimit.py +0 -0
  70. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/router.py +0 -0
  71. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/session.py +0 -0
  72. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/totp.py +0 -0
  73. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/auth/views.py +0 -0
  74. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/backends/__init__.py +0 -0
  75. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/backends/protocols.py +0 -0
  76. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/backends/sqlalchemy.py +0 -0
  77. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/__init__.py +0 -0
  78. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/__main__.py +0 -0
  79. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/helpers.py +0 -0
  80. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/migrate.py +0 -0
  81. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/permissions.py +0 -0
  82. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/scaffold.py +0 -0
  83. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/cli/user.py +0 -0
  84. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/__init__.py +0 -0
  85. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/audit.py +0 -0
  86. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/auth.py +0 -0
  87. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/behavior.py +0 -0
  88. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/database.py +0 -0
  89. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/storage.py +0 -0
  90. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/theme.py +0 -0
  91. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/config/ui.py +0 -0
  92. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/dashboard/__init__.py +0 -0
  93. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/db.py +0 -0
  94. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/exceptions.py +0 -0
  95. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/field_types.py +0 -0
  96. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/filters/__init__.py +0 -0
  97. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/filters/base.py +0 -0
  98. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/filters/registry.py +0 -0
  99. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/flash.py +0 -0
  100. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/form/__init__.py +0 -0
  101. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/form/pipeline.py +0 -0
  102. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/form/types.py +0 -0
  103. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/inline.py +0 -0
  104. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/inspection/__init__.py +0 -0
  105. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/inspection/registry.py +0 -0
  106. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/inspection/types.py +0 -0
  107. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/inspection.py +0 -0
  108. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/models/__init__.py +0 -0
  109. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/models/base.py +0 -0
  110. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/nav.py +0 -0
  111. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/pagination/__init__.py +0 -0
  112. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/pagination/base.py +0 -0
  113. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/pagination/cursor.py +0 -0
  114. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/pagination/dynamic.py +0 -0
  115. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/pagination/offset.py +0 -0
  116. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/plugins/__init__.py +0 -0
  117. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/py.typed +0 -0
  118. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/registry/__init__.py +0 -0
  119. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/registry/core.py +0 -0
  120. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/registry/validation.py +0 -0
  121. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/registry.py +0 -0
  122. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/schemas/__init__.py +0 -0
  123. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/schemas/builtin.py +0 -0
  124. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/schemas/schema.py +0 -0
  125. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/search_utils.py +0 -0
  126. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/css/admin.css +0 -0
  127. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/css/presets.css +0 -0
  128. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/css/tokens.css +0 -0
  129. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/css/variables.css +0 -0
  130. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/icons/heroicons.svg +0 -0
  131. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/static/js/htmx-config.js +0 -0
  132. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/storage/__init__.py +0 -0
  133. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/storage/base.py +0 -0
  134. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/storage/local.py +0 -0
  135. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/base.html +0 -0
  136. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/macros/form_fields.html +0 -0
  137. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/macros/table.html +0 -0
  138. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/macros/widgets.html +0 -0
  139. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/2fa/setup.html +0 -0
  140. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/2fa/verify.html +0 -0
  141. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/403.html +0 -0
  142. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/audit_detail.html +0 -0
  143. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/audit_log.html +0 -0
  144. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/dashboard.html +0 -0
  145. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/detail.html +0 -0
  146. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/login.html +0 -0
  147. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/profile/password.html +0 -0
  148. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/profile/profile.html +0 -0
  149. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/role_form.html +0 -0
  150. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/roles/form.html +0 -0
  151. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/roles/list.html +0 -0
  152. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/roles.html +0 -0
  153. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/search.html +0 -0
  154. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/settings/theme.html +0 -0
  155. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/users/form.html +0 -0
  156. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/pages/users/list.html +0 -0
  157. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/_inline_edit_row.html +0 -0
  158. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/command_palette.html +0 -0
  159. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/field_wrapper.html +0 -0
  160. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/flash_messages.html +0 -0
  161. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/head.html +0 -0
  162. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/head_minimal.html +0 -0
  163. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/inline_edit_form.html +0 -0
  164. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/inline_stacked.html +0 -0
  165. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/inline_tabular.html +0 -0
  166. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/mobile_backdrop.html +0 -0
  167. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/pagination.html +0 -0
  168. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/perm_select_widget.html +0 -0
  169. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/permission_widget.html +0 -0
  170. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/scripts.html +0 -0
  171. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/templates/partials/topbar.html +0 -0
  172. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/types.py +0 -0
  173. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/ui/__init__.py +0 -0
  174. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/ui/types.py +0 -0
  175. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/validation.py +0 -0
  176. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/__init__.py +0 -0
  177. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/audit.py +0 -0
  178. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/bulk.py +0 -0
  179. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/dashboard.py +0 -0
  180. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/delete.py +0 -0
  181. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/extra.py +0 -0
  182. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/file_handler.py +0 -0
  183. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/form.py +0 -0
  184. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/list.py +0 -0
  185. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/list_context.py +0 -0
  186. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/model_saver.py +0 -0
  187. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/profile.py +0 -0
  188. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/protocols.py +0 -0
  189. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/roles.py +0 -0
  190. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/search.py +0 -0
  191. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/settings.py +0 -0
  192. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/sidebar.py +0 -0
  193. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/totp.py +0 -0
  194. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views/users.py +0 -0
  195. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/views.py +0 -0
  196. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/__init__.py +0 -0
  197. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/base.py +0 -0
  198. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/inputs.py +0 -0
  199. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/registry.py +0 -0
  200. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/relation.py +0 -0
  201. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/fastapi_admin_kit/widgets/resolver.py +0 -0
  202. {fastapi_admin_kit-0.3.0 → fastapi_admin_kit-0.3.1}/mkdocs.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-admin-kit
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Drop-in admin panel for FastAPI + SQLAlchemy + SQLModel apps
5
5
  Project-URL: Homepage, https://github.com/borhanst/fastapi-admin-kit
6
6
  Project-URL: Documentation, https://borhanst.github.io/fastapi-admin-kit/
@@ -44,6 +44,8 @@ Provides-Extra: docs
44
44
  Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
45
45
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
46
46
  Requires-Dist: mkdocstrings[python]>=0.25.0; extra == 'docs'
47
+ Provides-Extra: excel
48
+ Requires-Dist: openpyxl>=3.1.0; extra == 'excel'
47
49
  Provides-Extra: full
48
50
  Requires-Dist: pyjwt>=2.13.0; extra == 'full'
49
51
  Requires-Dist: uvicorn>=0.30.0; extra == 'full'
@@ -5,6 +5,7 @@ from fastapi_admin_kit.admin.decorators import column
5
5
  from fastapi_admin_kit.auth.mixins import AuthModelMixin
6
6
  from fastapi_admin_kit.config import DatabaseConfig, DatabaseType
7
7
  from fastapi_admin_kit.exceptions import ConfigError
8
+ from fastapi_admin_kit.export_import import CSVExport, CSVImport, ExportBase, ImportBase
8
9
  from fastapi_admin_kit.inline import InlineModelAdmin, StackedInline, TabularInline
9
10
  from fastapi_admin_kit.nav import (
10
11
  BuiltNavGroup,
@@ -81,5 +82,10 @@ __all__ = [
81
82
  "SearchView",
82
83
  # Per-model assets
83
84
  "AdminExtra",
85
+ # Export/Import
86
+ "ExportBase",
87
+ "ImportBase",
88
+ "CSVExport",
89
+ "CSVImport",
84
90
  ]
85
- __version__ = "0.3.0"
91
+ __version__ = "0.3.1"
@@ -22,6 +22,7 @@ class AdminTemplate:
22
22
  dark_mode_default: bool = False,
23
23
  dashboard_permission: str | None = None,
24
24
  settings_permission: str | None = None,
25
+ sidebar_bottom_links: list[dict[str, str]] | None = None,
25
26
  ):
26
27
  self.title = title
27
28
  self.logo_url = logo_url
@@ -31,6 +32,7 @@ class AdminTemplate:
31
32
  self.dark_mode_default = dark_mode_default
32
33
  self.dashboard_permission = dashboard_permission
33
34
  self.settings_permission = settings_permission
35
+ self.sidebar_bottom_links: list[dict[str, str]] = sidebar_bottom_links or []
34
36
  self._nav_groups_built: list = []
35
37
 
36
38
  def _init_jinja(self, app: Any) -> None:
@@ -221,6 +223,7 @@ class AdminTemplate:
221
223
  "current_user": user_for_template,
222
224
  "dashboard_visible": dashboard_visible,
223
225
  "settings_visible": settings_visible,
226
+ "sidebar_bottom_links": self.sidebar_bottom_links,
224
227
  }
225
228
 
226
229
  async def apply_sidebar_context(self, request: Any, user: Any, context: dict) -> dict:
@@ -180,6 +180,7 @@ class Admin:
180
180
  mobile_sidebar: str = "overlay",
181
181
  dashboard_permission: str | None = None,
182
182
  settings_permission: str | None = None,
183
+ sidebar_bottom_links: list[dict[str, str]] | None = None,
183
184
  ):
184
185
  self.registry = AdminRegistry()
185
186
  self._app: FastAPI | None = app
@@ -261,6 +262,7 @@ class Admin:
261
262
  require_tags=require_tags,
262
263
  dashboard_permission=dashboard_permission,
263
264
  settings_permission=settings_permission,
265
+ sidebar_bottom_links=sidebar_bottom_links,
264
266
  ),
265
267
  )
266
268
 
@@ -283,6 +285,7 @@ class Admin:
283
285
  dark_mode_default=config.ui.dark_mode_default,
284
286
  dashboard_permission=config.nav.dashboard_permission,
285
287
  settings_permission=config.nav.settings_permission,
288
+ sidebar_bottom_links=config.nav.sidebar_bottom_links,
286
289
  )
287
290
 
288
291
  self.config = config
@@ -555,7 +558,9 @@ class Admin:
555
558
  from fastapi_admin_kit.db import create_session_factory
556
559
 
557
560
  session_factory = create_session_factory(engine)
558
- from fastapi_admin_kit.backends.sqlalchemy import SqlAlchemyAuditBackend
561
+ from fastapi_admin_kit.backends.sqlalchemy import (
562
+ SqlAlchemyAuditBackend,
563
+ )
559
564
 
560
565
  audit_backend = SqlAlchemyAuditBackend()
561
566
  audit_backend.attach_listeners(session_factory, self.registry)
@@ -736,7 +741,9 @@ class Admin:
736
741
  # Unified signing-key source for sessions, CSRF, and JWT (see AdminState).
737
742
  app.state.admin_secret_key = state.secret_key
738
743
  # Multi-ORM backend: store composed backend and derive individual adapters
739
- from fastapi_admin_kit.backends.sqlalchemy import SqlAlchemySessionAdapter
744
+ from fastapi_admin_kit.backends.sqlalchemy import (
745
+ SqlAlchemySessionAdapter,
746
+ )
740
747
 
741
748
  app.state.admin_backend = self.backend
742
749
  app.state.admin_session_backend_class = SqlAlchemySessionAdapter
@@ -848,6 +855,7 @@ class Admin:
848
855
  "bars-": "menu",
849
856
  "bars-3": "menu",
850
857
  "arrow-down-tray": "download",
858
+ "arrow-up-tray": "upload",
851
859
  "arrow-path": "refresh",
852
860
  "paper-airplane": "send",
853
861
  "exclamation-triangle": "warning",
@@ -3,7 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from contextvars import ContextVar
6
- from typing import Any
6
+ from typing import TYPE_CHECKING, Any
7
+
8
+ if TYPE_CHECKING:
9
+ from fastapi_admin_kit.audit.events import AuditEvent
7
10
 
8
11
  # Context variable to store audit context (user, IP, user_agent, etc.)
9
12
  _current_audit_context: ContextVar[dict] = ContextVar("_current_audit_context", default={})
@@ -60,3 +63,32 @@ class AuditContext:
60
63
  def clear_context(self) -> None:
61
64
  """Clear the audit context."""
62
65
  clear_audit_context()
66
+
67
+
68
+ async def log_audit_event(request: Any, event: AuditEvent) -> None:
69
+ """Persist an AuditEvent directly to the database.
70
+
71
+ Used for EXPORT/IMPORT events that don't go through the SQLAlchemy
72
+ before_flush listener.
73
+ """
74
+ from fastapi_admin_kit.audit.models import AuditLog
75
+ from fastapi_admin_kit.db import get_db_session
76
+
77
+ session = get_db_session(request)
78
+ ctx = get_audit_context()
79
+
80
+ entry = AuditLog(
81
+ action=event.event_type,
82
+ model_name=event.model_name,
83
+ table_name=event.table_name,
84
+ object_id=event.object_id,
85
+ object_repr=event.object_repr,
86
+ changes=event.changes,
87
+ full_snapshot=event.full_snapshot,
88
+ user_id=event.user_id or ctx.get("user_id"),
89
+ user_email=event.user_email or ctx.get("user_email"),
90
+ ip_address=event.ip_address or ctx.get("ip_address"),
91
+ user_agent=event.user_agent or ctx.get("user_agent"),
92
+ )
93
+ session.add(entry)
94
+ await session.flush()
@@ -9,13 +9,13 @@ from typing import Any
9
9
 
10
10
  @dataclass
11
11
  class AuditEvent:
12
- """Represents a single audit event (CREATE, UPDATE, or DELETE).
12
+ """Represents a single audit event (CREATE, UPDATE, DELETE, EXPORT, or IMPORT).
13
13
 
14
14
  This is a pure data structure with no side effects, making it
15
15
  easy to test and serialize.
16
16
  """
17
17
 
18
- event_type: str # "CREATE" | "UPDATE" | "DELETE"
18
+ event_type: str # "CREATE" | "UPDATE" | "DELETE" | "EXPORT" | "IMPORT"
19
19
  model_name: str
20
20
  table_name: str
21
21
  object_id: str
@@ -26,3 +26,11 @@ class AuditLogger(ABC):
26
26
  @abstractmethod
27
27
  def log_delete(self, event: AuditEvent) -> None:
28
28
  """Persist a DELETE audit event."""
29
+
30
+ @abstractmethod
31
+ def log_export(self, event: AuditEvent) -> None:
32
+ """Persist an EXPORT audit event."""
33
+
34
+ @abstractmethod
35
+ def log_import(self, event: AuditEvent) -> None:
36
+ """Persist an IMPORT audit event."""
@@ -32,6 +32,12 @@ class SqlAlchemyAuditLogger(AuditLogger):
32
32
  def log_delete(self, event: AuditEvent) -> None:
33
33
  self._buffer(event)
34
34
 
35
+ def log_export(self, event: AuditEvent) -> None:
36
+ self._buffer(event)
37
+
38
+ def log_import(self, event: AuditEvent) -> None:
39
+ self._buffer(event)
40
+
35
41
  def _buffer(self, event: AuditEvent) -> None:
36
42
  entry = AuditLog(
37
43
  user_id=event.user_id,
@@ -129,6 +129,8 @@ class Permission(Base):
129
129
  can_create = Column(Boolean, default=False)
130
130
  can_edit = Column(Boolean, default=False)
131
131
  can_delete = Column(Boolean, default=False)
132
+ can_export = Column(Boolean, default=False)
133
+ can_import = Column(Boolean, default=False)
132
134
 
133
135
  roles = relationship("Role", secondary=admin_role_permissions, back_populates="permissions")
134
136
 
@@ -82,6 +82,10 @@ class PermissionChecker:
82
82
  ps.can_edit = True
83
83
  if perm.can_delete:
84
84
  ps.can_delete = True
85
+ if perm.can_export:
86
+ ps.can_export = True
87
+ if perm.can_import:
88
+ ps.can_import = True
85
89
 
86
90
  return self._role_cache
87
91
 
@@ -116,6 +120,10 @@ class PermissionChecker:
116
120
  ps.can_edit = True
117
121
  if perm.can_delete:
118
122
  ps.can_delete = True
123
+ if perm.can_export:
124
+ ps.can_export = True
125
+ if perm.can_import:
126
+ ps.can_import = True
119
127
 
120
128
  return self._direct_cache
121
129
 
@@ -137,7 +145,7 @@ class PermissionChecker:
137
145
  async def has_permission(self, table_name: str, action: str) -> bool:
138
146
  """Return True if the current user may perform *action* on *table_name*.
139
147
 
140
- Actions: ``"view"`` | ``"create"`` | ``"edit"`` | ``"delete"``
148
+ Actions: ``"view"`` | ``"create"`` | ``"edit"`` | ``"delete"`` | ``"export"`` | ``"import"``
141
149
 
142
150
  Superusers always return True. Results are cached per-request.
143
151
  """
@@ -191,6 +199,8 @@ class PermissionChecker:
191
199
  can_create=True,
192
200
  can_edit=True,
193
201
  can_delete=True,
202
+ can_export=True,
203
+ can_import=True,
194
204
  )
195
205
  # Check if cache has been populated for this table
196
206
  cache_populated = any(key[0] == table_name for key in self._cache)
@@ -207,6 +217,8 @@ class PermissionChecker:
207
217
  can_create=self._cache.get((table_name, "create"), False),
208
218
  can_edit=self._cache.get((table_name, "edit"), False),
209
219
  can_delete=self._cache.get((table_name, "delete"), False),
220
+ can_export=self._cache.get((table_name, "export"), False),
221
+ can_import=self._cache.get((table_name, "import"), False),
210
222
  )
211
223
 
212
224
  async def load_permissions(self, table_name: str) -> PermissionSet:
@@ -218,4 +230,6 @@ class PermissionChecker:
218
230
  await self.has_permission(table_name, "create")
219
231
  await self.has_permission(table_name, "edit")
220
232
  await self.has_permission(table_name, "delete")
233
+ await self.has_permission(table_name, "export")
234
+ await self.has_permission(table_name, "import")
221
235
  return self.permission_set(table_name)
@@ -13,6 +13,8 @@ class PermissionSet:
13
13
  can_create: bool = False
14
14
  can_edit: bool = False
15
15
  can_delete: bool = False
16
+ can_export: bool = False
17
+ can_import: bool = False
16
18
 
17
19
 
18
20
  @dataclass
@@ -16,6 +16,7 @@ class NavConfig:
16
16
  site_dropdown: list[dict[str, str]] | None = None,
17
17
  dashboard_permission: str | None = None,
18
18
  settings_permission: str | None = None,
19
+ sidebar_bottom_links: list[dict[str, str]] | None = None,
19
20
  ):
20
21
  self.nav_groups = nav_groups or []
21
22
  self.sidebar_builder = sidebar_builder
@@ -23,6 +24,7 @@ class NavConfig:
23
24
  self.site_dropdown = site_dropdown or []
24
25
  self.dashboard_permission = dashboard_permission
25
26
  self.settings_permission = settings_permission
27
+ self.sidebar_bottom_links = sidebar_bottom_links or []
26
28
 
27
29
  def validate_nav_config(self) -> None:
28
30
  """Validate navigation configuration."""
@@ -0,0 +1,28 @@
1
+ """Export and Import module for FastAPI Admin Kit."""
2
+
3
+ from fastapi_admin_kit.export_import.base import ExportBase, ImportBase
4
+ from fastapi_admin_kit.export_import.csv import CSVExport, CSVImport
5
+ from fastapi_admin_kit.export_import.registry import (
6
+ get_export_class,
7
+ get_import_class,
8
+ register_export,
9
+ register_import,
10
+ )
11
+
12
+ __all__ = [
13
+ "ExportBase",
14
+ "ImportBase",
15
+ "CSVExport",
16
+ "CSVImport",
17
+ "register_export",
18
+ "register_import",
19
+ "get_export_class",
20
+ "get_import_class",
21
+ ]
22
+
23
+ try:
24
+ from fastapi_admin_kit.export_import.excel import ExcelExport, ExcelImport
25
+
26
+ __all__ += ["ExcelExport", "ExcelImport"]
27
+ except ImportError:
28
+ pass