Decorate your project with some fashionable supermodels
Project description
fashionable
Decorate your project with some fashionable supermodels.
Decorator example
from typing import Set
from fashionable import fashionable
@fashionable
def bits_to_binary_like(bits: Set[int], length: int = 8) -> int:
bits.add(0)
return ''.join(str(int(b in bits)) for b in range(length, 0, -1))
bits_to_binary_like('334455') # 11100
Model example
from typing import List, Optional
from fashionable import Attribute, Model
class Project(Model):
id = Attribute(str, max=32)
name = Attribute(str)
organization = Attribute(Optional[str])
domain = Attribute(Optional[str])
links = Attribute(Optional[List[str]])
project = Project(1, 'Test')
Supermodel example with Sanic
from typing import List, Optional
from fashionable import Attribute, Supermodel
from sanic import Sanic
from sanic.response import json, HTTPResponse
app = Sanic()
app.db = ...
class Project(Supermodel):
_ttl = 300
id = Attribute(str, max=32)
name = Attribute(str)
organization = Attribute(Optional[str])
domain = Attribute(Optional[str])
links = Attribute(Optional[List[str]])
@staticmethod
async def _create(raw: dict):
await app.db.project_create(raw)
@staticmethod
async def _get(id_: str) -> Optional[dict]:
return await app.db.project_get(id_)
@staticmethod
async def _update(id_: str, raw: dict):
await app.db.project_update(id_, raw)
@staticmethod
async def _delete(id_: str):
await app.db.project_delete(id_)
@app.get('/project/<id_>')
async def project_get(request, id_):
project = await Project.get(id_)
return json(project)
@app.post('/project')
async def project_create(request):
project = await Project.create(**request.json)
return json(
project,
status=201,
headers={'Location': '/project/' + project.id},
)
@app.put('/project/<id_>')
async def project_update(request, id_):
project = await Project.get(id_, fresh=True)
await project.update(**request.json)
return json(project)
@app.delete('/project/<id_>')
async def project_delete(request, id_):
project = await Project.get(id_, fresh=True)
await project.delete()
return HTTPResponse(status=204)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fashionable-0.11.0.tar.gz
(9.8 kB
view hashes)
Built Distribution
Close
Hashes for fashionable-0.11.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53917e48351633c31aa7eca99885108036a7ad22586837a6fc7e8f30ecda0319 |
|
MD5 | 25016b31c8f922ad15f72f06dd26b440 |
|
BLAKE2b-256 | 5efa5e0e9bb47d158888600efe29f4ed3cd1b362afb9d614794d331d36ea82d0 |