🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Add `RefreshTokenSyncController` and `RefreshTokenAsyncController` (#907)
Add
Basically, they should accept
It should be similar to the existing views:
django-modern-rest/dmr/security/jwt/views.py
Lines 99 to 132 in dba07e8
Example from a real project: https://github.com/Griger10/g-pulse/blob/3d520b8444736eaaeffad1cf2221019f3ffad6c4/services/api/apps/accounts/api/views.py#L93
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 Add `RefreshTokenSyncController` and `RefreshTokenAsyncController` (#907)
Add
RefreshTokenSyncController and RefreshTokenAsyncControllerBasically, they should accept
refresh_token and return new pairs of access_token and refresh_token. But they should be reusable as well as the existing controllers.It should be similar to the existing views:
django-modern-rest/dmr/security/jwt/views.py
Lines 99 to 132 in dba07e8
Example from a real project: https://github.com/Griger10/g-pulse/blob/3d520b8444736eaaeffad1cf2221019f3ffad6c4/services/api/apps/accounts/api/views.py#L93
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @Peopl3s
📝 TagSchema and RoleSchema do not enforce max_length, causing unhandled DB errors (#944)
What's wrong?
The Tag and Role Django models define name = CharField(max_length=100), but the corresponding Pydantic schemas accept any-length strings.
When a client sends a name longer than 100 characters, Pydantic validation passes (HTTP 422 is never raised), and the value reaches the database layer where PostgreSQL raises DataError: value too long for type character varying(100). This results in an unhandled 500 instead of a proper 422 validation error. On SQLite the value is silently stored without truncation, masking the bug in tests.
How it should be?
Add max_length constraints to match the model definition:
Used versions
0.7.0
OS information
MacOS
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 TagSchema and RoleSchema do not enforce max_length, causing unhandled DB errors (#944)
What's wrong?
The Tag and Role Django models define name = CharField(max_length=100), but the corresponding Pydantic schemas accept any-length strings.
class TagSchema(pydantic.BaseModel):
name: str <!-----------------------------HERE
class RoleSchema(pydantic.BaseModel):
name: str <!-----------------------------HERE
When a client sends a name longer than 100 characters, Pydantic validation passes (HTTP 422 is never raised), and the value reaches the database layer where PostgreSQL raises DataError: value too long for type character varying(100). This results in an unhandled 500 instead of a proper 422 validation error. On SQLite the value is silently stored without truncation, masking the bug in tests.
How it should be?
Add max_length constraints to match the model definition:
class TagSchema(pydantic.BaseModel):
name: str = Field(max_length=100)
class RoleSchema(pydantic.BaseModel):
name: str = Field(max_length=100)
Used versions
0.7.0
OS information
MacOS
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
🚀 New issue to ag2ai/faststream by @BrikozO
📝 Bug: (#2842)
#bug #good_first_issue #faststream #ag2ai
sent via relator
📝 Bug: (#2842)
#bug #good_first_issue #faststream #ag2ai
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Test `Valkey` support (#980)
Currently we only test
#good_first_issue #help_wanted #ci #django_modern_rest
sent via relator
📝 Test `Valkey` support (#980)
Currently we only test
redis as the database for SyncRedis and AsyncRedis throttling backends. We also need to test Valkey, because we claim to support it.#good_first_issue #help_wanted #ci #django_modern_rest
sent via relator
Поддержать конвертацию t-строк(!) и обычных строк в текстовые виджеты aiogram-dialog
https://github.com/Tishka17/aiogram_dialog/issues/529
https://github.com/Tishka17/aiogram_dialog/issues/529
GitHub
Implicit Const and Format widgets from strings and t-strings · Issue #529 · Tishka17/aiogram_dialog
We should cast each string to Const widget, while t-strings should become something like Format. To achieve this we should do cast in each Button widget, keyboard placeholder and Window. On python ...
👍4
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Convert our `Empty` class usage to `typing_extensions.Sentinel` (#995)
Current way:
django-modern-rest/dmr/types.py
Lines 48 to 55 in 5ca7975
New (modern) way: https://typing-extensions.readthedocs.io/en/latest/#typing_extensions.Sentinel
1. We need to change how
2. We need to change all
This is a very easy task for new contributors :)
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 Convert our `Empty` class usage to `typing_extensions.Sentinel` (#995)
Current way:
django-modern-rest/dmr/types.py
Lines 48 to 55 in 5ca7975
New (modern) way: https://typing-extensions.readthedocs.io/en/latest/#typing_extensions.Sentinel
1. We need to change how
EmptyObj is defined to be EMPTY: Final = Sentinel('EMPTY')2. We need to change all
isinstance(..., Empty) to check for the sentinelThis is a very easy task for new contributors :)
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator
🚀 New issue to ag2ai/faststream by @zueve
📝 Bug: (#2868)
Describe the bug
Can't forward
How to reproduce
Include source code:
And/Or steps to reproduce the behaviour:
1. Create a KafkaBroker.
2. Try to pass client_rack to the broker constructor.
3. Observe that the parameter is not accepted.
4. There is no alternative way to configure it via subscriber(...) either.
Expected behavior
KafkaBroker should allow passing client_rack (or generic consumer kwargs) and forward it to the underlying aiokafka.AIOKafkaConsumer.
Observed behavior
client_rack is not supported in KafkaBroker constructor, nor in subscriber configuration, so it cannot be passed to aiokafka.
Screenshots
N/A.
Environment
Running FastStream 0.6.7 with CPython 3.14.5 on Linux
Additional context
aiokafka.AIOKafkaConsumer supports client_rack since 0.14.0 version
#bug #good_first_issue #aiokafka #faststream #ag2ai
sent via relator
📝 Bug: (#2868)
Describe the bug
Can't forward
client_rack to aiokafka consumer through FastStream Kafka API.How to reproduce
Include source code:
from faststream import FastStream
from faststream.kafka import KafkaBroker
# Attempt to configure at broker level
broker = KafkaBroker(
"localhost:9092",
client_rack="us-east-1a", # not supported
)
app = FastStream(broker)
And/Or steps to reproduce the behaviour:
1. Create a KafkaBroker.
2. Try to pass client_rack to the broker constructor.
3. Observe that the parameter is not accepted.
4. There is no alternative way to configure it via subscriber(...) either.
Expected behavior
KafkaBroker should allow passing client_rack (or generic consumer kwargs) and forward it to the underlying aiokafka.AIOKafkaConsumer.
Observed behavior
client_rack is not supported in KafkaBroker constructor, nor in subscriber configuration, so it cannot be passed to aiokafka.
Screenshots
N/A.
Environment
Running FastStream 0.6.7 with CPython 3.14.5 on Linux
Additional context
aiokafka.AIOKafkaConsumer supports client_rack since 0.14.0 version
#bug #good_first_issue #aiokafka #faststream #ag2ai
sent via relator
🚀 New issue to ag2ai/faststream by @dzeveloper
📝 Feature: Consumer-Only Mode for KafkaBroker (#2879)
When deploying a subscriber-only service, it's common to provision Kafka credentials scoped strictly to
Proposal:
#enhancement #good_first_issue #confluent #aiokafka #faststream #ag2ai
sent via relator
📝 Feature: Consumer-Only Mode for KafkaBroker (#2879)
When deploying a subscriber-only service, it's common to provision Kafka credentials scoped strictly to
READ + DESCRIBE ACLs on specific topics. Today, KafkaBroker always starts a producer during broker.start(), regardless of whether any @broker.publisher is registered. This causes the producer to attempt a connection using consumer-only credentials, which fails or raises errors at the broker/ACL level.Proposal:
# Option A: broker-level flag
broker = KafkaBroker("localhost:9092", consumer_only=True)
# Option B: skip producer if no publishers are registered (automatic)
# No API change needed — broker inspects registered publishers at start()
#enhancement #good_first_issue #confluent #aiokafka #faststream #ag2ai
sent via relator
👍1
Добавить два поля в openapi.Schema
https://github.com/wemake-services/django-modern-rest/issues/1039
#django_modern_rest #openapi
https://github.com/wemake-services/django-modern-rest/issues/1039
#django_modern_rest #openapi
GitHub
Support `$dynamicRef` and `$dynamicAnchor` openapi props · Issue #1039 · wemake-services/django-modern-rest
Spec: https://spec.openapis.org/oas/v3.2.0.html#generic-template-data-structures https://learn.openapis.org/referencing/dynamic.html Example: https://json-schema.org/blog/posts/dynamicref-and-gener...
👍1
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Flaky test: `test_redis_sync_leaky_bucket` (#1043)
Output:
It fails from time to time: https://github.com/wemake-services/django-modern-rest/actions/runs/26490639540/job/78007463856?pr=1042
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 Flaky test: `test_redis_sync_leaky_bucket` (#1043)
Output:
______________________ test_redis_sync_leaky_bucket[True] ______________________
tests/test_integration/test_throttling/test_backends/test_redis_backend/test_redis_backend.py:110: in test_redis_sync_leaky_bucket
assert response.status_code == HTTPStatus.TOO_MANY_REQUESTS
E assert 200 == <HTTPStatus.TOO_MANY_REQUESTS: 429>
E + where 200 = <HttpResponse status_code=200, "application/json">.status_code
E + and <HTTPStatus.TOO_MANY_REQUESTS: 429> = HTTPStatus.TOO_MANY_REQUESTS
================================ tests coverage ================================
=========================== short test summary info ============================
FAILED tests/test_integration/test_throttling/test_backends/test_redis_backend/test_redis_backend.py::test_redis_sync_leaky_bucket[True] - assert 200 == <HTTPStatus.TOO_MANY_REQUESTS: 429>
+ where 200 = <HttpResponse status_code=200, "application/json">.status_code
+ and <HTTPStatus.TOO_MANY_REQUESTS: 429> = HTTPStatus.TOO_MANY_REQUESTS
============ 1 failed, 2479 passed, 10 skipped in 243.50s (0:04:03) ============
It fails from time to time: https://github.com/wemake-services/django-modern-rest/actions/runs/26490639540/job/78007463856?pr=1042
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Flaky test: `test_sse_ping_with_last` (#1046)
Happened on mypyc wheels cp314-macosx_x86_64
For some reason
Let's fix it.
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 Flaky test: `test_sse_ping_with_last` (#1046)
Happened on mypyc wheels cp314-macosx_x86_64
=================================== FAILURES ===================================
___________________________ test_sse_ping_with_last ____________________________
dmr_async_rf = <dmr.test.DMRAsyncRequestFactory object at 0x114ddad60>
@pytest.mark.asyncio
async def test_sse_ping_with_last(
dmr_async_rf: DMRAsyncRequestFactory,
) -> None:
"""Ensures that valid sse produces valid results."""
request = dmr_async_rf.post('/whatever/', data={'produce_last': True})
response = await dmr_async_rf.wrap(_PingSSE.as_view()(request))
assert isinstance(response, StreamingResponse)
assert response.streaming
assert response.status_code == HTTPStatus.OK
assert response.headers == {
'Cache-Control': 'no-cache',
'Content-Type': 'text/event-stream',
'X-Accel-Buffering': 'no',
'Connection': 'keep-alive',
}
> assert await get_streaming_content(response) == (
b'data: 1\r\n'
b'\r\n'
b': ping\r\n'
b'\r\n'
b'data: 2\r\n'
b'\r\n'
b': ping\r\n'
b'\r\n'
b': ping\r\n'
b'\r\n'
b'data: 3\r\n'
b'\r\n'
)
E AssertionError: assert b'data: 1\r\n...ta: 3\r\n\r\n' == b'data: 1\r\n...ta: 3\r\n\r\n'
E
E At index 42 diff: b'd' != b':'
E
E Full diff:
E - (b'data: 1\r\n\r\n: ping\r\n\r\ndata: 2\r\n\r\n: ping\r\n\r\n: ping\r\n\r\ndata'
E ? --------------
E + (b'data: 1\r\n\r\n: ping\r\n\r\ndata: 2\r\n\r\n: ping\r\n\r\ndata: 3\r\n\r\n')
E ? +++++++++++ +
E - b': 3\r\n\r\n')
For some reason
data: 3 was not sent.Let's fix it.
#bug #good_first_issue #help_wanted #django_modern_rest
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Add default admin page for `dmr/security/jwt/blocklist` (#1054)
Right now our app for jwt blocklisting has a default model: https://github.com/wemake-services/django-modern-rest/blob/master/dmr/security/jwt/blocklist/models.py
But, it does not have a default
Good example: https://github.com/Dresdn/django-modern-rest/blob/3324d0aecf32509b5434df7e8826d7be6ddac7a8/dmr/security/token/admin.py
This is a very easy task :)
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator
📝 Add default admin page for `dmr/security/jwt/blocklist` (#1054)
Right now our app for jwt blocklisting has a default model: https://github.com/wemake-services/django-modern-rest/blob/master/dmr/security/jwt/blocklist/models.py
But, it does not have a default
admin.py file.Good example: https://github.com/Dresdn/django-modern-rest/blob/3324d0aecf32509b5434df7e8826d7be6ddac7a8/dmr/security/token/admin.py
This is a very easy task :)
#feature #good_first_issue #help_wanted #django_modern_rest
sent via relator