https://github.com/mon4ter/fashionable
Decorate your project with some fashionable supermodels
https://github.com/mon4ter/fashionable
Last synced: over 1 year ago
JSON representation
Decorate your project with some fashionable supermodels
- Host: GitHub
- URL: https://github.com/mon4ter/fashionable
- Owner: mon4ter
- License: mit
- Created: 2018-09-16T12:32:54.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-11-25T19:28:32.000Z (over 4 years ago)
- Last Synced: 2025-02-21T15:51:46.443Z (over 1 year ago)
- Language: Python
- Size: 107 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# fashionable
[](https://pypi.org/project/fashionable)
[](https://pypi.org/project/fashionable)
[](https://travis-ci.org/mon4ter/fashionable)
[](https://codecov.io/gh/mon4ter/fashionable)
Decorate your project with some fashionable supermodels.
### Decorator example
```python
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
```python
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
```python
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/')
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/')
async def project_update(request, id_):
project = await Project.get(id_, fresh=True)
await project.update(**request.json)
return json(project)
@app.delete('/project/')
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)
```