Находки в опенсорсе: Python
983 subscribers
4 photos
142 links
Легкие задачки в опенсорсе из мира Python

Чат: @opensource_findings_chat
Download Telegram
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 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
📝 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
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
🚀 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
😁1