flagsmith-common 3.8.0__tar.gz → 3.8.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 (110) hide show
  1. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/PKG-INFO +1 -1
  2. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/pyproject.toml +3 -3
  3. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/docgen/events.py +6 -2
  4. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/otel.py +17 -4
  5. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/LICENSE +0 -0
  6. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/README.md +0 -0
  7. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/__init__.py +0 -0
  8. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/__init__.py +0 -0
  9. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/app.py +0 -0
  10. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/cli/__init__.py +0 -0
  11. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/cli/healthcheck.py +0 -0
  12. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/constants.py +0 -0
  13. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/docgen/__init__.py +0 -0
  14. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/logging.py +0 -0
  15. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/main.py +0 -0
  16. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/management/__init__.py +0 -0
  17. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/management/commands/__init__.py +0 -0
  18. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/management/commands/docgen.py +0 -0
  19. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/management/commands/start.py +0 -0
  20. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/management/commands/waitfordb.py +0 -0
  21. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/metrics.py +0 -0
  22. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/middleware.py +0 -0
  23. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/sentry.py +0 -0
  24. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/templates/docgen-events.md +0 -0
  25. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/templates/docgen-metrics.md +0 -0
  26. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/urls.py +0 -0
  27. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/utils.py +0 -0
  28. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/core/views.py +0 -0
  29. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/environments/permissions.py +0 -0
  30. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/__init__.py +0 -0
  31. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/multivariate/__init__.py +0 -0
  32. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/multivariate/serializers.py +0 -0
  33. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/serializers.py +0 -0
  34. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/versioning/__init__.py +0 -0
  35. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/features/versioning/serializers.py +0 -0
  36. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/__init__.py +0 -0
  37. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/conf.py +0 -0
  38. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/constants.py +0 -0
  39. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/logging.py +0 -0
  40. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/metrics.py +0 -0
  41. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/metrics_server.py +0 -0
  42. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/middleware.py +0 -0
  43. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/processors.py +0 -0
  44. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/gunicorn/utils.py +0 -0
  45. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/lint_tests.py +0 -0
  46. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/migrations/__init__.py +0 -0
  47. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/migrations/helpers/__init__.py +0 -0
  48. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/migrations/helpers/postgres_helpers.py +0 -0
  49. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/organisations/permissions.py +0 -0
  50. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/projects/permissions.py +0 -0
  51. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/prometheus/__init__.py +0 -0
  52. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/prometheus/utils.py +0 -0
  53. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/py.typed +0 -0
  54. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/test_tools/__init__.py +0 -0
  55. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/test_tools/plugin.py +0 -0
  56. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/test_tools/types.py +0 -0
  57. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/test_tools/utils.py +0 -0
  58. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/common/types.py +0 -0
  59. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/__init__.py +0 -0
  60. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/api.py +0 -0
  61. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/constants.py +0 -0
  62. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/dynamodb.py +0 -0
  63. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/py.typed +0 -0
  64. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/pydantic_types.py +0 -0
  65. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/types.py +0 -0
  66. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/utils.py +0 -0
  67. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/flagsmith_schemas/validators.py +0 -0
  68. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/__init__.py +0 -0
  69. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/admin.py +0 -0
  70. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/apps.py +0 -0
  71. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/decorators.py +0 -0
  72. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/exceptions.py +0 -0
  73. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/health.py +0 -0
  74. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/managers.py +0 -0
  75. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/metrics.py +0 -0
  76. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0001_initial.py +0 -0
  77. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0002_healthcheckmodel.py +0 -0
  78. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0003_add_completed_to_task.py +0 -0
  79. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0004_recreate_task_indexes.py +0 -0
  80. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0005_update_conditional_index_conditions.py +0 -0
  81. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0006_auto_20230221_0802.py +0 -0
  82. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0007_add_is_locked.py +0 -0
  83. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0008_add_get_task_to_process_function.py +0 -0
  84. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0009_add_recurring_task_run_first_run_at.py +0 -0
  85. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0010_task_priority.py +0 -0
  86. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0011_add_priority_to_get_tasks_to_process.py +0 -0
  87. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0012_add_locked_at_and_timeout.py +0 -0
  88. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0013_add_last_picked_at.py +0 -0
  89. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/0014_add_trace_context.py +0 -0
  90. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/__init__.py +0 -0
  91. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/0008_get_recurring_tasks_to_process.sql +0 -0
  92. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/0008_get_tasks_to_process.sql +0 -0
  93. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/0011_get_tasks_to_process.sql +0 -0
  94. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/0012_get_recurringtasks_to_process.sql +0 -0
  95. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/0013_get_recurringtasks_to_process.sql +0 -0
  96. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/migrations/sql/__init__.py +0 -0
  97. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/models.py +0 -0
  98. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/monitoring.py +0 -0
  99. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/processor.py +0 -0
  100. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/py.typed +0 -0
  101. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/routers.py +0 -0
  102. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/serializers.py +0 -0
  103. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/task_registry.py +0 -0
  104. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/task_run_method.py +0 -0
  105. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/tasks.py +0 -0
  106. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/threads.py +0 -0
  107. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/types.py +0 -0
  108. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/urls.py +0 -0
  109. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/utils.py +0 -0
  110. {flagsmith_common-3.8.0 → flagsmith_common-3.8.1}/src/task_processor/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flagsmith-common
