diff options
| author | Alexis Metaireau <alexis@notmyidea.org> | 2017-03-11 01:27:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-03-11 01:27:41 +0100 |
| commit | 42854bd064404931eaccc3580ce505611162108b (patch) | |
| tree | b80cbf5ae0ddee631cb0c0aa31940f71d94d5855 /budget/utils.py | |
| parent | 8c412b391f9402f3840728ad1e6b8043e4ed8b7b (diff) | |
| parent | e35480d6b7adf76f5bc4d46153b621abd722c681 (diff) | |
| download | ihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.zip ihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.tar.gz ihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.tar.bz2 | |
Merge pull request #176 from 0livd/master
Add export feature
Diffstat (limited to 'budget/utils.py')
| -rw-r--r-- | budget/utils.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/budget/utils.py b/budget/utils.py index c849af0..8f5d3d5 100644 --- a/budget/utils.py +++ b/budget/utils.py @@ -2,8 +2,12 @@ import re import inspect from jinja2 import filters +from json import dumps from flask import redirect from werkzeug.routing import HTTPException, RoutingException +from io import BytesIO + +import csv def slugify(value): @@ -77,3 +81,30 @@ def minimal_round(*args, **kw): # return depending on it ires = int(res) return (res if res != ires else ires) + +def list_of_dicts2json(dict_to_convert): + """Take a list of dictionnaries and turns it into + a json in-memory file + """ + bytes_io = BytesIO() + bytes_io.write(dumps(dict_to_convert)) + bytes_io.seek(0) + return bytes_io + +def list_of_dicts2csv(dict_to_convert): + """Take a list of dictionnaries and turns it into + a csv in-memory file, assume all dict have the same keys + """ + bytes_io = BytesIO() + try: + csv_data = [dict_to_convert[0].keys()] + for dic in dict_to_convert: + csv_data.append([dic[h].encode('utf8') + if isinstance(dic[h], unicode) else str(dic[h]).encode('utf8') + for h in dict_to_convert[0].keys()]) + except (KeyError, IndexError): + csv_data = [] + writer = csv.writer(bytes_io) + writer.writerows(csv_data) + bytes_io.seek(0) + return bytes_io |
