Skip to main content

Web-Library for Python

Project description

WApi: Library to simplify api development

PyPI version

Libraries used:

Features

  • Routes
  • Serialization
  • Asynchrony
  • Request Params
    • Smart substitution

Installation

You can install the latest version with the command:

pip install whaox-wapi

• Routes

You can create paths as you like, splitting your api-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")

• Serialization

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"

• Asynchrony

You can make the query asynchronous simply by adding an async keyword.

@Route("https://example.com")
class WApi:

  @GET("/person")
  async def person(self): pass
person = await api.person(params={"id": 1})

• Request Params

You can flexibly add parameters to request passing relevant attributes.

@dataclass
class GetPersonRequest:
  id: int
  
@dataclass
class CreatePersonRequest:
  name: str


@Route("https://example.com")
class WApi:

  @POST("/person")
  def create_person(self, body: dict): pass
	
  @Route("/person") 
  @GET("/")
  def person(self, params: GetPersonRequest | dict): pass
api.person(params={"id": 1})
api.create_person(body={"name": "john"})
# or
api.person(params=GetPersonRequest(1))
api.create_person(params=CreatePersonRequest("john"))

• • Smart substitution

The library understands what variables you used during formatting and will not substitute them into the path parameters.

@dataclass
class GetPersonRequest:
    id: int
    preview: bool

@Route("https://example.com")
class WApi:

  @Route("/person")
  @GET("/{id}")
  def person(self, params: GetPersonRequest): pass
person = api.person(params=GetPersonRequest(1, true))
# eq
person = requests.get("https://example.com/person/1?preview=true")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whaox-wapi-1.1.6.tar.gz (7.5 kB view details)

Uploaded Source

File details

Details for the file whaox-wapi-1.1.6.tar.gz.

File metadata

  • Download URL: whaox-wapi-1.1.6.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for whaox-wapi-1.1.6.tar.gz
Algorithm Hash digest
SHA256 7cd368a53c32d1973c3f84bc7dee579de62d5c4cc90edd8478cfd0e2aefa3435
MD5 4a406afc823a1fb91db28ba65dbc243a
BLAKE2b-256 cd7236b1ab74b72858c8ed973db6695742eec7879b3a36be3130066acbb49d28

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page