ru
Feedback
Находки в опенсорсе: Python

Находки в опенсорсе: Python

Открыть в Telegram

Легкие задачки в опенсорсе из мира Python Чат: @opensource_findings_chat

Больше
985
Подписчики
Нет данных24 часа
-17 дней
+130 день
Архив постов
Support sync and async transport using HTTPX in addition to aiohttp and requests: https://github.com/reagento/descanso/issues/47 #descanso

🚀 New issue to ag2ai/faststream by @Sehat1137 📝 Skip relator notification from the dependabot (#2665) Improve pipeline so that it is not triggered by events from dependabot. https://github.com/ag2ai/faststream/blob/main/.github/workflows/relator.yaml#L19 #good_first_issue #github_actions #faststream #ag2ai sent via relator

🚀 New issue to ag2ai/faststream by @jsonvot 📝 Bug: The coexistence issue between URL and virtualhost (#2652) Describe the bug
import asyncio
from faststream.rabbit import RabbitBroker

async def pub():
    broker = RabbitBroker('amqp://guest:guest@localhost:5672/', virtualhost='/domestic-aed')  # 1
 
 #broker = RabbitBroker('amqp://guest:guest@localhost:5672', virtualhost='//domestic-aed') # 2
 #broker = RabbitBroker('amqp://guest:guest@localhost:5672/', virtualhost='//domestic-aed') # 3
 #broker = RabbitBroker('amqp://guest:guest@localhost:5672//domestic-aed') # 4
 
 #broker = RabbitBroker('amqp://guest:guest@localhost:5672', virtualhost='/domestic-aed') # 5
    async with broker:
        await broker.publish(
            "Hi!",
            queue="test-queue",
            exchange="test-exchange"
        )
asyncio.run(pub())
In version v0.5.33, the first method works properly, and the trailing slash (/) at the end of the URL cannot be omitted. However, in versions >=0.5.34, due to additional handling of virtualhost, only parameter-based formats like 2, 3, 4 and 5 are supported. I believe method 5 is the most intuitive and should be handled correctly, but it is currently treated as an invalid format. Using this method will result in the following error: 🖼️Image Environment faststream[rabbit]>=0.5.34 #bug #good_first_issue #faststream #ag2ai sent via relator

🚀 New issue to wemake-services/django-modern-rest by @sobolevn 📝 Test that we support new styled type aliases as request / return types (#275) We have a special test case for different types that we support https://github.com/wemake-services/django-modern-rest/blob/998715103c375edf4270cbf89cb68d5fad10365e/tests/testunit/testvalidation/testtypevalidation.py#L48-L64 This test is missing a case like
type MyInt = int
Please, add it :) Note, that type X is 3.12+ syntax, while we also support 3.11 So, this needs to be added with a guard and probably exec('type MyInt = int') #goodfirstissue #enhancement #help_wanted sent via relator

🚀 New issue to wemake-services/django-modern-rest by @sobolevn 📝 Validate that cookies= definition is correct (#273) We now support #234 cookies and their definition with NewCookie and CookieSpec. But, we don't have a validation / test for their correct usage, like we do for NewHeader / HeaderSpec. Let's do it! See validation: https://github.com/wemake-services/django-modern-rest/blob/998715103c375edf4270cbf89cb68d5fad10365e/djangomodernrest/validation/endpoint_metadata.py#L90-L104 https://github.com/wemake-services/django-modern-rest/blob/998715103c375edf4270cbf89cb68d5fad10365e/djangomodernrest/validation/endpoint_metadata.py#L443-L458 And test: https://github.com/wemake-services/django-modern-rest/blob/998715103c375edf4270cbf89cb68d5fad10365e/tests/testunit/testendpoint/testmodifydecorator.py#L58-L69 This is a nice DX improvement. #helpwanted #enhancement #goodfirst_issue sent via relator

New issue to wemake-services/django-modern-rest by @sobolevn Validate that we can't set `Set-Cookie` header and should use `cookies=` instead (#259) When using @validate and @modify we must check that no ResponseSpec.headers contain Set-Cookie header description / modification. If so, we need to raise an error that cookies= parameter must be used instead. #django_modern_rest #help_wanted #enhancement #good_first_issue sent via relator

Никто не хочет законтрибутить в Pydantic? Нужно добавить им в CI third-party прогон тестов для FastDepends https://github.com/pydantic/pydantic/issues/12410 Вот в эту джобу, если что

🚀 New issue to wemake-services/wemake-python-styleguide by @sobolevn 📝 Allow / in WPS226 (#3554) String like '/' must not raise string overuse violation, because / is very common in url buildings / path building. We need to add it to https://github.com/wemake-services/wemake-python-styleguide/blob/7f4f7ae24309149aa03d36846a96fb4410b8022e/wemakepythonstyleguide/visitors/ast/complexity/overuses.py#L37 #feature #goodfirstissue #levelstarter #help_wanted sent via relator

🚀 New issue to wemake-services/django-modern-rest by @sobolevn 📝 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

🚀 New issue to wemake-services/django-modern-rest by @sobolevn 📝 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 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 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
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

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 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 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 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 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 📝 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

🚀 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 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 True Expected 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