brilliance-admin 0.43.1__tar.gz → 0.43.3__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 (125) hide show
  1. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/PKG-INFO +1 -1
  2. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/fields.py +5 -2
  3. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/fields_schema.py +8 -2
  4. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin.egg-info/PKG-INFO +1 -1
  5. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/models.py +28 -0
  6. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/pyproject.toml +1 -1
  7. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.configs/docker/Dockerfile +0 -0
  8. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.configs/docker/docker-compose.yml +0 -0
  9. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.configs/nginx/example.conf +0 -0
  10. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.env +0 -0
  11. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.github/workflows/certbot.yml +0 -0
  12. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.github/workflows/deploy.yml +0 -0
  13. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.github/workflows/install-docker.yml +0 -0
  14. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.gitignore +0 -0
  15. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.isort.cfg +0 -0
  16. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/.python-version +0 -0
  17. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/LICENSE +0 -0
  18. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/README.md +0 -0
  19. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/__init__.py +0 -0
  20. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/__init__.py +0 -0
  21. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/routers.py +0 -0
  22. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/utils.py +0 -0
  23. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/__init__.py +0 -0
  24. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/auth.py +0 -0
  25. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/autocomplete.py +0 -0
  26. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/graphs.py +0 -0
  27. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/index.py +0 -0
  28. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/schema.py +0 -0
  29. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/settings.py +0 -0
  30. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/api/views/table.py +0 -0
  31. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/auth.py +0 -0
  32. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/docs.py +0 -0
  33. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/exceptions.py +0 -0
  34. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/__init__.py +0 -0
  35. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/__init__.py +0 -0
  36. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/auth.py +0 -0
  37. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/autocomplete.py +0 -0
  38. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/__init__.py +0 -0
  39. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/base.py +0 -0
  40. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/create.py +0 -0
  41. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/delete.py +0 -0
  42. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/list.py +0 -0
  43. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/retrieve.py +0 -0
  44. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/integrations/sqlalchemy/table/update.py +0 -0
  45. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/locales/en.yml +0 -0
  46. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/locales/ru.yml +0 -0
  47. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/__init__.py +0 -0
  48. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/admin_schema.py +0 -0
  49. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/category.py +0 -0
  50. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/graphs/__init__.py +0 -0
  51. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/graphs/category_graphs.py +0 -0
  52. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/group.py +0 -0
  53. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/__init__.py +0 -0
  54. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/admin_action.py +0 -0
  55. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/category_table.py +0 -0
  56. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/fields/__init__.py +0 -0
  57. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/fields/base.py +0 -0
  58. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/fields/function_field.py +0 -0
  59. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/fields_schema.py +0 -0
  60. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/schema/table/table_models.py +0 -0
  61. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/index-D9axz5zK.js +0 -0
  62. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/index-vlBToOhT.css +0 -0
  63. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/materialdesignicons-webfont-CYDMK1kx.woff2 +0 -0
  64. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/materialdesignicons-webfont-CgCzGbLl.woff +0 -0
  65. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/materialdesignicons-webfont-D3kAzl71.ttf +0 -0
  66. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/materialdesignicons-webfont-DttUABo4.eot +0 -0
  67. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/dark-first/content.min.css +0 -0
  68. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/dark-first/skin.min.css +0 -0
  69. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/dark-slim/content.min.css +0 -0
  70. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/dark-slim/skin.min.css +0 -0
  71. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/img/example.png +0 -0
  72. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/img/tinymce.woff2 +0 -0
  73. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/lightgray/content.min.css +0 -0
  74. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/lightgray/fonts/tinymce.woff +0 -0
  75. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/lightgray/skin.min.css +0 -0
  76. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/plugins/accordion/css/accordion.css +0 -0
  77. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/plugins/accordion/plugin.js +0 -0
  78. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/plugins/codesample/css/prism.css +0 -0
  79. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/plugins/customLink/css/link.css +0 -0
  80. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/plugins/customLink/plugin.js +0 -0
  81. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/tinymce/tinymce.min.js +0 -0
  82. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/static/vanilla-picker-B6E6ObS_.js +0 -0
  83. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/templates/index.html +0 -0
  84. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/translations.py +0 -0
  85. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin/utils.py +0 -0
  86. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin.egg-info/SOURCES.txt +0 -0
  87. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin.egg-info/dependency_links.txt +0 -0
  88. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin.egg-info/requires.txt +0 -0
  89. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/brilliance_admin.egg-info/top_level.txt +0 -0
  90. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/README.md +0 -0
  91. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/__init__.py +0 -0
  92. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/locales/en.yml +0 -0
  93. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/locales/ru.yml +0 -0
  94. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/main.py +0 -0
  95. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/__init__.py +0 -0
  96. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/currency.py +0 -0
  97. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/graphs.py +0 -0
  98. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/merchant.py +0 -0
  99. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/payments.py +0 -0
  100. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/terminal.py +0 -0
  101. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sections/users.py +0 -0
  102. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/sqlite.py +0 -0
  103. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/static/favicon.ico +0 -0
  104. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/static/favicon.jpg +0 -0
  105. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/static/logo-outline.png +0 -0
  106. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/static/logo.png +0 -0
  107. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/example/utils.py +0 -0
  108. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/PC-graphs.jpeg +0 -0
  109. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/PC-table.jpeg +0 -0
  110. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/iPad-edit.jpeg +0 -0
  111. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/iPhone 15-edit.jpeg +0 -0
  112. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/iPhone 15-login.jpeg +0 -0
  113. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/screenshots/websitemockupgenerator.png +0 -0
  114. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/setup.cfg +0 -0
  115. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/__init__.py +0 -0
  116. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/conftest.py +0 -0
  117. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_action.py +0 -0
  118. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_payments_fields_schema.py +0 -0
  119. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_settings.py +0 -0
  120. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_sqlalcmeny_auth.py +0 -0
  121. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_sqlalcmeny_crud.py +0 -0
  122. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_sqlalcmeny_filters.py +0 -0
  123. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_sqlalcmeny_schema.py +0 -0
  124. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/tests/test_translations.py +0 -0
  125. {brilliance_admin-0.43.1 → brilliance_admin-0.43.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brilliance-admin
3
- Version: 0.43.1
3
+ Version: 0.43.3
4
4
  Summary: Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together.. Some call it heavenly in its brilliance.
5
5
  License-Expression: AGPL-3.0
6
6
  Requires-Python: >=3.10
@@ -139,6 +139,9 @@ class SQLAlchemyRelatedField(TableField):
139
139
  - value всегда scalar (None или int)
140
140
  - ORM-объект доступен через extra["record"]
141
141
  """
142
+ if not value:
143
+ return
144
+
142
145
  record = extra.get('record')
143
146
  if record is None:
144
147
  raise FieldError(f'Missing record in serialize context in value: {value}')
@@ -146,13 +149,13 @@ class SQLAlchemyRelatedField(TableField):
146
149
  if self.many:
147
150
  related = getattr(record, self.rel_name, None)
148
151
  if related is None:
149
- raise FieldError(f'Related field "{self.rel_name}" is missing on record {record} (many=True)')
152
+ raise FieldError(f'Related field "{self.rel_name}" is missing on record "{record}" (many=True)')
150
153
 
151
154
  return [{'key': get_pk(obj), 'title': str(obj)} for obj in related]
152
155
 
153
156
  related = getattr(record, self.rel_name, None)
154
157
  if related is None:
155
- raise FieldError(f'Related field "{self.rel_name}" is missing on record (many=False)')
158
+ raise FieldError(f'Related field "{self.rel_name}" is missing on record "{record}" (many=False)')
156
159
 
157
160
  return {'key': get_pk(related), 'title': str(related)}
158
161
 
@@ -64,7 +64,7 @@ class SQLAlchemyFieldsSchema(schema.FieldsSchema):
64
64
  py_t = None
65
65
 
66
66
  impl = getattr(attr, 'impl', None)
67
- is_mutable = isinstance(impl, Mutable)
67
+ is_impl_mutable = isinstance(impl, Mutable)
68
68
 
69
69
  # Foreign key column
70
70
  if col.foreign_keys:
@@ -97,7 +97,7 @@ class SQLAlchemyFieldsSchema(schema.FieldsSchema):
97
97
  elif isinstance(col_type, ARRAY):
98
98
  field_class = schema.ArrayField
99
99
  field_data["array_type"] = type(col_type.item_type).__name__.lower()
100
- field_data["read_only"] = not is_mutable
100
+ field_data["read_only"] = is_impl_mutable or isinstance(col_type, Mutable)
101
101
 
102
102
  elif isinstance(col_type, sqltypes.NullType):
103
103
  continue
@@ -126,6 +126,12 @@ class SQLAlchemyFieldsSchema(schema.FieldsSchema):
126
126
 
127
127
  # relationship-поля
128
128
  for rel in mapper.relationships:
129
+ # relationship, у которых есть локальные FK-колонки, не добавляем в схему,
130
+ # так как связь редактируется через scalar-поле (FK),
131
+ # а relationship используется только для ORM-навигации
132
+ if any(col.foreign_keys for col in rel.local_columns):
133
+ continue
134
+
129
135
  field_slug = rel.key
130
136
 
131
137
  field_data = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brilliance-admin
3
- Version: 0.43.1
3
+ Version: 0.43.3
4
4
  Summary: Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together.. Some call it heavenly in its brilliance.
5
5
  License-Expression: AGPL-3.0
6
6
  Requires-Python: >=3.10
@@ -116,6 +116,31 @@ class MerchantFactory(SQLAlchemyFactoryBase):
116
116
  return self.title
117
117
 
118
118
 
119
+ class Fee(BaseIDModel):
120
+ __tablename__ = "fee"
121
+
122
+ title: Mapped[str] = mapped_column(String(255), nullable=False)
123
+ terminals: Mapped[list["Terminal"]] = relationship(back_populates="fee")
124
+
125
+ def __repr__(self):
126
+ return f"<Fee(id={self.id}, title='{self.title}')>"
127
+
128
+ def __str__(self):
129
+ return self.title
130
+
131
+
132
+ class FeeFactory(SQLAlchemyFactoryBase):
133
+ class Meta:
134
+ model = Merchant
135
+ sqlalchemy_session_factory = async_sessionmaker_
136
+ sqlalchemy_session_persistence = "commit"
137
+
138
+ title = factory.Faker("word")
139
+
140
+ def __str__(self):
141
+ return self.title
142
+
143
+
119
144
  class Terminal(BaseIDModel):
120
145
  __tablename__ = "terminal"
121
146
 
@@ -140,6 +165,9 @@ class Terminal(BaseIDModel):
140
165
  currency_id: Mapped[int] = mapped_column(ForeignKey("currency.id"), index=True)
141
166
  currency: Mapped["Currency"] = relationship(back_populates="terminals") # noqa F821
142
167
 
168
+ fee_id: Mapped[int] = mapped_column(ForeignKey("fee.id"), nullable=True)
169
+ fee: Mapped["Fee"] = relationship(back_populates="terminals")
170
+
143
171
  is_h2h: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default=expression.true())
144
172
  is_active: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default=expression.true())
145
173
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "brilliance-admin"
3
- version = "0.43.1"
3
+ version = "0.43.3"
4
4
  description = 'Simple and lightweight admin panel framework powered by FastAPI and Vue3 Vuetify together.. Some call it heavenly in its brilliance.'
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"