168 lines
4.7 KiB
Python
168 lines
4.7 KiB
Python
|
|
#!/usr/bin/env python
|
||
|
|
|
||
|
|
import json
|
||
|
|
from defl.testing_ import Tester, Test, TestState
|
||
|
|
from dataclasses import dataclass, field, KW_ONLY
|
||
|
|
import sys
|
||
|
|
import re, io
|
||
|
|
import os
|
||
|
|
import enum
|
||
|
|
import itertools
|
||
|
|
from functools import partial, partialmethod
|
||
|
|
from time import sleep
|
||
|
|
from operator import itemgetter
|
||
|
|
from defl import log, cl, Undefined, Null, Assert, Obj, JqLoad, Dath
|
||
|
|
from defl import CLIError
|
||
|
|
from defl._typing_ import *
|
||
|
|
from defl._pydantic_ import *
|
||
|
|
from defl._typing_ import false, true, none
|
||
|
|
import defl
|
||
|
|
|
||
|
|
log.setLevel('i')
|
||
|
|
tester = Tester(name=__file__)
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def toJson():
|
||
|
|
r = []
|
||
|
|
a = b'{"a":9,"b":[1,2,3],"c":{"a":{"b":1,"c":{"a":1},"d":{"a":2}},"d":[{"a":3},{"a":4}]}}\n'
|
||
|
|
jl = JqLoad()
|
||
|
|
r.extend(jl.send(a))
|
||
|
|
r.extend(jl.res())
|
||
|
|
Assert(r).eq(
|
||
|
|
[{'a': 9, 'b': [1, 2, 3], 'c': {'a': {'b': 1, 'c': {'a': 1}, 'd': {'a': 2}}, 'd': [{'a': 3}, {'a': 4}]}}]
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def toJson():
|
||
|
|
r = []
|
||
|
|
a = b"""
|
||
|
|
{"a":1}\n
|
||
|
|
{"a":2}\n
|
||
|
|
{"a":3}\n
|
||
|
|
"""
|
||
|
|
jl = JqLoad()
|
||
|
|
r.extend(jl.send(a))
|
||
|
|
r.extend(jl.res())
|
||
|
|
Assert(r).eq([{'a': 1}, {'a': 2}, {'a': 3}])
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def toJson():
|
||
|
|
r = []
|
||
|
|
a = b"""
|
||
|
|
{"a":1}\n
|
||
|
|
{"a"
|
||
|
|
"""
|
||
|
|
jl = JqLoad()
|
||
|
|
r.extend(jl.send(a))
|
||
|
|
a = jl.res()
|
||
|
|
Assert(next(a)) == {'a': 1}
|
||
|
|
try:
|
||
|
|
next(a)
|
||
|
|
raise NotImplementedError('dont get here')
|
||
|
|
except defl.JqError:
|
||
|
|
...
|
||
|
|
|
||
|
|
|
||
|
|
data = """
|
||
|
|
{ "name": "sda", "maj:min": "8:0", "rm": false, "size": "476.9G", "ro": false, "type": "disk" }
|
||
|
|
{ "name": "sda1", "maj:min": "8:1", "rm": false, "size": "512M", "ro": false, "type": "part"}
|
||
|
|
{
|
||
|
|
"name": "sda2", "maj:min": "8:2", "rm": false,
|
||
|
|
"size": "476.4G", "ro": false, "type": "part"
|
||
|
|
}
|
||
|
|
{
|
||
|
|
"name": "", "maj:min": "254:0",
|
||
|
|
"rm": false, "size": "476.4G", "ro": false, "type": "crypt" }
|
||
|
|
{
|
||
|
|
"name": "-swap",
|
||
|
|
"maj:min": "254:1",
|
||
|
|
"rm": false,
|
||
|
|
"size": "8G",
|
||
|
|
"ro": false,
|
||
|
|
"type": "lvm"
|
||
|
|
}
|
||
|
|
{"name":
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
"-root","maj:min":"254:2","rm":false,"size":"32G","ro":false,"type":"lvm"}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
{ "name": "-home",
|
||
|
|
"maj:min": "254:3",
|
||
|
|
"rm": false, "size": "436.4G",
|
||
|
|
"ro": false,
|
||
|
|
"type": "lvm" }
|
||
|
|
|
||
|
|
"""
|
||
|
|
|
||
|
|
equ = [
|
||
|
|
{'name': 'sda', 'maj:min': '8:0', 'rm': False, 'size': '476.9G', 'ro': False, 'type': 'disk'},
|
||
|
|
{'name': 'sda1', 'maj:min': '8:1', 'rm': False, 'size': '512M', 'ro': False, 'type': 'part'},
|
||
|
|
{'name': 'sda2', 'maj:min': '8:2', 'rm': False, 'size': '476.4G', 'ro': False, 'type': 'part'},
|
||
|
|
{'name': '', 'maj:min': '254:0', 'rm': False, 'size': '476.4G', 'ro': False, 'type': 'crypt'},
|
||
|
|
{'name': '-swap', 'maj:min': '254:1', 'rm': False, 'size': '8G', 'ro': False, 'type': 'lvm'},
|
||
|
|
{'name': '-root', 'maj:min': '254:2', 'rm': False, 'size': '32G', 'ro': False, 'type': 'lvm'},
|
||
|
|
{'name': '-home', 'maj:min': '254:3', 'rm': False, 'size': '436.4G', 'ro': False, 'type': 'lvm'},
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def toJsonLoad():
|
||
|
|
a = io.BytesIO(data.encode())
|
||
|
|
Assert([x for x in JqLoad().fromFile(a)]).eq(equ)
|
||
|
|
|
||
|
|
a = io.BytesIO(data.encode())
|
||
|
|
Assert([x for x in JqLoad().fromFile(a, amnt=2)]).eq(equ)
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def toJsonSave():
|
||
|
|
tmp = Dath.Temp().tempFile(autoRemove=T)
|
||
|
|
|
||
|
|
with defl.JqDump(output=tmp) as d:
|
||
|
|
for i in equ:
|
||
|
|
d.dump(i)
|
||
|
|
t = tmp.read_text().split('\n')
|
||
|
|
Assert(t) == [
|
||
|
|
'{"name":"sda","maj:min":"8:0","rm":false,"size":"476.9G","ro":false,"type":"disk"}',
|
||
|
|
'{"name":"sda1","maj:min":"8:1","rm":false,"size":"512M","ro":false,"type":"part"}',
|
||
|
|
'{"name":"sda2","maj:min":"8:2","rm":false,"size":"476.4G","ro":false,"type":"part"}',
|
||
|
|
'{"name":"","maj:min":"254:0","rm":false,"size":"476.4G","ro":false,"type":"crypt"}',
|
||
|
|
'{"name":"-swap","maj:min":"254:1","rm":false,"size":"8G","ro":false,"type":"lvm"}',
|
||
|
|
'{"name":"-root","maj:min":"254:2","rm":false,"size":"32G","ro":false,"type":"lvm"}',
|
||
|
|
'{"name":"-home","maj:min":"254:3","rm":false,"size":"436.4G","ro":false,"type":"lvm"}',
|
||
|
|
'',
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
@tester.add()
|
||
|
|
def pydant():
|
||
|
|
@dantClass()
|
||
|
|
class A:
|
||
|
|
a: int
|
||
|
|
b: list['A'] | N = N
|
||
|
|
|
||
|
|
a = A(a=1, b=(A(a=2), A(a=3)))
|
||
|
|
for i in [
|
||
|
|
'__pydantic_complete__',
|
||
|
|
'__pydantic_config__',
|
||
|
|
'__pydantic_core_schema__',
|
||
|
|
'__pydantic_decorators__',
|
||
|
|
'__pydantic_fields__',
|
||
|
|
'__pydantic_serializer__',
|
||
|
|
'__pydantic_validator__',
|
||
|
|
]:
|
||
|
|
print(i, getattr(a, i))
|
||
|
|
a = defl.jsonReprDump(a)
|
||
|
|
Assert(a) == {'a': 1, 'b': [{'a': 2, 'b': None}, {'a': 3, 'b': None}]}
|
||
|
|
|
||
|
|
|
||
|
|
log.info(tester.run())
|
||
|
|
tester.exitWithStatus()
|