3
- Version: 3.8.0
3
+ Version: 3.8.1
4
4
  Summary: Flagsmith's common library
5
5
  Author: Matthew Elwell, Gagan Trivedi, Kim Gustyr, Zach Aysan, Francesco Lo Franco, Rodrigo López Dato, Evandro Myller, Wadii Zaim
6
6
  License-Expression: BSD-3-Clause
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flagsmith-common"
3
- version = "3.8.0"
3
+ version = "3.8.1"
4
4
  description = "Flagsmith's common library"
5
5
  requires-python = ">=3.11,<4.0"
6
6
  dependencies = []
@@ -87,8 +87,8 @@ dev = [
87
87
  "pre-commit",
88
88
  "pydantic>=2.12.5",
89
89
  "pyfakefs (>=5.7.4, <6.0.0)",
90
- "pytest (>=8.3.4, <9.0.0)",
91
- "pytest-asyncio (>=0.25.3, <1.0.0)",
90
+ "pytest (>=9.0.3, <9.1.0)",
91
+ "pytest-asyncio (>=1.0.0, <2.0.0)",
92
92
  "pytest-cov (>=6.0.0, <7.0.0)",
93
93
  "pytest-django (>=4.10.0, <5.0.0)",
94
94
  "pytest-freezegun (>=0.4.2, <1.0.0)",
@@ -4,6 +4,8 @@ from dataclasses import dataclass, field
4
4
  from pathlib import Path
5
5
  from typing import Iterable, Iterator
6
6
 
7
+ from common.core.otel import get_otel_event_name
8
+
7
9
 
8
10
  class DocgenEventsWarning(UserWarning):
9
11
  """Raised by the events scanner when a call site can't be resolved."""
@@ -317,9 +319,11 @@ def _build_entry_from_emit_call(
317
319
  )
318
320
  return None
319
321
  attributes = scope.bound_attrs | _kwargs_as_attributes(node.keywords)
320
- name = f"{scope.domain}.{event_arg.value}" if scope.domain else event_arg.value
321
322
  return EventEntry(
322
- name=name,
323
+ name=get_otel_event_name(
324
+ logger_name=scope.domain or None,
325
+ body=event_arg.value,
326
+ ),
323
327
  level=func.attr,
324
328
  attributes=attributes,
325
329
  locations=[SourceLocation(path=path, line=node.lineno)],
@@ -54,6 +54,19 @@ _RESERVED_KEYS = frozenset(
54
54
  )
55
55
 
56
56
 
57
+ def get_otel_event_name(*, logger_name: str | None, body: str) -> str:
58
+ """Build the event name that reaches OTel from a structlog `(logger, event)`.
59
+
60
+ The body is normalised via `inflection.underscore` so hyphens and CamelCase
61
+ collapse to snake_case. Empty bodies fall back to ``"unknown"``. The logger
62
+ name, when present, is prefixed verbatim.
63
+ """
64
+ normalised = inflection.underscore(body) if body else "unknown"
65
+ if logger_name:
66
+ return f"{logger_name}.{normalised}"
67
+ return normalised
68
+
69
+
57
70
  def add_otel_trace_context(
58
71
  logger: structlog.types.WrappedLogger,
59
72
  method_name: str,
@@ -95,10 +108,10 @@ def make_structlog_otel_processor(logger_provider: LoggerProvider) -> Processor:
95
108
  attributes[key] = str(value)
96
109
 
97
110
  body = event_dict.get("event", "")
98
- logger_name = event_dict.get("logger")
99
- event_name = inflection.underscore(body) if body else "unknown"
100
- if logger_name:
101
- event_name = f"{logger_name}.{event_name}"
111
+ event_name = get_otel_event_name(
112
+ logger_name=event_dict.get("logger"),
113
+ body=body,
114
+ )
102
115
 
103
116
  # Some observability platforms don't surface OTel's EventName.
104
117
  # Keep a custom attribute for better visibility.