Skip to content

Commit 73dda47

Browse files
author
Vlad
committed
update README.md
1 parent 826f290 commit 73dda47

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@ from marshmallow import Schema, fields, ValidationError, post_load
2222
from starlette.applications import Starlette
2323
from starlette.datastructures import UploadFile
2424
from starlette.responses import JSONResponse
25+
from apispec.ext.marshmallow import MarshmallowPlugin
26+
from apispec import APISpec
2527

2628
from dataclasses import dataclass
29+
from datetime import datetime
2730

28-
from star_resty import Method, Operation, endpoint, json_schema, json_payload, form_payload, query, setup_spec
31+
from star_resty import Method, Operation, endpoint, json_schema, json_payload, upload, query, setup_spec, form_payload
2932
from typing import Optional
3033

3134
class EchoInput(Schema):
@@ -37,6 +40,7 @@ class JsonPayloadSchema(Schema):
3740
a = fields.Int(required=True)
3841
s = fields.String()
3942

43+
ma_plugin = MarshmallowPlugin()
4044

4145
# Json Payload (by dataclass)
4246
@dataclass
@@ -54,15 +58,9 @@ class JsonPayloadDataclass(Schema):
5458

5559

5660
# Form Payload
57-
class FormFile(fields.Field):
58-
def _validate(self, value):
59-
if not isinstance(value, UploadFile):
60-
raise ValidationError('Not a file')
61-
62-
6361
class FormPayload(Schema):
6462
id = fields.Int(required=True)
65-
file = FormFile()
63+
file_dt = fields.DateTime()
6664

6765

6866
app = Starlette(debug=True)
@@ -105,10 +103,15 @@ class PostDataclass(Method):
105103
class PostForm(Method):
106104
meta = Operation(tag='default', description='post form')
107105

108-
async def execute(self, form_data: form_payload(FormPayload)):
109-
file_name = form_data.get('file').filename
106+
async def execute(self, form_data: form_payload(FormPayload),
107+
files_reqired: upload('selfie', 'doc', required=True),
108+
files_optional: upload('file1', 'file2', 'file3')):
109+
files = {}
110+
for file in files_reqired + files_optional:
111+
body = await file.read()
112+
files[file.filename] = f"{body.hex()[:10]}..."
110113
id = form_data.get('id')
111-
return {'message': f"file {file_name} with id {id} received"}
114+
return {'message': f"files received (id: {id})", "files": files}
112115

113116

114117
if __name__ == '__main__':
@@ -118,4 +121,4 @@ if __name__ == '__main__':
118121
uvicorn.run(app, port=8080)
119122
```
120123

121-
Open [http://localhost:8080/apidocs.json](http://localhost:8080/apidocs.json) to view generated openapi schema.
124+
Open [http://localhost:8080/apidocs.json](http://localhost:8080/apidocs.json) to view generated openapi schema.

0 commit comments

Comments
 (0)