Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
1,563 changes: 1,563 additions & 0 deletions packages/polywrap-manifest/poetry.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions packages/polywrap-manifest/polywrap_manifest/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .manifest import *
from .deserialize import *
33 changes: 33 additions & 0 deletions packages/polywrap-manifest/polywrap_manifest/deserialize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""
This file was automatically generated by scripts/templates/deserialize.py.jinja2.
DO NOT MODIFY IT BY HAND. Instead, modify scripts/templates/deserialize.py.jinja2,
and run python ./scripts/generate.py to regenerate this file.
"""

from typing import Optional

from polywrap_msgpack import msgpack_decode

from .manifest import *


def deserialize_wrap_manifest(
manifest: bytes, options: Optional[DeserializeManifestOptions] = None
) -> AnyWrapManifest:
decoded_manifest = msgpack_decode(manifest)
if not decoded_manifest.get("version"):
raise ValueError("Expected manifest version to be defined!")

no_validate = options and options.no_validate
manifest_version = WrapManifestVersions(decoded_manifest["version"])
match manifest_version.value:
case "0.1.0":
return (
WrapManifest_0_1.construct(**decoded_manifest)
if no_validate
else WrapManifest_0_1(**decoded_manifest)
)
case "0.1":
return WrapManifest_0_1(**decoded_manifest)
case _:
raise ValueError(f"Invalid wrap manifest version: {manifest_version}")
46 changes: 46 additions & 0 deletions packages/polywrap-manifest/polywrap_manifest/manifest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""
This file was automatically generated by scripts/templates/__init__.py.jinja2.
DO NOT MODIFY IT BY HAND. Instead, modify scripts/templates/__init__.py.jinja2,
and run python ./scripts/generate.py to regenerate this file.
"""

from dataclasses import dataclass
from enum import Enum

from .wrap_0_1 import WrapManifest as WrapManifest_0_1
from .wrap_0_1 import Abi as WrapAbi_0_1_0_1
from .wrap_0_1 import *


@dataclass(slots=True, kw_only=True)
class DeserializeManifestOptions:
no_validate: Optional[bool] = None


@dataclass(slots=True, kw_only=True)
class serializeManifestOptions:
no_validate: Optional[bool] = None


class WrapManifestVersions(Enum):
VERSION_0_1_0 = "0.1.0"
VERSION_0_1 = "0.1"


class WrapManifestAbiVersions(Enum):
VERSION_0_1 = "0.1"


class WrapAbiVersions(Enum):
VERSION_0_1 = "0.1"


AnyWrapManifest = WrapManifest_0_1
AnyWrapAbi = WrapAbi_0_1_0_1


WrapManifest = WrapManifest_0_1
WrapAbi = WrapAbi_0_1_0_1

latest_wrap_manifest_version = "0.1"
latest_wrap_abi_version = "0.1"
238 changes: 238 additions & 0 deletions packages/polywrap-manifest/polywrap_manifest/wrap_0_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
# generated by datamodel-codegen:
# filename: https://raw.githubusercontent.com/polywrap/wrap/master/manifest/wrap.info/0.1.json
# timestamp: 2022-10-22T13:35:25+00:00

from __future__ import annotations

from enum import Enum
from typing import List, Optional

from pydantic import BaseModel, Extra, Field


class Version(Enum):
"""
WRAP Standard Version
"""

VERSION_0_1_0 = '0.1.0'
VERSION_0_1 = '0.1'


class Type(Enum):
"""
Wrapper Package Type
"""

WASM = 'wasm'
INTERFACE = 'interface'
PLUGIN = 'plugin'


class Env(BaseModel):
required: Optional[bool] = None


class GetImplementations(BaseModel):
enabled: bool


class CapabilityDefinition(BaseModel):
get_implementations: Optional[GetImplementations] = Field(
None, alias='getImplementations'
)


class ImportedDefinition(BaseModel):
uri: str
namespace: str
native_type: str = Field(..., alias='nativeType')


class WithKind(BaseModel):
kind: float


class WithComment(BaseModel):
comment: Optional[str] = None


class GenericDefinition(WithKind):
type: str
name: Optional[str] = None
required: Optional[bool] = None


class ScalarType(Enum):
U_INT = 'UInt'
U_INT8 = 'UInt8'
U_INT16 = 'UInt16'
U_INT32 = 'UInt32'
INT = 'Int'
INT8 = 'Int8'
INT16 = 'Int16'
INT32 = 'Int32'
STRING = 'String'
BOOLEAN = 'Boolean'
BYTES = 'Bytes'
BIG_INT = 'BigInt'
BIG_NUMBER = 'BigNumber'
JSON = 'JSON'


class ScalarDefinition(GenericDefinition):
type: ScalarType


class MapKeyType(Enum):
U_INT = 'UInt'
U_INT8 = 'UInt8'
U_INT16 = 'UInt16'
U_INT32 = 'UInt32'
INT = 'Int'
INT8 = 'Int8'
INT16 = 'Int16'
INT32 = 'Int32'
STRING = 'String'


class ObjectRef(GenericDefinition):
pass


class EnumRef(GenericDefinition):
pass


class UnresolvedObjectOrEnumRef(GenericDefinition):
pass


class ImportedModuleRef(BaseModel):
type: Optional[str] = None


class InterfaceImplementedDefinition(GenericDefinition):
pass


