🚀 New issue to ag2ai/faststream by @melenudo
📝 Bug: auto_commit is always True in Confluent Kafka (#2610)
Describe the bug
Even if you use the deprecated autocommit subscriber parameter, or if you use the
How to reproduce
You can run this snippet (using the deprecated
In Kafka, you will notice that the message is automatically committed before
You can also debug the code and observe that in the consumer:
https://github.com/ag2ai/faststream/blob/8a4c60bdae02c7632c15ff1a1d15b268da6e095d/faststream/confluent/helpers/client.py#L236
Expected behavior
When use
Observed behavior
Environment
#goodfirstissue #bug
sent via relator
📝 Bug: auto_commit is always True in Confluent Kafka (#2610)
Describe the bug
Even if you use the deprecated autocommit subscriber parameter, or if you use the
ack_policy parameter with a value other than AckPolicy.ACK_FIRST, the consumer will set enable.auto.commit to True.How to reproduce
from asyncio import sleep
from pydantic import BaseModel, Field, NonNegativeFloat
from faststream import FastStream, Logger
from faststream.confluent import KafkaBroker
class DataBasic(BaseModel):
data: NonNegativeFloat = Field(
..., examples=[0.5], description="Float data example"
)
broker = KafkaBroker("localhost:9092")
app = FastStream(broker)
@broker.publisher("output_data")
@broker.subscriber("input_data", group_id="my-group", auto_commit=False)
async def on_input_data(msg: DataBasic, logger: Logger) -> DataBasic:
logger.info(msg)
await sleep(20)
return DataBasic(data=msg.data + 1.0)
You can run this snippet (using the deprecated
auto_commit; the same behavior can be observed if you use ack_policy=AckPolicy.ACK).In Kafka, you will notice that the message is automatically committed before
on_input_data finishes.You can also debug the code and observe that in the consumer:
https://github.com/ag2ai/faststream/blob/8a4c60bdae02c7632c15ff1a1d15b268da6e095d/faststream/confluent/helpers/client.py#L236
self.config always has the property enable.auto.commit to TrueExpected behavior
When use
@subscriber(...,ack_policy=AckPolicy.ACK) the autocommit must be disabled (same behavior for a policy different than AckPolicy.ACK_FIRST)Observed behavior
enable.auto.commit is always True ignoring subscriber parameters.Environment
Running FastStream 0.6.2 with CPython 3.12.9 on Darwin
#goodfirstissue #bug
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Figure out why
See https://github.com/wemake-services/django-modern-rest/blob/7aa23316219d4226d7c49435f9b028130f8c5dbc/docs/conf.py#L98-L99
When
This does not seem right, because everything is configure: intersphinx, imports, etc.
• Links in the form of inline
<img width="721" height="115" alt="Image" src="https://github.com/user-attachments/assets/91a0e5ee-90de-4e04-ae52-58514cc275f4" />
• The link in the annotations is not generated
<img width="737" height="377" alt="Image" src="https://github.com/user-attachments/assets/9ab218c1-0153-45f4-836f-e2d2eaaec92b" />
#documentation #helpwanted #goodfirst_issue
sent via relator
📝 Figure out why
sphinx does not link HttpResponse as a return type (#153)See https://github.com/wemake-services/django-modern-rest/blob/7aa23316219d4226d7c49435f9b028130f8c5dbc/docs/conf.py#L98-L99
When
make -C docs clean html is generated without this line, sphinx produces:django-modern-rest/django_modern_rest/errors.py:docstring of django_modern_rest.errors.global_error_handler:1: WARNING: py:class reference target not found: django.http.response.HttpResponse [ref.class]
django-modern-rest/django_modern_rest/endpoint.py:docstring of django_modern_rest.endpoint.Endpoint.__call__:1: WARNING: py:class reference target not found: django.http.response.HttpResponse [ref.class]
django-modern-rest/django_modern_rest/endpoint.py:docstring of django_modern_rest.endpoint.Endpoint.handle_async_error:1: WARNING: py:class reference target not found: django.http.response.HttpResponse [ref.class]
django-modern-rest/django_modern_rest/endpoint.py:docstring of django_modern_rest.endpoint.Endpoint.handle_error:1: WARNING: py:class reference target not found: django.http.response.HttpResponse [ref.class]
This does not seem right, because everything is configure: intersphinx, imports, etc.
• Links in the form of inline
:class: roles are rendered correctly<img width="721" height="115" alt="Image" src="https://github.com/user-attachments/assets/91a0e5ee-90de-4e04-ae52-58514cc275f4" />
• The link in the annotations is not generated
<img width="737" height="377" alt="Image" src="https://github.com/user-attachments/assets/9ab218c1-0153-45f4-836f-e2d2eaaec92b" />
#documentation #helpwanted #goodfirst_issue
sent via relator
❤1
New issue to wemake-services/django-modern-rest by @sobolevn
Split `rest` app into several django apps (#171)
Our integration tests need some love.
Please, split this big app into smaller and more managable ones:
• basic parsing can stay there
• openapi should go into its own app
• middleware stuff should go into other app as well
https://github.com/wemake-services/django-modern-rest/blob/master/django_test_app/server/apps/rest/views.py
Also, make sure that test files are also different in
#django_modern_rest #help_wanted #good_first_issue #enhancement
sent via relator
Split `rest` app into several django apps (#171)
Our integration tests need some love.
Please, split this big app into smaller and more managable ones:
• basic parsing can stay there
• openapi should go into its own app
• middleware stuff should go into other app as well
https://github.com/wemake-services/django-modern-rest/blob/master/django_test_app/server/apps/rest/views.py
Also, make sure that test files are also different in
tests/test_integration#django_modern_rest #help_wanted #good_first_issue #enhancement
sent via relator
New issue to wemake-services/django-modern-rest by @sobolevn
Split code from `middleware.rst` into its own example file (#186)
We store our examples as independent files, so it would be easier for us to work with them: type checking, linting, etc.
Right now
#django_modern_rest #documentation #good_first_issue #help_wanted
sent via relator
Split code from `middleware.rst` into its own example file (#186)
We store our examples as independent files, so it would be easier for us to work with them: type checking, linting, etc.
Right now
middleware.rst has a lot of code with no examples. We need to create a new example/middleware/<example_name>.py and split the code.#django_modern_rest #documentation #good_first_issue #help_wanted
sent via relator
New issue to wemake-services/django-modern-rest by @sobolevn
Customize `.. literalinclude` directive to automatically create links to the source files (#191)
Some examples have a big number of
To fix this I propose adding a sphinx custom directive called
🖼️Image
Here are some basic examples of how to do something similar:
https://chatgpt.com/share/68ff5943-c07c-8009-8ae1-cc6520b452d7
PRs are very welcome!
#django_modern_rest #documentation #help_wanted #enhancement #good_first_issue
sent via relator
Customize `.. literalinclude` directive to automatically create links to the source files (#191)
Some examples have a big number of
import statements that take around 30%-50% of the whole example. We can use :lines: NUM- to hide imports, but, we still want to show the whole file when needed.To fix this I propose adding a sphinx custom directive called
.. literalincludelinked, which will produce🖼️Image
Here are some basic examples of how to do something similar:
https://chatgpt.com/share/68ff5943-c07c-8009-8ae1-cc6520b452d7
PRs are very welcome!
#django_modern_rest #documentation #help_wanted #enhancement #good_first_issue
sent via relator
🚀 New issue to ag2ai/faststream by @HelgeKrueger
📝 Bug: additional "Subscribe" in docs (#2617)
Describe the bug
In the sidebar, the subscriber is called "my_subscriberSubscribe" instead of "my_subscriber"
How to reproduce
then run
Screenshots
🖼️Image#good_first_issue #bug
sent via relator
📝 Bug: additional "Subscribe" in docs (#2617)
Describe the bug
In the sidebar, the subscriber is called "my_subscriberSubscribe" instead of "my_subscriber"
How to reproduce
from faststream import FastStream
from faststream.rabbit import RabbitBroker
broker = RabbitBroker()
@broker.subscriber("queue", title="my_subscriber")
async def test(): ...
app = FastStream(broker)
then run
uv run faststream docs serve main:app
Screenshots
🖼️Image#good_first_issue #bug
sent via relator
❤1
New issue to wemake-services/django-modern-rest by @sobolevn
Validate that controllers with `blueprints` can't have `component_parsers` (#217)
Otherwise we would do two parsings in a single HTTP request.
This is not good.
Right now this code is possible:
This must raise a validation exception in
We allow endpoints in the final composed controllers, but they must not use any parsing. Like
#django_modern_rest #good_first_issue #enhancement #help_wanted
sent via relator
Validate that controllers with `blueprints` can't have `component_parsers` (#217)
Otherwise we would do two parsings in a single HTTP request.
This is not good.
Right now this code is possible:
@final
class _ErrorBody(pydantic.BaseModel):
error: int
class _ErrorHandlingBlueprint(
Blueprint[PydanticSerializer],
Body[_ErrorBody], # <- first body parsing
):
def post(self) -> str:
return str(self.parsed_body.error)
class _ErrorHandlingController(
Controller[PydanticSerializer],
Body[dict[str, int]], # <- second body parsing
):
blueprints: ClassVar[Sequence[_BlueprintT]] = [_ErrorHandlingBlueprint]
def get(self) -> int:
return self.parsed_body.get('error', 0)
This must raise a validation exception in
ControllerValidator.We allow endpoints in the final composed controllers, but they must not use any parsing. Like
OPTIONS, for example. If users want to have parsed data, then they should create a blueprint.#django_modern_rest #good_first_issue #enhancement #help_wanted
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Change how
There's a room for potential optimization of how
How it works now:
https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/endpoint.py#L304-L323
We can remove this
We would need to select proper
https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/endpoint.py#L97-L109
We would need to types:
• one for validating
• one for raw responses
#enhancement #helpwanted #goodfirst_issue
sent via relator
📝 Change how
ResponseValidator is selected (#229)There's a room for potential optimization of how
ResponseValidator is selected.How it works now:
https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/endpoint.py#L304-L323
We can remove this
if isinstance from the hot path to the import time.We would need to select proper
ResponseValidator type for the response during metadata build in endpoint.py https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/endpoint.py#L97-L109
We would need to types:
• one for validating
HttpResponses• one for raw responses
#enhancement #helpwanted #goodfirst_issue
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Optimize
This method is in hot-path, it is called for every response: https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/validation.py#L137-L162
So, we need to optimize it to the max. I propose to:
1. Make a function out of this method
2. Use
3. Profit!
#enhancement #goodfirstissue #help_wanted
sent via relator
📝 Optimize
_is_validation_enabled by using cache (#230)This method is in hot-path, it is called for every response: https://github.com/wemake-services/django-modern-rest/blob/c6071d9907c72a54258bc7f644822e91640559d4/djangomodernrest/validation.py#L137-L162
So, we need to optimize it to the max. I propose to:
1. Make a function out of this method
2. Use
@lru_cache(maxsize=MAX_CACHE_SIZE) as we do in other places to cache the function result (since the result can't change for a given endpoint / controller)3. Profit!
#enhancement #goodfirstissue #help_wanted
sent via relator