Custom Requests
AirmoreRequest is a custom PreparedRequest class which handles requesting
to an Airmore server. It is intended to be an abstract class, which is not to
be initialized, but extended. Further examples will be provided.
It overrides the methods of PreparedRequest below:
__init__prepare_methodprepare_url
Initialization
Initialization of AirmoreRequest will take an AirmoreSession instance and
stored in private __session property.
request = AirmoreRequest(session)
Preparing Method
prepare_method method of an AirmoreRequest object will always changes
url property to POST since Airmore server always uses POST method to
communicate with a client. It is also called on super initialization
automatically.
Preparing URL
prepare_url method will prepend base_url property of AirmoreSession
instance, which means:
request.prepare_url("/foo", {})
# will change `request.url` to "http://host:port/foo
request.prepare_url("/foo", {"bar": "baz"})
# will change it to "http://host:port/foo?bar=baz
Extending AirmoreRequest
As told above, AirmoreRequest is to be extended rather than initialized.
If you want to have a custom behavior on an Airmore endpoint, see below:
class ExampleRequest(AirmoreRequest):
def __init__(self, session, foo):
super().__init__(session)
self.prepare_url("/bar")
self.prepare_body(data=None, files=None, json={"foo": foo})
Then, you can pass the instance of your extended class into send method of
an AirmoreSession instance.
request = ExampleRequest(session, foo=True)
response = session.send(request)
# will send a POST request to "http://host:port/bar
# with a JSON body: {"foo": true}
AirmoreRequest has many implementations in pyairmore.services.* so you
will not be likely to do this.