Pymetabuilder

metabuilder

PyMetaBuilder

Introduction

Small framework to create entities and Builders with Metaprogramming features in Python. This project is based on the Ruby implementation made by dlitvakb MetaBuilder

Installation

to install pymetabuilder to it's last stable release, just do:

$ pip install PyMetabuilder

if you want to download another version or the tarball of the last build, go to: https://pypi.python.org/pypi/PyMetabuilder

Creating Builders

Metabuilder objective is to help to create Builders and instances or entities with validations easy and fast.

In order to create a new Builder just define a class extending from MetaBuilder class, and defining an stub class in any place you want. For eg.

from PyMetaBuilder import MetaBuilder

#Stub Class to create instances from
class Kite(object):
    pass

class KiteBuilder(MetaBuilder):
    pass

note

from version 0.2.1 onwards you can define the class model with the method model_by_name, thus you don't have to define a stub class in your code. For ex. calling model_by_name('Kite') instead of model(Kite)

After that just initiate the superclass and start defining the properties you want KiteBuilder to have, for eg.

class KiteBuilder(MetaBuilder):

    def __init__(self):
        MetaBuilder.MetaBuilder.__init__(self)
        self.defineKite()

    def define_kite(self):
        #define the model klass to get instances from
        self.model(Kite)
        self.property("design",one_of=["Indoor","Water Kite","Kythoon"])
        self.property("line_material",type=str)
        self.property("StringLength",type=int)

You can also define a property as a mandatory one, with the required method. In this way, when you set the builder with the respecting properties and try to get a new instance, the framework will check if the properties that you previously set as mandatory were set.

       def define_kite(self):
        #define the model klass to get instances from
        self.model(Kite)
        self.property("StringLength",type=int)
        #code defining properties....
        self.required("design")

Creating instances from a Builder

After you defined a builder and its properties, just set the parameters, if you want at this time and if they're not mandatory and build an instance.

       kiteBuilder=KiteBuilder()
       kiteBuilder.design="Indoor"
       kiteBuilder.StringLength=23

       kite=kiteBuilder.build() #get a Kite instance

When you set a property that you previously defined, it'll validate the value passed, given the fact that you have set it with validators, and will generate the appropriate exception when it fails.

Mantainer

Currently this package is being mantained by @bossiernesto