Skip to content
/ py-fame Public

A little language for schema-enforced models.

Notifications You must be signed in to change notification settings

akuhn/py-fame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A little language for schema-enforced models

Fame is a framework for metamodelling in Python.

  • Entities are described by models
  • Models are described by metamodels
  • Models have fields, derived fields and constraints
  • Entities can have custom fields
  • Entities can be created even if data is invalid
  • There are functions to validate and get error messages
  • Validation checks presence and type of fields
  • Validation checks all constraints
  • Derived fields are memoized

Example

class Experiment(Model):

    @schema
    def metamodel(self, m):
        m.field('name', str)
        m.field('subject', options(
            'user',
            'visitor',
            'email',
            'listing',
            'market'
        ))
        m.field('treatments', array(str))
        m.field('percent_exposed', int, default=100)
        m.field('design', nullable(regexp('^https?')))

    @derived_field
    def is_miscellanous(self):
        return self.subject not in ['user', 'visitor']

    @constraint("expected percent_exposed to not exceed 100, got {}")
    def constraint(self):
        if self.percent_exposed > 100:
            return self.percent_exposed

Conventions

  • Define metamodel function first
  • Then define derived field functions
  • Then define all the constraint functions
  • Constraint functions are all named "constraint", that is intentional

Installation

To install this package, run

pip install fame

Contributing

Bug reports and pull requests are welcome on github at, https://github.com/akuhn/py-fame

About

A little language for schema-enforced models.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages