Pankoff’s magic

pankoff.magic.autoinit(klass, verbose=False)

Auto generates __init__ method for your class based on its validators.

Parameters
  • merge (bool) – in case you have existing __init__ in your class, you can merge them

  • klass (type) – Class to decorate

  • verbose (bool) – In case its True, it’ll print out the generated source for __init__ method, defaults to False

Returns

Same class but with newly created __init__

Raises

RuntimeError – raised in case class already has __init__ defined

 @autoinit(verbose=True)
 class Person:
     name = String()

Prints:

Generated __init__ method for <class '__main__.Person'>
def __init__(self, name):
    self.name = name

You can merge existing __init__ with generated one by using merge=True, e.g:

@autoinit(verbose=True, merge=True)
class Person:
    name = String()

    def __init__(self, surname):
        self.full_name = self.name + " " + surname

Which prints:

Generated __init__ method for <class '__main__.Person'>
def __init__(self, name, *args, **kwargs):
    self.name = name
    user_defined_init(self, *args, **kwargs)

As you can see, you can use self.name straight away.

person = Person(name="Yaroslav", surname=Pankovych)
print(person.full_name)  # Yaroslav Pankovych
class pankoff.magic.Alias(source)

Create and alias for your fields.

Parameters

source (str) – Attribute name to reffer to

>>> class Person:
...     full_person_name = String()
...     name = Alias("full_person_name")
>>> obj = Person("Yaroslav Pankovych")
>>> obj.name
"Yaroslav Pankovych"
class pankoff.magic.MagicMixin

Create MagicMixin by inheriting from it.

See examples: Magic mixins