Skip to content

intellimath/pyaxon

Repository files navigation

PYAXON

pyaxon is an MIT Licensed python library for AXON. AXON is eXtended Object Notation. It's a simple text based format for interchanging objects, documents and data. It tries to combine the best of JSON, XML and YAML.

links

Installation

pyaxon runs under Python 2.7, 3.3, 3.4 and 3.5

It can be installed via pip:

pip install pyaxon

It can be installed from sources:

python setup.py install

Quick start

First import axon module:

>>> import axon

Load and dump lists, dicts, tuples:

>>> from decimal import Decimal
>>> from datetime import datetime, time, date
>>> text = axon.dumps([['abc абв', 1, 3.14, True],
[datetime.now(), Decimal('3.14')]])
>>> print(text)
["abc абв" 1 3.14 true]
[^2015-05-12T13:08:37.078189 3.14D]

>>> vals = [{'id':1, 'nickname':'nick', 'time':time(12, 31, 34), 'text':'hello!'},
{'id':2, 'nickname':'mark', 'time':time(12, 32, 3), 'text':'hi!'}]
>>> text = axon.dumps(vals)
>>> print(text)
{id:1 nickname:"nick" text:"hello!" time:^12:31:34}
{id:2 nickname:"mark" text:"hi!" time:^12:32:03}
>>> text = axon.dumps(vals, pretty=1)
>>> print(text)
{ id: 1
  nickname: "nick"
  text: "hello!"
  time: ^12:31:34}
{ id: 2
  nickname: "mark"
  text: "hi!"
  time: ^12:32:03}
>>> vals == axon.loads(text)
True

>>> vals = [[{'a':1, 'b':2, 'c':3}, {'a':[1,2,3], 'b':(1,2,3), 'c':{1,2,3}}]]
>>> text = axon.dumps(vals)
>>> print(text)
[{a:1 b:2 c:3} {a:[1 2 3] b:(1 2 3) c:{1 2 3}}]
>>> text = axon.dumps(vals, pretty=1)
>>> print(text)
[ { a: 1
    b: 2
    c: 3}
  { a: [1 2 3]
    b: (1 2 3)
    c: {1 2 3}}]
>>> vals == axon.loads(text)
True

Dump, load objects in "safe" mode:

>>> vals = axon.loads('person{name:"nick" age:32 email:"[email protected]"}')
>>> print(type(vals[0]))
<class 'axon._objects.Node'>
>>> print(vals[0])
node('person', {'email': '[email protected]', 'age': 32, 'name': 'nick'})

>>> text = axon.dumps(vals)
>>> print(text)
person{age:32 email:"[email protected]" name:"nick"}
>>> text = axon.dumps(vals, pretty=1)
>>> print(text)
person
  age: 32
  email: "[email protected]"
  name: "nick"
>>> text = axon.dumps(vals, pretty=1, braces=1)
>>> print(text)
person {
  age: 32
  email: "[email protected]"
  name: "nick"}

Dump, load objects in unsafe mode:

class Person:
    def __init__(self, name, age, email):
        self.name = name
        self.age = age
        self.email = email

    def __str__(self):
        return "Person(name=%r, age=%r, email=%r)" % (self.name, self.age, self.email)

@axon.reduce(Person)
def reduce_Person(p):
    return axon.node('person', {'name':p.name, 'age':p.age, 'email': p.email})

@axon.factory('person')
def factory_Person(attrs, vals):
    return Person(name=attrs['name'], age=attrs['age'], email=attrs['email'])

>>> p = Person('nick', 32, '[email protected]')
>>> text = axon.dumps([p])
>>> print(text)
person{age:32 email:"[email protected]" name:"nick"}
>>> val = axon.loads(text, mode='strict')[0]
>>> print(val)
Person(name='nick', age=32, email='[email protected]')

Features

  1. Provide simple API for loading and dumping of objects in textual AXON format.
  2. Provide safe loading and dumping by default.
  3. Provide unsafe loading and dumping of objects on the base of registration of factory/reduce callables.
  4. Provide a way for fully controlled by application/framework/library unsafe loading and dumping.
  5. It's sufficiently fast so as to be useful.

About

This is the mirror of pyaxon repository http://bitbucket.org/intellimath/pyaxon

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published