+ All Categories
Home > Documents > PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools...

PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools...

Date post: 26-Jun-2020
Category:
Upload: others
View: 13 times
Download: 0 times
Share this document with a friend
23
PySynthetic Documentation Release 0.5.0 Younes JAAIDI November 02, 2016
Transcript
Page 1: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic DocumentationRelease 0.5.0

Younes JAAIDI

November 02, 2016

Page 2: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,
Page 3: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

Contents

1 Resources 3

2 Installation 5

3 Examples 73.1 Synthetic properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 Synthetic accessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Advanced usage 114.1 Override synthesized member’s accessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Override synthesized property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.3 Override synthesized constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5 Module documentation 135.1 Underscore notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2 CamelCase notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6 Indices and tables 17

i

Page 4: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

ii

Page 5: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”.

For instance, one can add properties and accessors (getters/setters) to a class with only one line of code (using re-spectively synthesize_property and synthesize_member decorators), thus making the code more than5 times shorter (see examples ). One can even avoid the laborious task of members initialization by using thesynthesize_constructor decorator that takes care of writing the __init__ method.

PySynthetic is also useful for applying strict type checking with no pain just by using the decorators’ contractargument (see PyContracts ).

Help and ideas are appreciated! Thank you!

Contents 1

Page 6: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

2 Contents

Page 8: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

4 Chapter 1. Resources

Page 9: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

CHAPTER 2

Installation

pip install pysynthetic

Or simply from the tarball or source code if you are not using pip.

python setup.py install

5

Page 10: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

6 Chapter 2. Installation

Page 11: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

CHAPTER 3

Examples

3.1 Synthetic properties

With PySynthetic, the following code (8 lines)...

from synthetic import synthesize_constructor, synthesize_property

@synthesize_property('a', contract = int)@synthesize_property('b', contract = list)@synthesize_property('c', default = "", contract = str, read_only = True)@synthesize_constructor()class ShortAndClean(object):

pass

... replaces this (43 lines):

from contracts import contract

class ThisHurtsMyKeyboard(object):

@contractdef __init__(self, a, b, c = ""):

""":type a: int:type b: list:type c: str

"""self._a = aself._b = bself._c = c

@propertydef a(self):

return self._a

@a.setter@contractdef a(self, value):

""":type value: int

"""self._a = value

7

Page 12: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

@propertydef b(self):

return self._b

@b.setter@contractdef b(self, value):

""":type value: list

"""self._b = value

@propertydef c(self):

return self._c

3.2 Synthetic accessors

But, if you are more into accessors than properties, you can use synthesize_member decorator instead.

This way, the following code (8 lines)...

from synthetic import synthesize_constructor, synthesize_member

@synthesize_member('a', contract = int)@synthesize_member('b', contract = list)@synthesize_member('c', default = "", contract = str, read_only = True)@synthesize_constructor()class ShortAndClean(object):

pass

...will replace this (37 lines):

from contracts import contract

class ThisHurtsMyKeyboard(object):

@contractdef __init__(self, a, b, c = ""):

""":type a: int:type b: list:type c: str

"""self._a = aself._b = bself._c = c

def a(self):return self._a

@contractdef set_a(self, value):

""":type value: int

"""self._a = value

8 Chapter 3. Examples

Page 13: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

def b(self):return self._b

@contractdef set_b(self, value):

""":type value: list

"""self._b = value

def c(self):return self._c

3.2. Synthetic accessors 9

Page 14: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

10 Chapter 3. Examples

Page 15: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

CHAPTER 4

Advanced usage

4.1 Override synthesized member’s accessors

One can override the synthesized member’s accessors by simply explicitly writing the methods.

4.2 Override synthesized property

One can override the synthesized property by simply explicitly writing the properties.

Remark: For the moment, it’s impossible to override the property’s setter without overriding the getter.

4.3 Override synthesized constructor

One can use synthesized constructors to initialize members and properties values and still override it to implementsome additional processing.

Example:

@synthesize_constructor()@synthesize_property('value')class Double:

def __init__(self):self._value *= 2

print(Double(10).value)

Displays

20

The custom constructor can consume extra arguments (not synthesized members or properties).

For more examples, see product’s unit tests.

11

Page 16: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

12 Chapter 4. Advanced usage

Page 17: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

CHAPTER 5

Module documentation

5.1 Underscore notation

synthetic.naming_convention(naming_convention)When applied to a class, this decorator will override the underscore naming convention of all (previous andfollowing) synthesizeMember() calls on the class to naming_convention.

Parameters naming_convention (INamingConvention) – The new naming convention.

synthetic.synthesize_constructor()This class decorator will override the class’s constructor by making it implicitly consume values for synthesizedmembers and properties.

synthetic.synthesize_member(member_name, default=None, contract=None,read_only=False, getter_name=None, setter_name=None, pri-vate_member_name=None)

When applied to a class, this decorator adds getter/setter methods to it and overrides the constructorin order to set the default value of the member. By default, the getter will be named member_name.(Ex.: member_name = ’member’ => instance.member())

By default, the setter will be named member_name with ‘set_’ prepended it to it. (Ex.:member_name = ’member’ => instance.set_member(...))

