core-framework 0.12.23__tar.gz → 0.12.24__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 (142) hide show
  1. {core_framework-0.12.23 → core_framework-0.12.24}/PKG-INFO +1 -1
  2. {core_framework-0.12.23 → core_framework-0.12.24}/core/__init__.py +1 -1
  3. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/state.py +60 -1
  4. {core_framework-0.12.23 → core_framework-0.12.24}/core/views.py +3 -3
  5. {core_framework-0.12.23 → core_framework-0.12.24}/pyproject.toml +1 -1
  6. {core_framework-0.12.23 → core_framework-0.12.24}/.gitignore +0 -0
  7. {core_framework-0.12.23 → core_framework-0.12.24}/README.md +0 -0
  8. {core_framework-0.12.23 → core_framework-0.12.24}/core/app.py +0 -0
  9. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/__init__.py +0 -0
  10. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/backends.py +0 -0
  11. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/base.py +0 -0
  12. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/decorators.py +0 -0
  13. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/hashers.py +0 -0
  14. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/helpers.py +0 -0
  15. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/middleware.py +0 -0
  16. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/models.py +0 -0
  17. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/permissions.py +0 -0
  18. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/schemas.py +0 -0
  19. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/tokens.py +0 -0
  20. {core_framework-0.12.23 → core_framework-0.12.24}/core/auth/views.py +0 -0
  21. {core_framework-0.12.23 → core_framework-0.12.24}/core/choices.py +0 -0
  22. {core_framework-0.12.23 → core_framework-0.12.24}/core/cli/__init__.py +0 -0
  23. {core_framework-0.12.23 → core_framework-0.12.24}/core/cli/main.py +0 -0
  24. {core_framework-0.12.23 → core_framework-0.12.24}/core/config.py +0 -0
  25. {core_framework-0.12.23 → core_framework-0.12.24}/core/database.py +0 -0
  26. {core_framework-0.12.23 → core_framework-0.12.24}/core/datetime.py +0 -0
  27. {core_framework-0.12.23 → core_framework-0.12.24}/core/dependencies.py +0 -0
  28. {core_framework-0.12.23 → core_framework-0.12.24}/core/deployment/__init__.py +0 -0
  29. {core_framework-0.12.23 → core_framework-0.12.24}/core/deployment/docker.py +0 -0
  30. {core_framework-0.12.23 → core_framework-0.12.24}/core/deployment/kubernetes.py +0 -0
  31. {core_framework-0.12.23 → core_framework-0.12.24}/core/deployment/pm2.py +0 -0
  32. {core_framework-0.12.23 → core_framework-0.12.24}/core/exceptions.py +0 -0
  33. {core_framework-0.12.23 → core_framework-0.12.24}/core/fields.py +0 -0
  34. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/__init__.py +0 -0
  35. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/avro.py +0 -0
  36. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/base.py +0 -0
  37. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/config.py +0 -0
  38. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/confluent/__init__.py +0 -0
  39. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/confluent/consumer.py +0 -0
  40. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/confluent/producer.py +0 -0
  41. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/decorators.py +0 -0
  42. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/kafka/__init__.py +0 -0
  43. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/kafka/admin.py +0 -0
  44. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/kafka/broker.py +0 -0
  45. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/kafka/consumer.py +0 -0
  46. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/kafka/producer.py +0 -0
  47. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/rabbitmq/__init__.py +0 -0
  48. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/rabbitmq/broker.py +0 -0
  49. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/rabbitmq/consumer.py +0 -0
  50. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/rabbitmq/producer.py +0 -0
  51. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/redis/__init__.py +0 -0
  52. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/redis/broker.py +0 -0
  53. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/redis/consumer.py +0 -0
  54. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/redis/producer.py +0 -0
  55. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/registry.py +0 -0
  56. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/topics.py +0 -0
  57. {core_framework-0.12.23 → core_framework-0.12.24}/core/messaging/workers.py +0 -0
  58. {core_framework-0.12.23 → core_framework-0.12.24}/core/middleware.py +0 -0
  59. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/__init__.py +0 -0
  60. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/analyzer.py +0 -0
  61. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/cli.py +0 -0
  62. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/engine.py +0 -0
  63. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/migration.py +0 -0
  64. {core_framework-0.12.23 → core_framework-0.12.24}/core/migrations/operations.py +0 -0
  65. {core_framework-0.12.23 → core_framework-0.12.24}/core/models.py +0 -0
  66. {core_framework-0.12.23 → core_framework-0.12.24}/core/permissions.py +0 -0
  67. {core_framework-0.12.23 → core_framework-0.12.24}/core/querysets.py +0 -0
  68. {core_framework-0.12.23 → core_framework-0.12.24}/core/relations.py +0 -0
  69. {core_framework-0.12.23 → core_framework-0.12.24}/core/routing.py +0 -0
  70. {core_framework-0.12.23 → core_framework-0.12.24}/core/serializers.py +0 -0
  71. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/__init__.py +0 -0
  72. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/base.py +0 -0
  73. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/config.py +0 -0
  74. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/decorators.py +0 -0
  75. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/registry.py +0 -0
  76. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/scheduler.py +0 -0
  77. {core_framework-0.12.23 → core_framework-0.12.24}/core/tasks/worker.py +0 -0
  78. {core_framework-0.12.23 → core_framework-0.12.24}/core/tenancy.py +0 -0
  79. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/__init__.py +0 -0
  80. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/assertions.py +0 -0
  81. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/client.py +0 -0
  82. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/database.py +0 -0
  83. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/factories.py +0 -0
  84. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/mocks.py +0 -0
  85. {core_framework-0.12.23 → core_framework-0.12.24}/core/testing/plugin.py +0 -0
  86. {core_framework-0.12.23 → core_framework-0.12.24}/core/validation.py +0 -0
  87. {core_framework-0.12.23 → core_framework-0.12.24}/core/validators.py +0 -0
  88. {core_framework-0.12.23 → core_framework-0.12.24}/docs/01-quickstart.md +0 -0
  89. {core_framework-0.12.23 → core_framework-0.12.24}/docs/02-viewsets.md +0 -0
  90. {core_framework-0.12.23 → core_framework-0.12.24}/docs/03-authentication.md +0 -0
  91. {core_framework-0.12.23 → core_framework-0.12.24}/docs/04-messaging.md +0 -0
  92. {core_framework-0.12.23 → core_framework-0.12.24}/docs/05-multi-service.md +0 -0
  93. {core_framework-0.12.23 → core_framework-0.12.24}/docs/06-tasks.md +0 -0
  94. {core_framework-0.12.23 → core_framework-0.12.24}/docs/07-deployment.md +0 -0
  95. {core_framework-0.12.23 → core_framework-0.12.24}/docs/08-complete-example.md +0 -0
  96. {core_framework-0.12.23 → core_framework-0.12.24}/docs/09-settings.md +0 -0
  97. {core_framework-0.12.23 → core_framework-0.12.24}/docs/10-migrations.md +0 -0
  98. {core_framework-0.12.23 → core_framework-0.12.24}/docs/11-permissions.md +0 -0
  99. {core_framework-0.12.23 → core_framework-0.12.24}/docs/12-auth-backends.md +0 -0
  100. {core_framework-0.12.23 → core_framework-0.12.24}/docs/13-validators.md +0 -0
  101. {core_framework-0.12.23 → core_framework-0.12.24}/docs/14-querysets.md +0 -0
  102. {core_framework-0.12.23 → core_framework-0.12.24}/docs/15-routing.md +0 -0
  103. {core_framework-0.12.23 → core_framework-0.12.24}/docs/16-serializers.md +0 -0
  104. {core_framework-0.12.23 → core_framework-0.12.24}/docs/17-datetime.md +0 -0
  105. {core_framework-0.12.23 → core_framework-0.12.24}/docs/18-dependencies.md +0 -0
  106. {core_framework-0.12.23 → core_framework-0.12.24}/docs/19-views.md +0 -0
  107. {core_framework-0.12.23 → core_framework-0.12.24}/docs/20-fields.md +0 -0
  108. {core_framework-0.12.23 → core_framework-0.12.24}/docs/21-tenancy.md +0 -0
  109. {core_framework-0.12.23 → core_framework-0.12.24}/docs/22-replicas.md +0 -0
  110. {core_framework-0.12.23 → core_framework-0.12.24}/docs/23-soft-delete.md +0 -0
  111. {core_framework-0.12.23 → core_framework-0.12.24}/docs/24-relations.md +0 -0
  112. {core_framework-0.12.23 → core_framework-0.12.24}/docs/25-exceptions.md +0 -0
  113. {core_framework-0.12.23 → core_framework-0.12.24}/docs/26-choices.md +0 -0
  114. {core_framework-0.12.23 → core_framework-0.12.24}/docs/27-workers.md +0 -0
  115. {core_framework-0.12.23 → core_framework-0.12.24}/docs/28-avro.md +0 -0
  116. {core_framework-0.12.23 → core_framework-0.12.24}/docs/29-topics.md +0 -0
  117. {core_framework-0.12.23 → core_framework-0.12.24}/docs/30-changelog-0.12.2.md +0 -0
  118. {core_framework-0.12.23 → core_framework-0.12.24}/docs/31-middleware.md +0 -0
  119. {core_framework-0.12.23 → core_framework-0.12.24}/docs/32-migration-guide-0.12.2.md +0 -0
  120. {core_framework-0.12.23 → core_framework-0.12.24}/docs/32-testing.md +0 -0
  121. {core_framework-0.12.23 → core_framework-0.12.24}/docs/33-changelog-0.12.3.md +0 -0
  122. {core_framework-0.12.23 → core_framework-0.12.24}/docs/99-faq-troubleshooting.md +0 -0
  123. {core_framework-0.12.23 → core_framework-0.12.24}/docs/GUIDE.md +0 -0
  124. {core_framework-0.12.23 → core_framework-0.12.24}/docs/README.md +0 -0
  125. {core_framework-0.12.23 → core_framework-0.12.24}/example/__init__.py +0 -0
  126. {core_framework-0.12.23 → core_framework-0.12.24}/example/app.py +0 -0
  127. {core_framework-0.12.23 → core_framework-0.12.24}/example/auth.py +0 -0
  128. {core_framework-0.12.23 → core_framework-0.12.24}/example/models.py +0 -0
  129. {core_framework-0.12.23 → core_framework-0.12.24}/example/schemas.py +0 -0
  130. {core_framework-0.12.23 → core_framework-0.12.24}/example/views.py +0 -0
  131. {core_framework-0.12.23 → core_framework-0.12.24}/libs/__init__.py +0 -0
  132. {core_framework-0.12.23 → core_framework-0.12.24}/main.py +0 -0
  133. {core_framework-0.12.23 → core_framework-0.12.24}/tests/__init__.py +0 -0
  134. {core_framework-0.12.23 → core_framework-0.12.24}/tests/conftest.py +0 -0
  135. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_auth_helpers.py +0 -0
  136. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_imports.py +0 -0
  137. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_issues_fixes.py +0 -0
  138. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_models.py +0 -0
  139. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_permissions.py +0 -0
  140. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_querysets.py +0 -0
  141. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_serializers.py +0 -0
  142. {core_framework-0.12.23 → core_framework-0.12.24}/tests/test_validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-framework
