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.5.tar.gz (7.4 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: whaox-wapi-1.1.5.tar.gz
  • Upload date:
  • Size: 7.4 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.5.tar.gz
Algorithm Hash digest
SHA256 a0ff7940e16894cbdfc4fc6ccb45fda24b8a56dc2aac70aadbb7d1bcd7da77af
MD5 4cf6ee21843a1592473936fe307a1b3e
BLAKE2b-256 8b0ce14bad01b7e623fdc8a9cb22ca27b14de9f888d530cf8bf486795398469f

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