annotate frontends/src/jp/output_std.py @ 2160:e67e8cd24141

core (tools/common): data objects first draft: this module aims is to help manipulate complex data from bridge, mainly for the template system. It is in common and not only in frontends as it may be used in some case by backend, if it needs to use template system in the future.
author Goffi <goffi@goffi.org>
date Tue, 21 Feb 2017 21:01:40 +0100
parents 8f96c242fa89
children 62dfa6e02f54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #! /usr/bin/python
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # jp: a SàT command line tool
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org)
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 """Standard outputs"""
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from sat_frontends.jp.constants import Const as C
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 import json
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
24
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
25 __outputs__ = ["Simple", "Json"]
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
26 SIMPLE = u'simple'
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 JSON = u'json'
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 JSON_RAW = u'json_raw'
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
31 class Simple(object):
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 """Default outputs"""
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
33
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 def __init__(self, jp):
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
35 jp.register_output(C.OUTPUT_TEXT, SIMPLE, self.simple_print)
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
36 jp.register_output(C.OUTPUT_LIST, SIMPLE, self.list)
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
37 jp.register_output(C.OUTPUT_DICT, SIMPLE, self.dict)
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
38 jp.register_output(C.OUTPUT_COMPLEX, SIMPLE, self.simple_print)
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
39
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
40 def simple_print(self, data):
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 print data
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
42
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 def list(self, data):
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 print u'\n'.join(data)
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
45
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
46 def dict(self, data):
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
47 for k, v in data:
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
48 print(u'{key}: {value}'.format(key=k, value=v))
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
49
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
50
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 class Json(object):
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 """outputs in json format"""
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
53
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 def __init__(self, jp):
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
55 jp.register_output(C.OUTPUT_TEXT, JSON, self.dump)
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 jp.register_output(C.OUTPUT_LIST, JSON, self.dump_pretty)
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 jp.register_output(C.OUTPUT_LIST, JSON_RAW, self.dump)
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 jp.register_output(C.OUTPUT_DICT, JSON, self.dump_pretty)
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 jp.register_output(C.OUTPUT_DICT, JSON_RAW, self.dump)
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
60 jp.register_output(C.OUTPUT_COMPLEX, JSON, self.dump_pretty)
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
61 jp.register_output(C.OUTPUT_COMPLEX, JSON_RAW, self.dump)
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
62
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 def dump(self, data):
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
64 print json.dumps(data, default=str)
1950
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
65
227a4e617549 jp: --output option:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 def dump_pretty(self, data):
2156
8f96c242fa89 jp (outputs): added OUTPUT_COMPLEX type for data which are more complex than key/value dictionaries
Goffi <goffi@goffi.org>
parents: 1950
diff changeset
67 print json.dumps(data, indent=4, default=str)