CMS 3D CMS Logo

data_formats.py
Go to the documentation of this file.
1 """
2 
3 This file holds decorator functions that can rearrange data returned from data sources.
4 They should be used to decorate the method that holds the script that is being passed to the framework.
5 
6 Note: may also contain a decorator that can wrap a class around a function that contains a script (future development).
7 
8 """
9 from __future__ import absolute_import
10 
11 from .data_sources import json_data_node, json_list, json_dict, json_basic
12 
13 # decorators
14 
15 # will convert {headers:[], data:[[]]} to {{header:value}, ..., {header:value}}
16 # will not take any arguments in decorator syntax at the moment -
17 # only adjust the output data from the decorated function
18 def to_array_of_dicts(script):
19  def new_script(self, connection):
20  try:
21  data = script(self, connection)
22  array_of_dicts = _to_array_of_dicts(data)
23  return json_data_node.make(array_of_dicts)
24  except (KeyError, TypeError) as e:
25  raise Exception("The data you gave wasn't in the correct format: %s" % str(e))
26  return new_script
27 
28 # convert {{header:value}, ..., {header:value}} to {headers:[], data:[[]]}
29 def to_datatables(script):
30  def new_script(self, connection):
31  try:
32  data = script(self, connection)
33  if(isinstance(data, list)):
34  data = _json_data_node.make(data)
35  return to_datatables(data)
36  except (KeyError, TypeError) as e:
37  raise Exception("The data you gave wasn't in the correct format: %s" % str(e))
38  return new_script
39 
40 def query(script):
41  def new_script(self, connection):
42  try:
43  data = script(self, connection)
44  return _to_sql_query(data)
45  except (KeyError, TypeError) as e:
46  raise Exception("The data you gave wasn't in the correct format: %s" % str(e))
47  return new_script
48 
49 def objects_to_dicts(script):
50  def new_script(self, connection):
51  try:
52  data = script(self, connection)
53  return _objects_to_dicts(data)
54  except (KeyError, TypeError) as e:
55  raise Exception("The data you gave wasn't in the correct format: %s" % str(e))
56  return new_script
57 
58 # functions used in decorators
59 
61  # check to see if the user has returned a data source, instead of a json data node
62  if not(data.__class__.__name__ in ["json_list", "json_dict", "json_basic"]):
63  data = json_data_node.make(data)
64  headers = data.get("headers").data()
65  data_list = data.get("data").data()
66  def unicode_to_str(string):
67  return str(string) if isinstance(string, unicode) else string
68  headers = map(unicode_to_str, headers)
69  def row_to_dict(row):
70  row = map(unicode_to_str, row)
71  return dict(zip(headers, row))
72  array_of_dicts = map(row_to_dict, data_list)
73  return json_data_node.make(array_of_dicts)
74 
75 def _to_datatables(data):
76  headers = map(str, data.get(0).data().keys())
77  new_data = []
78  for n in range(0, len(data.data())):
79  new_data.append(map(lambda entry : str(entry) if isinstance(entry, unicode) else entry, data.get(n).data().values()))
80  return json_data_node.make({
81  "headers" : headers,
82  "data" : new_data
83  })
84 
85 def to_sql_query(data):
86  return data.to_sql()
87 
88 # apply function to specific column of data, assuming data
89 def apply_function(data, function, key):
90  data = data.data()
91  def apply_function_to_key(row):
92  row[key] = function(row[key])
93  return row
94  new_data = [apply_function_to_key(data[n]) for n in range(0, len(data))]
95  return json_data_node(new_data)
96 
98  if data.__class__.__name__ in ["json_list", "json_dict", "json_basic"]:
99  data = data.data()
100  new_data = [data[n].as_dicts() for n in range(0, len(data))]
101  return json_data_node.make(new_data)
102 
103 def _dicts_to_orm_objects(model, data):
104  if data.__class__.__name__ in ["json_list", "json_dict", "json_basic"]:
105  data = data.data()
106  new_data = [model(data[n]) for n in range(0, len(data))]
107  return new_data
def _dicts_to_orm_objects(model, data)
Definition: vlib.h:246
def apply_function(data, function, key)
Definition: data_formats.py:89
def query(script)
Definition: data_formats.py:40
def to_array_of_dicts(script)
Definition: data_formats.py:18
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
def to_sql_query(data)
Definition: data_formats.py:85
def objects_to_dicts(script)
Definition: data_formats.py:49
def to_datatables(script)
Definition: data_formats.py:29
def _to_array_of_dicts(data)
Definition: data_formats.py:60
def _objects_to_dicts(data)
Definition: data_formats.py:97
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
def _to_datatables(data)
Definition: data_formats.py:75
#define str(s)