class EnumDefinition(GenericDefinition, WithComment):
constants: Optional[List[str]] = None


class InterfaceDefinition(GenericDefinition, ImportedDefinition):
capabilities: Optional[CapabilityDefinition] = None


class ImportedEnumDefinition(EnumDefinition, ImportedDefinition):
pass


class WrapManifest(BaseModel):
class Config:
extra = Extra.forbid

version: Version = Field(..., description='WRAP Standard Version')
type: Type = Field(..., description='Wrapper Package Type')
name: str = Field(..., description='Wrapper Name', regex='^[a-zA-Z0-9\\-\\_]+$')
abi: Abi = Field(..., description='Information of modules')


class Abi(BaseModel):
version: Optional[str] = Field(None, description='ABI Version')
object_types: Optional[List[ObjectDefinition]] = Field(None, alias='objectTypes')
module_type: Optional[ModuleDefinition] = Field(None, alias='moduleType')
enum_types: Optional[List[EnumDefinition]] = Field(None, alias='enumTypes')
interface_types: Optional[List[InterfaceDefinition]] = Field(
None, alias='interfaceTypes'
)
imported_object_types: Optional[List[ImportedObjectDefinition]] = Field(
None, alias='importedObjectTypes'
)
imported_module_types: Optional[List[ImportedModuleDefinition]] = Field(
None, alias='importedModuleTypes'
)
imported_enum_types: Optional[List[ImportedEnumDefinition]] = Field(
None, alias='importedEnumTypes'
)
imported_env_types: Optional[List[ImportedEnvDefinition]] = Field(
None, alias='importedEnvTypes'
)
env_type: Optional[EnvDefinition] = Field(None, alias='envType')


class ObjectDefinition(GenericDefinition, WithComment):
properties: Optional[List[PropertyDefinition]] = None
interfaces: Optional[List[InterfaceImplementedDefinition]] = None


class ModuleDefinition(GenericDefinition, WithComment):
methods: Optional[List[MethodDefinition]] = None
imports: Optional[List[ImportedModuleRef]] = None
interfaces: Optional[List[InterfaceImplementedDefinition]] = None


class MethodDefinition(GenericDefinition, WithComment):
arguments: Optional[List[PropertyDefinition]] = None
env: Optional[Env] = None
return_: Optional[PropertyDefinition] = Field(None, alias='return')


class ImportedModuleDefinition(GenericDefinition, ImportedDefinition, WithComment):
methods: Optional[List[MethodDefinition]] = None
is_interface: Optional[bool] = Field(None, alias='isInterface')


class AnyDefinition(GenericDefinition):
array: Optional[ArrayDefinition] = None
scalar: Optional[ScalarDefinition] = None
map: Optional[MapDefinition] = None
object: Optional[ObjectRef] = None
enum: Optional[EnumRef] = None
unresolved_object_or_enum: Optional[UnresolvedObjectOrEnumRef] = Field(
None, alias='unresolvedObjectOrEnum'
)


class EnvDefinition(ObjectDefinition):
pass


class ImportedObjectDefinition(ObjectDefinition, ImportedDefinition, WithComment):
pass


class PropertyDefinition(WithComment, AnyDefinition):
pass


class ArrayDefinition(AnyDefinition):
item: Optional[GenericDefinition] = None


class MapKeyDefinition(AnyDefinition):
type: Optional[MapKeyType] = None


class MapDefinition(AnyDefinition, WithComment):
key: Optional[MapKeyDefinition] = None
value: Optional[GenericDefinition] = None


class ImportedEnvDefinition(ImportedObjectDefinition):
pass


WrapManifest.update_forward_refs()
Abi.update_forward_refs()
ObjectDefinition.update_forward_refs()
ModuleDefinition.update_forward_refs()
MethodDefinition.update_forward_refs()
AnyDefinition.update_forward_refs()
EnvDefinition.update_forward_refs()
ImportedObjectDefinition.update_forward_refs()
PropertyDefinition.update_forward_refs()
ArrayDefinition.update_forward_refs()
MapKeyDefinition.update_forward_refs()
MapDefinition.update_forward_refs()
ImportedEnvDefinition.update_forward_refs()
58 changes: 58 additions & 0 deletions packages/polywrap-manifest/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "polywrap-manifest"
version = "0.1.0"
description = "WRAP manifest"
authors = ["Niraj <niraj@polywrap.io>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.10"
polywrap-msgpack = { path = "../polywrap-msgpack", develop = true }

[tool.poetry.dev-dependencies]
pytest = "^7.1.2"
pytest-asyncio = "^0.19.0"
pylint = "^2.15.4"
black = "^22.10.0"
bandit = { version = "^1.7.4", extras = ["toml"]}
tox = "^3.26.0"
tox-poetry = "^0.4.1"
isort = "^5.10.1"
pyright = "^1.1.275"
pydocstyle = "^6.1.1"
improved-datamodel-codegen = {version = "^1.0.0", extras = ["http"]}
Jinja2 = "^3.1.2"

[tool.bandit]
exclude_dirs = ["tests"]

[tool.black]
target-version = ["py310"]

[tool.pyright]
# default

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = [
"tests"
]

[tool.pylint]
disable = [
"too-many-return-statements",
]
ignore = [
"tests/"
]

[tool.isort]
profile = "black"
multi_line_output = 3

[tool.pydocstyle]
# default
Loading