3
- Version: 0.12.23
3
+ Version: 0.12.24
4
4
  Summary: Core Framework - Django-inspired, FastAPI-powered. Alta performance, baixo acoplamento, produtividade extrema.
5
5
  Project-URL: Homepage, https://github.com/SorPuti/core-framework
6
6
  Project-URL: Documentation, https://github.com/SorPuti/core-framework#readme
@@ -287,7 +287,7 @@ from core.exceptions import (
287
287
  MissingDependency,
288
288
  )
289
289
 
290
- __version__ = "0.12.23"
290
+ __version__ = "0.12.24"
291
291
  __all__ = [
292
292
  # Models
293
293
  "Model",
@@ -414,21 +414,80 @@ def _extract_enums_from_annotations(model_class: type["Model"]) -> dict[str, Enu
414
414
 
415
415
 
416
416
  def models_to_schema_state(models: list[type["Model"]]) -> SchemaState:
417
- """Extrai estado do schema de uma lista de Models."""
417
+ """Extrai estado do schema de uma lista de Models e tabelas de associação."""
418
418
  state = SchemaState()
419
+ processed_tables = set()
419
420
 
421
+ # 1. Processa models explícitos
420
422
  for model in models:
421
423
  if hasattr(model, "__table__"):
422
424
  table_state = model_to_table_state(model)
423
425
  state.tables[table_state.name] = table_state
426
+ processed_tables.add(table_state.name)
424
427
 
425
428
  # Extrai enums do model
426
429
  model_enums = _extract_enums_from_annotations(model)
427
430
  state.enums.update(model_enums)
428
431
 
432
+ # 2. Processa tabelas de associação do metadata (ex: PermissionsMixin)
433
+ # Estas são criadas via Table() e não herdam de Model
434
+ if models:
435
+ from core.models import Model as BaseModel
436
+ for table_name, table in BaseModel.metadata.tables.items():
437
+ if table_name in processed_tables:
438
+ continue
439
+ if table_name in INTERNAL_TABLES:
440
+ continue
441
+ if table_name.startswith("_"):
442
+ continue
443
+
444
+ # Extrai estado da tabela de associação
445
+ table_state = _table_to_state(table)
446
+ if table_state:
447
+ state.tables[table_state.name] = table_state
448
+
429
449
  return state
430
450
 
431
451
 
452
+ def _table_to_state(table) -> TableState | None:
453
+ """Extrai estado de uma tabela SQLAlchemy (não-model)."""
454
+ try:
455
+ columns = {}
456
+ for col in table.columns:
457
+ auto_inc = col.autoincrement
458
+ if auto_inc == "auto":
459
+ auto_inc = col.primary_key
460
+ else:
461
+ auto_inc = bool(auto_inc)
462
+
463
+ columns[col.name] = ColumnState(
464
+ name=col.name,
465
+ type=get_sqlalchemy_type_string(col.type),
466
+ nullable=col.nullable,
467
+ default=col.default.arg if col.default is not None else None,
468
+ primary_key=col.primary_key,
469
+ autoincrement=auto_inc,
470
+ unique=col.unique if col.unique else False,
471
+ index=col.index if col.index else False,
472
+ )
473
+
474
+ foreign_keys = []
475
+ for fk in table.foreign_keys:
476
+ foreign_keys.append(ForeignKeyState(
477
+ column=fk.parent.name,
478
+ references_table=fk.column.table.name,
479
+ references_column=fk.column.name,
480
+ ))
481
+
482
+ return TableState(
483
+ name=table.name,
484
+ columns=columns,
485
+ foreign_keys=foreign_keys,
486
+ )
487
+ except Exception:
488
+ return None
489
+
490
+
432
491
  # Tabelas internas do framework que devem ser ignoradas em migrações
433
492
  # Estas tabelas são gerenciadas pelo Core Framework e não devem ser
434
493
  # modificadas por makemigrations ou migrate
@@ -462,11 +462,11 @@ class ViewSet(Generic[ModelT, InputT, OutputT]):
462
462
  except (ValueError, TypeError):
463
463
  self._raise_invalid_lookup_error(value, "integer")
464
464
 
465
- # UUID
466
- if type_name in ('UUID', 'GUID') or isinstance(field_type, PG_UUID):
465
+ # UUID (includes core.fields.Uuid, SQLAlchemy UUID, PostgreSQL UUID)
466
+ if type_name in ('UUID', 'GUID', 'Uuid') or isinstance(field_type, PG_UUID):
467
467
  try:
468
468
  return uuid.UUID(value)
469
- except (ValueError, TypeError):
469
+ except (ValueError, TypeError, AttributeError):
470
470
  self._raise_invalid_lookup_error(value, "UUID")
471
471
 
472
472
  # String - sem conversão necessária
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "core-framework"
3
- version = "0.12.23"
3
+ version = "0.12.24"
4
4
  description = "Core Framework - Django-inspired, FastAPI-powered. Alta performance, baixo acoplamento, produtividade extrema."
5
5
  requires-python = ">=3.10,<4.0"
6
6
  readme = "README.md"