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

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

@opensource_findings_python

Легкие задачки в опенсорсе из мира Python

Чат: @opensource_findings_chat
Subscribers
1.06K
Photos
5
Videos
0
Links
338

Showing posts older than #166 · Back to latest

Older Posts 20 shown
Post #165 1.06K
Post #164 1.01K
🚀 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
Post #163 1.17K
🚀 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
  • 🤩 1
Post #162 985
🚀 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
Post #161 884
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
Post #159 898
🚀 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
  • ❤ 1
Post #158 757
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
Post #157 774
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
Post #156 792
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
Post #155 862
🚀 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
  • ❤ 1
Post #154 716
🚀 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
Post #152 725
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Remove tomli, use tomllib instead (#148)

Since we use python3.11+, we can use default tomllib, tomli can be removed:

• https://github.com/wemake-services/django-modern-rest/blob/9781921e76acb39f56a90cb413e09e563f43f288/pyproject.toml#L94

• https://github.com/wemake-services/django-modern-rest/blob/9781921e76acb39f56a90cb413e09e563f43f288/docs/conf.py#L17

Docs: https://docs.python.org/3/library/tomllib.html

This is a very easy task :)

#helpwanted #dependencies #goodfirst_issue

sent via relator
  • ⚡ 7
Post #151 815
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Create TypedDict for the msgspec.convert call (#124)

We have kwargs for msgspec.convert defined here: https://github.com/wemake-services/django-modern-rest/blob/2edcf631b26758c84adafe1a0f24a8de824c8fca/djangomodernrest/plugins/msgspec.py#L81

And they are used here: https://github.com/wemake-services/django-modern-rest/blob/2edcf631b26758c84adafe1a0f24a8de824c8fca/djangomodernrest/plugins/msgspec.py#L136-L142

We need to make a TypedDict for the possible values of these kwargs.

#goodfirstissue #help_wanted #enhancement

sent via relator
  • 👍 2
Post #150 782
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Write a test for custom handle_error and handle_async_error types (#110)

Our endpoints have two methods to handle custom errors: https://github.com/wemake-services/django-modern-rest/blob/17edd60e1d13b88f4ee2c229095c237b1919b415/djangomodernrest/endpoint.py#L118-L132

But, they are not tested to be customized. Please, add two cases with:

1. Async endpoint and handle_async_error that custom errors can be serialized to json the right way

2. Sync endpoint and handle_error with the same logic

#helpwanted #goodfirst_issue #enhancement

sent via relator
Post #149 812
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Endpoint customizations are not tested (#104)

Similar to https://github.com/wemake-services/django-modern-rest/issues/93 we have several important public APIs for Endpoint customization: https://github.com/wemake-services/django-modern-rest/blob/9e1a24deb3a65683f991ebd14465b0b20e0c22b1/djangomodernrest/endpoint.py#L53-L58

But, we never test that they can actually be applied. This is a very simple issue with just 2 extra tests with existing examples from https://github.com/wemake-services/django-modern-rest/pull/95

#helpwanted #goodfirst_issue #enhancement

sent via relator
  • 👍 2
Post #147 822
New issue to wemake-services/django-modern-rest by @sobolevn
Write tests for "double validation" problem
(#85)

We need to be sure that double validation does not happen. Ever.
See what "double validation" is: fastapi/fastapi#3021

To be sure, we need to write tests for it.

Tests would be rather easy to write:

• One for @modify
• One for @validate
• One for raw data return
 Also test disabled response validation mode to do 0 validations.

See the attached issue to learn how to make sure that double validation happened.
No matter what - we need to do a 1 or 0 validations.

#django_modern_rest #help_wanted #enhancement #good_first_issue

sent via relator
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →