🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Write a test for custom
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
2. Sync endpoint and
#helpwanted #goodfirst_issue #enhancement
sent via relator
📝 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 way2. Sync endpoint and
handle_error with the same logic#helpwanted #goodfirst_issue #enhancement
sent via relator
🚀 New issue to wemake-services/django-modern-rest by @sobolevn
📝 Create
We have kwargs for
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
#goodfirstissue #help_wanted #enhancement
sent via relator
📝 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#L81And 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
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
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 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
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
If so, we need to raise an error that
#django_modern_rest #help_wanted #enhancement #good_first_issue
sent via relator
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
📝 Validate that
We now support #234 cookies and their definition with
But, we don't have a validation / test for their correct usage, like we do for
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
📝 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
📝 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
Please, add it :)
Note, that
So, this needs to be added with a guard and probably
#goodfirstissue #enhancement #help_wanted
sent via relator
📝 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.11So, this needs to be added with a guard and probably
exec('type MyInt = int')#goodfirstissue #enhancement #help_wanted
sent via relator
😁1