Spaces:
Runtime error
Runtime error
File size: 2,139 Bytes
b115d50 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
from __future__ import annotations
import json
from typing import Any, Dict, Type
from pydantic import BaseModel, Field
from steamship.base.client import Client
from steamship.base.model import CamelModel
from steamship.base.request import Request
class CreatePackageVersionRequest(Request):
package_id: str = None
handle: str = None
type: str = "file"
hosting_handler: str = None
# Note: this is a Dict[str, Any] but should be transmitted to the Engine as a JSON string
config_template: str = None
class PackageVersion(CamelModel):
client: Client = Field(None, exclude=True)
id: str = None
package_id: str = None
handle: str = None
config_template: Dict[str, Any] = None
@classmethod
def parse_obj(cls: Type[BaseModel], obj: Any) -> BaseModel:
# TODO (enias): This needs to be solved at the engine side
obj = obj["packageVersion"] if "packageVersion" in obj else obj
return super().parse_obj(obj)
@staticmethod
def create(
client: Client,
package_id: str = None,
handle: str = None,
filename: str = None,
filebytes: bytes = None,
config_template: Dict[str, Any] = None,
hosting_handler: str = None,
) -> PackageVersion:
if filename is None and filebytes is None:
raise Exception("Either filename or filebytes must be provided.")
if filename is not None and filebytes is not None:
raise Exception("Only either filename or filebytes should be provided.")
if filename is not None:
with open(filename, "rb") as f:
filebytes = f.read()
req = CreatePackageVersionRequest(
handle=handle,
package_id=package_id,
config_template=json.dumps(config_template or {}),
hosting_handler=hosting_handler,
)
task = client.post(
"package/version/create",
payload=req,
file=("package.zip", filebytes, "multipart/form-data"),
expect=PackageVersion,
)
task.wait()
return task.output
|