diff options
author | ache <ache@ache.one> | 2017-01-01 17:24:04 +0100 |
---|---|---|
committer | ache <ache@ache.one> | 2017-01-01 17:24:04 +0100 |
commit | da51dfca7b47bc0a5cbb63b7e0af6328b28b0050 (patch) | |
tree | 02b3c92a2010d25833bac2dd9ccb402096693a19 |
-rw-r--r-- | MANIFEST.in | 1 | ||||
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | README.md | 21 | ||||
-rw-r--r-- | libkyf/__init__.py | 15 | ||||
-rw-r--r-- | libkyf/__pycache__/__init__.cpython-35.pyc | bin | 0 -> 340 bytes | |||
-rw-r--r-- | libkyf/__pycache__/dump.cpython-35.pyc | bin | 0 -> 4236 bytes | |||
-rw-r--r-- | libkyf/__pycache__/load.cpython-35.pyc | bin | 0 -> 4230 bytes | |||
-rw-r--r-- | libkyf/dump.py | 198 | ||||
-rw-r--r-- | libkyf/libkyf.py | 187 | ||||
-rw-r--r-- | libkyf/load.py | 196 | ||||
-rw-r--r-- | setup.py | 36 |
11 files changed, 663 insertions, 0 deletions
diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..efa752e --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include *.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..36afb01 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ + + +install: libkyf/libkyf.py + python setup.py install + @echo 'Installation success' + +clean: + rm -vrf ./build ./dist ./*.egg-info + @echo 'Done' diff --git a/README.md b/README.md new file mode 100644 index 0000000..0248940 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +libkyf - Bibliothèque simple de lecture du format kyg +================================================================ + +Ce module permet de facilement et rapidement lire le format kyf. + +Le KISS Yolo Format est un langage de description rapide à parser et plus +simple que les Markup Languages habituels. Sa particularité et d'être +fortement typé et de réduire au minimum les échappements afin de rester +simple et intuitif. + + +import libkyf + +import libkyf as kyf + + +Seule 2 fonctions sont utiles chez libky. Load pour lire et dump pour écrire. + + +Licence : GNU GPL v3 + diff --git a/libkyf/__init__.py b/libkyf/__init__.py new file mode 100644 index 0000000..673b50a --- /dev/null +++ b/libkyf/__init__.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" + +Ce module permet de manipuler des données du format kyf. +C'est à dire lire et écrire dans ce format. + +""" + + +__version__ = "0.1" + +from .load import load +from .dump import dump diff --git a/libkyf/__pycache__/__init__.cpython-35.pyc b/libkyf/__pycache__/__init__.cpython-35.pyc Binary files differnew file mode 100644 index 0000000..d8d766a --- /dev/null +++ b/libkyf/__pycache__/__init__.cpython-35.pyc diff --git a/libkyf/__pycache__/dump.cpython-35.pyc b/libkyf/__pycache__/dump.cpython-35.pyc Binary files differnew file mode 100644 index 0000000..c5042ec --- /dev/null +++ b/libkyf/__pycache__/dump.cpython-35.pyc diff --git a/libkyf/__pycache__/load.cpython-35.pyc b/libkyf/__pycache__/load.cpython-35.pyc Binary files differnew file mode 100644 index 0000000..4f89f05 --- /dev/null +++ b/libkyf/__pycache__/load.cpython-35.pyc diff --git a/libkyf/dump.py b/libkyf/dump.py new file mode 100644 index 0000000..b58576c --- /dev/null +++ b/libkyf/dump.py @@ -0,0 +1,198 @@ +#!/usr/bin/python +# -*-coding:utf-8 -* + +""" + +Implémentation de l'écriture du format kyf. + +""" + + +import re, os, sys +import base64 +import binascii +import datetime + + +__all__ = ['dump'] + + + +def _tokyf(d, base = '', nbSpace = 0): + out = "" + for key, v in d.items(): + if type(v) is int : + out += (key +'#' + str(v)) + '\n' + elif type(v) is str: + out += (key + '=' + v) + '\n' + elif type(v) == datetime.datetime: + out += (key + '@' + str(v)) + '\n' + elif type(v) is dict: + out += ( '[ ' + key + ' ]' ) + '\n' + out += _tokyf(v, base+key+'.',nbSpace+2) + elif type(v) is list: + isMultiple=False + if len(v) == 0: + continue + for e in v[1:]: + if type(e) is not type(v[0]): + isMultiple = True + if isMultiple: + print(key + ' is a multi typed list', file=sys.stderr) + exit() + else: + if type(v[0]) is int: + out += ( '[[#' + base + key + ' ]]' ) + '\n' + for i in v : + out += '#' + i + '\n' + elif type(v[0]) is str: + out += ( '[[=' + base + key + ' ]]' ) + '\n' + for i in v : + out += '=' + i + '\n' + elif str(type(v[0])) == "<class 'datetime.datetime'>": + out += ( '[[@' + key + ' ]]' ) + '\n' + for i in v : + out += '@' + i + '\n' + elif type(v[0]) is list: + out += ( '[[_' + key + ' ]]' ) + '\n' + for e in v: + out += _tokyf(e, base+key+'.',nbSpace+2) + elif type(v[0]) is dict: + for e in v: + out += ( '[[ ' + key + ' ]]' ) + '\n' + out += _tokyf(e, base+key+'.',nbSpace+2) + out += ('') + '\n' + else: + print(key + ' is a list of unknow type !' + str(type(v[0])) + ')', + file=sys.stderr) + exit() + else: + print('Type error :' + key + + ' don\'t have knowd type (' + str(type(v)) + ')', file=sys.stderr) + exit() + return out + +def getTo( d, key, dico=True ): + tD=d + ls = key.strip().split('.') + for i,k in enumerate(ls): + if type(tD) == dict: + if k in tD: + tD = tD[k] + else: + if dico: + tD[k] = dict() + else: + tD[k] = list() + tD = tD[k] + return tD + elif type(tD) == list: + if type(tD[-1]) == dict: + if k in tD[-1] : + tD = tD[-1][k] + else: + if dico: + tD[-1][k] = dict() + else: + tD[-1][k] = list() + return tD[-1][k] + else: + tD = tD[-1]; + return tD + + + + + +def _fromkyf( d, f ): + tD=d + listType=type(None) + for line in f: + line = line.strip() + if line : + if line[0] == '[': + if line[1] == '[': # List + if line[2] == ' ': # of table + key = line[2:-2].strip() + tD = getTo(d, key, dico=False) + if type(tD) == list: + tD.append(dict()); + tD = tD[-1] + continue + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[2] == '=': + key = line[3:-2].strip() + tD = getTo(d, key, dico=False) + listType=type('') + continue + elif line[2] == '#': + key = line[2:-2].strip() + listType=type(0) + tD = getTo(d, key, dico=False) + continue + elif line[2] == '@': + key = line[2:-2].strip() + listType=type( None ) + tD = getTo(d, key, dico=False) + continue + else: # Table + key = line[1:-1].strip() + tD = getTo(d, key) + continue + elif line[0] == '=': + if listType == type(''): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[0] == '#': + if listType == type(0): + tD.append( int(line[1:]) ) + else: + print('Error', file=sys.stderr) + continue + elif line[0] == '@': + if listType == type(None): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + continue + else: + listType=type(None) + i = line.find('=') + if i != -1: # String arg + key = line[:i].rstrip() + tD[key] = line[i+1:].lstrip() + continue + i = line.find('#') + if i != -1: # Number arg + key = line[:i].rstrip() + value = int(line[1+i:].strip()) + if key: + tD[key] = value + elif type(tD) == list: + tD.append(value) + else: + print('Error', file=sys.stderr) + exit() + continue + o = line.find('@') + if i != -1: # Date arg + print('Date no supported yet') + exit() + else: + print('What ?') + exit() + return d + +def dump( d ) : + return _tokyf(d) + +def load( f ) : + d = dict() + return _fromkyf( d, f ) + diff --git a/libkyf/libkyf.py b/libkyf/libkyf.py new file mode 100644 index 0000000..b978430 --- /dev/null +++ b/libkyf/libkyf.py @@ -0,0 +1,187 @@ +#!/usr/bin/python +# -*-coding:utf-8 -* + +import re, os, sys +import base64 +import binascii +import datetime + + +def _tokyf(d, base = '', nbSpace = 0): + out = "" + for key, v in d.items(): + if type(v) is int : + out += (key +'#' + str(v)) + '\n' + elif type(v) is str: + out += (key + '=' + v) + '\n' + elif type(v) == datetime.datetime: + out += (key + '@' + str(v)) + '\n' + elif type(v) is dict: + out += ( '[ ' + key + ' ]' ) + '\n' + out += _tokyf(v, base+key+'.',nbSpace+2) + elif type(v) is list: + isMultiple=False + if len(v) == 0: + continue + for e in v[1:]: + if type(e) is not type(v[0]): + isMultiple = True + if isMultiple: + print(key + ' is a multi typed list', file=sys.stderr) + exit() + else: + if type(v[0]) is int: + out += ( '[[#' + base + key + ' ]]' ) + '\n' + for i in v : + out += '#' + i + '\n' + elif type(v[0]) is str: + out += ( '[[=' + base + key + ' ]]' ) + '\n' + for i in v : + out += '=' + i + '\n' + elif str(type(v[0])) == "<class 'datetime.datetime'>": + out += ( '[[@' + key + ' ]]' ) + '\n' + for i in v : + out += '@' + i + '\n' + elif type(v[0]) is list: + out += ( '[[_' + key + ' ]]' ) + '\n' + for e in v: + out += _tokyf(e, base+key+'.',nbSpace+2) + elif type(v[0]) is dict: + for e in v: + out += ( '[[ ' + key + ' ]]' ) + '\n' + out += _tokyf(e, base+key+'.',nbSpace+2) + out += ('') + '\n' + else: + print(key + ' is a list of unknow type !' + str(type(v[0])) + ')', + file=sys.stderr) + exit() + else: + print('Type error :' + key + + ' don\'t have knowd type (' + str(type(v)) + ')', file=sys.stderr) + exit() + return out + +def getTo( d, key, dico=True ): + tD=d + ls = key.strip().split('.') + for i,k in enumerate(ls): + if type(tD) == dict: + if k in tD: + tD = tD[k] + else: + if dico: + tD[k] = dict() + else: + tD[k] = list() + tD = tD[k] + return tD + elif type(tD) == list: + if type(tD[-1]) == dict: + if k in tD[-1] : + tD = tD[-1][k] + else: + if dico: + tD[-1][k] = dict() + else: + tD[-1][k] = list() + return tD[-1][k] + else: + tD = tD[-1]; + return tD + + + + + +def _fromkyf( d, f ): + tD=d + listType=type(None) + for line in f: + line = line.strip() + if line : + if line[0] == '[': + if line[1] == '[': # List + if line[2] == ' ': # of table + key = line[2:-2].strip() + tD = getTo(d, key, dico=False) + if type(tD) == list: + tD.append(dict()); + tD = tD[-1] + continue + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[2] == '=': + key = line[3:-2].strip() + tD = getTo(d, key, dico=False) + listType=type('') + continue + elif line[2] == '#': + key = line[2:-2].strip() + listType=type(0) + tD = getTo(d, key, dico=False) + continue + elif line[2] == '@': + key = line[2:-2].strip() + listType=type( None ) + tD = getTo(d, key, dico=False) + continue + else: # Table + key = line[1:-1].strip() + tD = getTo(d, key) + continue + elif line[0] == '=': + if listType == type(''): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[0] == '#': + if listType == type(0): + tD.append( int(line[1:]) ) + else: + print('Error', file=sys.stderr) + continue + elif line[0] == '@': + if listType == type(None): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + continue + else: + listType=type(None) + i = line.find('=') + if i != -1: # String arg + key = line[:i].rstrip() + tD[key] = line[i+1:].lstrip() + continue + i = line.find('#') + if i != -1: # Number arg + key = line[:i].rstrip() + value = int(line[1+i:].strip()) + if key: + tD[key] = value + elif type(tD) == list: + tD.append(value) + else: + print('Error', file=sys.stderr) + exit() + continue + o = line.find('@') + if i != -1: # Date arg + print('Date no supported yet') + exit() + else: + print('What ?') + exit() + return d + +def dump( d ) : + return _tokyf(d) + +def load( f ) : + d = dict() + return _fromkyf( d, f ) + diff --git a/libkyf/load.py b/libkyf/load.py new file mode 100644 index 0000000..6cd1542 --- /dev/null +++ b/libkyf/load.py @@ -0,0 +1,196 @@ +#!/usr/bin/python +# -*-coding:utf-8 -* +""" + +Implementation de la lecture du format kyf + +""" + +import re, os, sys +import base64 +import binascii +import datetime + + +__all__ = ['load'] + + + +def _tokyf(d, base = '', nbSpace = 0): + out = "" + for key, v in d.items(): + if type(v) is int : + out += (key +'#' + str(v)) + '\n' + elif type(v) is str: + out += (key + '=' + v) + '\n' + elif type(v) == datetime.datetime: + out += (key + '@' + str(v)) + '\n' + elif type(v) is dict: + out += ( '[ ' + key + ' ]' ) + '\n' + out += _tokyf(v, base+key+'.',nbSpace+2) + elif type(v) is list: + isMultiple=False + if len(v) == 0: + continue + for e in v[1:]: + if type(e) is not type(v[0]): + isMultiple = True + if isMultiple: + print(key + ' is a multi typed list', file=sys.stderr) + exit() + else: + if type(v[0]) is int: + out += ( '[[#' + base + key + ' ]]' ) + '\n' + for i in v : + out += '#' + i + '\n' + elif type(v[0]) is str: + out += ( '[[=' + base + key + ' ]]' ) + '\n' + for i in v : + out += '=' + i + '\n' + elif str(type(v[0])) == "<class 'datetime.datetime'>": + out += ( '[[@' + key + ' ]]' ) + '\n' + for i in v : + out += '@' + i + '\n' + elif type(v[0]) is list: + out += ( '[[_' + key + ' ]]' ) + '\n' + for e in v: + out += _tokyf(e, base+key+'.',nbSpace+2) + elif type(v[0]) is dict: + for e in v: + out += ( '[[ ' + key + ' ]]' ) + '\n' + out += _tokyf(e, base+key+'.',nbSpace+2) + out += ('') + '\n' + else: + print(key + ' is a list of unknow type !' + str(type(v[0])) + ')', + file=sys.stderr) + exit() + else: + print('Type error :' + key + + ' don\'t have knowd type (' + str(type(v)) + ')', file=sys.stderr) + exit() + return out + +def getTo( d, key, dico=True ): + tD=d + ls = key.strip().split('.') + for i,k in enumerate(ls): + if type(tD) == dict: + if k in tD: + tD = tD[k] + else: + if dico: + tD[k] = dict() + else: + tD[k] = list() + tD = tD[k] + return tD + elif type(tD) == list: + if type(tD[-1]) == dict: + if k in tD[-1] : + tD = tD[-1][k] + else: + if dico: + tD[-1][k] = dict() + else: + tD[-1][k] = list() + return tD[-1][k] + else: + tD = tD[-1]; + return tD + + + + + +def _fromkyf( d, f ): + tD=d + listType=type(None) + for line in f: + line = line.strip() + if line : + if line[0] == '[': + if line[1] == '[': # List + if line[2] == ' ': # of table + key = line[2:-2].strip() + tD = getTo(d, key, dico=False) + if type(tD) == list: + tD.append(dict()); + tD = tD[-1] + continue + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[2] == '=': + key = line[3:-2].strip() + tD = getTo(d, key, dico=False) + listType=type('') + continue + elif line[2] == '#': + key = line[2:-2].strip() + listType=type(0) + tD = getTo(d, key, dico=False) + continue + elif line[2] == '@': + key = line[2:-2].strip() + listType=type( None ) + tD = getTo(d, key, dico=False) + continue + else: # Table + key = line[1:-1].strip() + tD = getTo(d, key) + continue + elif line[0] == '=': + if listType == type(''): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + exit() + continue + elif line[0] == '#': + if listType == type(0): + tD.append( int(line[1:]) ) + else: + print('Error', file=sys.stderr) + continue + elif line[0] == '@': + if listType == type(None): + tD.append(line[1:]) + else: + print('Error', file=sys.stderr) + continue + else: + listType=type(None) + i = line.find('=') + if i != -1: # String arg + key = line[:i].rstrip() + tD[key] = line[i+1:].lstrip() + continue + i = line.find('#') + if i != -1: # Number arg + key = line[:i].rstrip() + value = int(line[1+i:].strip()) + if key: + tD[key] = value + elif type(tD) == list: + tD.append(value) + else: + print('Error', file=sys.stderr) + exit() + continue + o = line.find('@') + if i != -1: # Date arg + print('Date no supported yet') + exit() + else: + print('What ?') + exit() + return d + +def dump( d ) : + return _tokyf(d) + +def load( f ) : + d = dict() + return _fromkyf( d, f ) + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..605be63 --- /dev/null +++ b/setup.py @@ -0,0 +1,36 @@ +#!/usr/bin/python +# -*-coding:utf-8 -* + +from setuptools import setup, find_packages + + +import libkyf + + +setup( + name='libkyf', + version=libkyf.__version__, + + description='A parser for KYF', + long_description=open('README.md').read(), + author='Hédy Ache', + author_email='ache@ache.one', + url='http://git.ache.one/kyf', + license='GNU GPL v3', +# install_requires=[], +# zip_safe=False, + + include_package_data=True, + + packages=find_packages(), + classifiers=[ + "Programming Language :: Python", + "Development Status :: 1 - Planning", + "Natural Language :: French", + "Operating System :: OS Independent", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.5", + ] + + +) |