Skip to content

Commit

Permalink
feat(stubs): accept generic package type in stub manifest
Browse files Browse the repository at this point in the history
Signed-off-by: Braden Mars <bradenmars@bradenmars.me>
  • Loading branch information
BradenM committed Dec 11, 2022
1 parent dc9d958 commit 9d17331
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 10 deletions.
3 changes: 2 additions & 1 deletion micropy/stubs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from . import source
from .manifest import StubsManifest
from .package import StubPackage
from .package import AnyStubPackage, StubPackage
from .repo import StubRepository
from .repo_package import StubRepositoryPackage
from .repositories import MicropyStubPackage, MicropythonStubsManifest, MicropythonStubsPackage
Expand All @@ -20,6 +20,7 @@
"source",
"StubsManifest",
"StubPackage",
"AnyStubPackage",
"StubRepository",
"MicropyStubPackage",
"MicropythonStubsPackage",
Expand Down
12 changes: 8 additions & 4 deletions micropy/stubs/manifest.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
from __future__ import annotations

import abc
from typing import Generic

from micropy.stubs.package import StubPackage
from micropy.stubs.package import AnyStubPackage, StubPackage
from micropy.stubs.repository_info import RepositoryInfo
from pydantic import BaseModel
from pydantic import Field
from pydantic.generics import GenericModel
from typing_extensions import Annotated


class StubsManifest(BaseModel, abc.ABC):
class StubsManifest(GenericModel, Generic[AnyStubPackage], abc.ABC):

class Config:
frozen = True

repository: RepositoryInfo
packages: frozenset[StubPackage]
packages: Annotated[frozenset[AnyStubPackage], Field(repr=False)]

@abc.abstractmethod
def resolve_package_url(self, package: StubPackage) -> str:
Expand Down
7 changes: 7 additions & 0 deletions micropy/stubs/package.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
from __future__ import annotations

from typing import TypeVar

from pydantic import BaseModel


class StubPackage(BaseModel):

class Config:
frozen = True
allow_population_by_field_name = True

name: str
version: str

@property
def package_name(self) -> str:
return self.name


AnyStubPackage = TypeVar("AnyStubPackage", bound=StubPackage)
2 changes: 1 addition & 1 deletion micropy/stubs/repo_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

@attrs.frozen
class StubRepositoryPackage:
manifest: StubsManifest
manifest: StubsManifest[StubPackage]
package: StubPackage

@property
Expand Down
3 changes: 1 addition & 2 deletions micropy/stubs/repositories/micropy.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ class MicropyStubPackage(StubPackage):
version: Annotated[str, Field(alias="sha256sum")]


class MicropyStubsManifest(StubsManifest):
class MicropyStubsManifest(StubsManifest[MicropyStubPackage]):
location: str
path: str
packages: frozenset[MicropyStubPackage]

@root_validator(pre=True)
def check(cls, values: dict):
Expand Down
4 changes: 2 additions & 2 deletions micropy/stubs/repositories/micropython.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ class MicropythonStubsPackage(StubPackage):
version: Annotated[str, Field(alias="pkg_version")]


class MicropythonStubsManifest(StubsManifest):

packages: frozenset[MicropythonStubsPackage]


class MicropythonStubsManifest(StubsManifest[MicropythonStubsPackage]):
@validator("packages", pre=True)
def _get_packages(cls, v: dict[str, dict]):
data = v["data"].values()
Expand Down

0 comments on commit 9d17331

Please sign in to comment.