-
Notifications
You must be signed in to change notification settings - Fork 2
Schemas without decorators #110
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Codecov Report
@@ Coverage Diff @@
## master #110 +/- ##
==========================================
- Coverage 94.88% 94.46% -0.42%
==========================================
Files 40 41 +1
Lines 1779 1663 -116
Branches 275 255 -20
==========================================
- Hits 1688 1571 -117
+ Misses 63 54 -9
- Partials 28 38 +10
Continue to review full report at Codecov.
|
…bthings into simpler-spec
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overhauls how schemas and args are defined in View classes. To end users of the library this will mean changing from:
to
In the back-end, this change has a few key advantages.
Firstly, defining a schema for marshalling responses no longer modifies the original
get(),put()etc methods. Instead, marshalling happens in thedispatch_requestfunction, and so happens at runtime. Likewise, request arguments are handled bydispatch_request, meaning that the originalget(),put()etc methods can be called with Python arguments outside of any request context.Furthermore, previously API spec information was stored in
__apispec__dictionaries on whatever object was decorated. This meant that view functions had this mysterious dunder property, which is bad practice in itself, but also the View class had to then step through each view method, parsing its__apispec__in order to build documentation.Now, the schema, tags, args, title etc are defines as class attributes, with those names (see example above). The View class then uses these attributes to manipulate the request/response at request-time, meaning that we can build documentation just by looking at sensibly named attributes of the View class. We no longer have to insert bizarre dunder attributes into class method objects and such.
One aspect that will still use decorators is the semantic annotations. In this case, the semantic annotation will decorate the entire View class, and automatically apply
schema,semtypeandargsattributes.I think this makes the LabThings Python API much clearer, due to the reduced use of crazy nested decorators, and it's simplified the library code massively.