Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/intellimath/pyaxon
This is the mirror of pyaxon repository http://bitbucket.org/intellimath/pyaxon
https://github.com/intellimath/pyaxon
Last synced: 2 months ago
JSON representation
This is the mirror of pyaxon repository http://bitbucket.org/intellimath/pyaxon
- Host: GitHub
- URL: https://github.com/intellimath/pyaxon
- Owner: intellimath
- License: mit
- Created: 2013-09-02T14:12:06.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-08-06T15:58:22.000Z (over 8 years ago)
- Last Synced: 2024-01-25T07:32:44.665Z (12 months ago)
- Language: Python
- Homepage:
- Size: 16.4 MB
- Stars: 22
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-json - AXON - A simple text based format for interchanging of objects, documents and data. It tries to combine the best of JSON, XML and YAML. (Related formats)
README
======
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
-----* Main repository for ``pyaxon`` is on `bitbucket `_.
* Mirror on `github `_
* `Blog `_ about AXON.
* History of `changes `_.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)
TrueDump, load objects in "safe" mode::
>>> vals = axon.loads('person{name:"nick" age:32 email:"[email protected]"}')
>>> print(type(vals[0]))
>>> 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.