Giter VIP home page Giter VIP logo

ctor's Issues

Error while loading Optional[Dict[str, Any]]

from typing import Optional, Dict, Any

import ctor


class Foo:

    def __init__(self, foo: Optional[Dict[str, Any]]):
        self.foo = foo


ctor.load(Foo, {"foo": None})

expected:

Foo(foo=None)

actual:

AttributeError: 'NoneType' object has no attribute 'items'

mypy --strict fails for DiscriminatedConverterFactory __init__

code:

from typing import Dict, Type

import ctor

class Base:
    pass

class A(Base):
    pass


class B(Base):
    pass


my_type_map: Dict[str, Type[Base]] = {
    "a": A,
    "b": B
}


ctor.DiscriminatedConverterFactory(
    my_type_map, ctor.ObjectConverterFactory()
)

mypy logs:

/Users/14713703/Library/Application Support/JetBrains/PyCharm2021.3/scratches/test.py:23: error: Argument 1 to "DiscriminatedConverterFactory" has incompatible type "Dict[str, Type[Base]]"; expected "Dict[str, Union[Type[Any], Callable[..., Any]]]"  [arg-type]
/Users/14713703/Library/Application Support/JetBrains/PyCharm2021.3/scratches/test.py:23: note: "Dict" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
/Users/14713703/Library/Application Support/JetBrains/PyCharm2021.3/scratches/test.py:23: note: Consider using "Mapping" instead, which is covariant in the value type
Found 1 error in 1 file (checked 1 source file)

ctor.dump of Union is not working correctly

import ctor
from dataclasses import dataclass

@dataclass
class A:
    a: str


@dataclass
class B:
    b: int


@dataclass
class Foo:
    item: Union[A, B]


foo = Foo(item=B(1))


print(ctor.dump(foo))

# expected: {'item': {'b': 1}}
# actual: {'item': {}}

Dumping union with list raises RecursionError

from typing import Optional, List
from dataclasses import dataclass

import ctor


@dataclass
class Foo:
    foo: str


@dataclass
class Bar:
    bar: str


@dataclass
class ListsAggregate:
    first: Optional[List[Foo]] = None
    second: Optional[List[Bar]] = None


list_aggregate = ListsAggregate(
    first=[Foo("value")],
    second=[Bar("value")]
)

ctor.dump(list_aggregate)

raises RecursionError: maximum recursion depth exceeded while calling a Python object

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.