From dd11e7a355f3832cdf15df55681739e36b9dee71 Mon Sep 17 00:00:00 2001 From: Tim Rid <6593626+timrid@users.noreply.github.com> Date: Tue, 15 Dec 2020 15:07:49 +0100 Subject: [PATCH] fixed stubs for Const --- construct-stubs/core.pyi | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/construct-stubs/core.pyi b/construct-stubs/core.pyi index c28cded..dc8e101 100644 --- a/construct-stubs/core.pyi +++ b/construct-stubs/core.pyi @@ -343,34 +343,18 @@ class Renamed(Subconstruct[SubconParsedType, SubconBuildTypes, SubconParsedType, # =============================================================================== # miscellaneous # =============================================================================== - -# class Const(Subconstruct[ParsedType, BuildTypes]): -# @t.overload -# def __init__( -# self: Const[bytes, t.Union[bytes, bytearray, int]], -# value: bytes, -# ) -> None: ... -# @t.overload -# def __init__( -# self, -# value: BuildTypes, -# subcon: Construct[ParsedType, BuildTypes] -# ) -> None: ... - -# Problem: The above implementation work in most cases, but unfortunately not in all. -# This for Example gives an error: -# class Container3(TypedContainer): -# d: Subcon(Const(b"\x00")) -# -# Workaround: We pretend that this class it is a method so that we can use @t.overload. -@t.type_check_only -class _Const(Subconstruct[SubconParsedType, SubconBuildTypes, SubconParsedType, SubconBuildTypes]): ... - -@t.overload -def Const(value: bytes) -> _Const[bytes, t.Union[bytes, bytearray, int]]: ... -@t.overload -def Const(value: SubconBuildTypes, subcon: Construct[SubconParsedType, SubconBuildTypes]) -> _Const[SubconParsedType, SubconBuildTypes]: ... - +class Const(Subconstruct[SubconParsedType, SubconBuildTypes, ParsedType, BuildTypes]): + @t.overload + def __new__( + cls, + value: bytes, + ) -> Const[None, None, bytes, t.Union[bytes, bytearray, int]]: ... + @t.overload + def __new__( + cls, + value: SubconBuildTypes, + subcon: Construct[SubconParsedType, SubconBuildTypes] + ) -> Const[None, None, SubconParsedType, SubconBuildTypes]: ... class Computed(Construct[ValueType, None]): def __init__(self, func: ConstantOrContextLambda[ValueType]) -> None: ...