- Routes
- Serialization
- Params
- Auto-Complete
- Unpaking
You can install the latest version with the command:
pip install whaox-wapi
You can create paths as you like, splitting your client into modules
@Route("https://example.com")
class WApi:
service = Service()
@Route("/wapi")
class Service:
@Route("/path")
@GET("/")
def get(self): pass
@POST("/path")
def post(self): pass
wapi = WApi()
wapi.service.get()
# eq
requests.get("https://example.com/wapi/path/")
The library deserializes the received data according to the type that you specify in the _T parameter of the decorator.
NOTE: The specified type must be json serializable - these are the base types and classes marked with the @dataclass annotation
@dataclass
class Person:
name: str
@Route("https://example.com")
class WApi:
@GET("/person", _T=Person)
def person(self) -> Person: pass
@GET("/people", _T=List[Person])
def people(self) -> List[Person]: pass
api = WApi()
person = api.person()
print(person.name)
>>> "John"
You can flexibly add parameters to the path using {}. The library uses formatting from the standard library.
@Route("https://example.com")
class WApi:
@GET("/path?name={name}")
def route(self, name: str): pass
If you want the parameters to be set automatically, you can switch the auto flag to True.
NOTE: if auto=True, you must pass named parameters so that they are added to the path.
@Route("https://example.com")
class WApi:
@GET("/path", auto=True) # eq /path?name={name}
def route(self, name: str): pass
In order not to pass a lot of parameters, you can pass one by calling it body, it will automatically decompose into parameters, to do this, set the unpack flag to True.
NOTE: Nested non-standard type parameters are not decomposed.
@dataclass
class Person:
name: str
age: int
@Route("https://example.com")
class WApi:
@GET("/path", auto=True, unpack=True) # eq /path?name={name}&age={age}
def route(self, body: Person): pass