By default, the private attribute containing the member’s value will be named member_name with‘_’ prepended to it.

Naming convention can be overridden with a custom one using naming_convention decorator.

raises DuplicateMemberNameError when two synthetic members have the samename.

Parameters

• read_only (bool) – If set to True, the setter will not be added to the class.

• default (*) – Member’s default value.

• getter_name (str|None) – Custom getter name. This can be useful when the memberis a boolean. (Ex.: is_alive)

• contract (*) – Type constraint. See PyContracts

• setter_name (str|None) – Custom setter name.

• member_name (str) – Name of the member to synthesize.

13

Page 18: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

• private_member_name (str|None) – Custom name for the private attribute that con-tains the member’s value.

synthetic.synthesize_property(property_name, default=None, contract=None, read_only=False,private_member_name=None)

When applied to a class, this decorator adds a property to it and overrides the constructor in order toset the default value of the property.

IMPORTANT In order for this to work on python 2, you must use new objects that is tosay that the class must inherit from object.

By default, the private attribute containing the property’s value will be named property_namewith ‘_’ prepended to it.

Naming convention can be overridden with a custom one using naming_convention decorator.

raises DuplicateMemberNameError when two synthetic members have the samename.

raises InvalidPropertyOverrideError when there’s already a member with thatname and which is not a property.

Parameters

• default (*) – Property’s default value.

• read_only (bool) – If set to True, the property will not a have a setter.

• private_member_name (str|None) – Custom name for the private attribute that con-tains the property’s value.

• contract (*) – Type constraint. See PyContracts

• property_name (str) – Name of the property to synthesize.

5.2 CamelCase notation

Sorry Guido, but I like CamelCase.

synthetic.namingConvention(namingConvention)When applied to a class, this decorator will override the CamelCase naming convention of all (previous andfollowing) synthesizeMember() calls on the class to namingConvention.

Parameters namingConvention (INamingConvention) – The new naming convention.

synthetic.synthesizeConstructor()This class decorator will override the class’s constructor by making it implicitly consume values for synthesizedmembers and properties.

synthetic.synthesizeMember(memberName, default=None, contract=None, readOnly=False, getter-Name=None, setterName=None, privateMemberName=None)

When applied to a class, this decorator adds getter/setter methods to it and overrides the constructorin order to set the default value of the member. By default, the getter will be named memberName.(Ex.: memberName = ’member’ => instance.member())

By default, the setter will be named memberNamewith the first letter capitalized and ‘set’ prependedit to it. (Ex.: memberName = "member" => instance.setMember(...))

By default, the private attribute containing the member’s value will be named memberName with‘_’ prepended to it.

14 Chapter 5. Module documentation

Page 19: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

Naming convention can be overridden with a custom one using namingConvention decorator.

raises DuplicateMemberNameError when two synthetic members have the samename.

Parameters

• privateMemberName (str|None) – Custom name for the private attribute that con-tains the member’s value.

• default (*) – Member’s default value.

• memberName (str) – Name of the member to synthesize.

• contract (*) – Type constraint. See PyContracts

• readOnly (bool) – If set to True, the setter will not be added to the class.

• setterName (str|None) – Custom setter name.

• getterName (str|None) – Custom getter name. This can be useful when the memberis a boolean. (Ex.: isAlive)

synthetic.synthesizeProperty(propertyName, default=None, contract=None, readOnly=False,privateMemberName=None)

When applied to a class, this decorator adds a property to it and overrides the constructor in order toset the default value of the property.

IMPORTANT In order for this to work on python 2, you must use new objects that is tosay that the class must inherit from object.

By default, the private attribute containing the property’s value will be named propertyName with‘_’ prepended to it.

Naming convention can be overridden with a custom one using namingConvention decorator.

raises DuplicateMemberNameError when two synthetic members have the samename.

raises InvalidPropertyOverrideError when there’s already a member with thatname and which is not a property.

Parameters

• default (*) – Property’s default value.

• propertyName (str) – Name of the property to synthesize.

• readOnly (bool) – If set to True, the property will not a have a setter.

• contract (*) – Type constraint. See PyContracts

• privateMemberName (str|None) – Custom name for the private attribute that con-tains the property’s value.

5.2. CamelCase notation 15

Page 20: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

16 Chapter 5. Module documentation

Page 21: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

CHAPTER 6

Indices and tables

• genindex

• modindex

• search

17

Page 22: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

PySynthetic Documentation, Release 0.5.0

18 Chapter 6. Indices and tables

Page 23: PySynthetic Documentation · PySynthetic Documentation, Release 0.5.0 PySynthetic is a set of tools that aims to make writing Python classes shorter and “cleaner”. For instance,

Index

Nnaming_convention() (in module synthetic), 13namingConvention() (in module synthetic), 14

Ssynthesize_constructor() (in module synthetic), 13synthesize_member() (in module synthetic), 13synthesize_property() (in module synthetic), 14synthesizeConstructor() (in module synthetic), 14synthesizeMember() (in module synthetic), 14synthesizeProperty() (in module synthetic), 15

19


Recommended