Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/galaxy/util/dictifiable.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 import datetime | |
2 import uuid | |
3 | |
4 | |
5 def dict_for(obj, **kwds): | |
6 # Create dict to represent item. | |
7 return dict( | |
8 model_class=obj.__class__.__name__, | |
9 **kwds | |
10 ) | |
11 | |
12 | |
13 class Dictifiable(object): | |
14 """ Mixin that enables objects to be converted to dictionaries. This is useful | |
15 when for sharing objects across boundaries, such as the API, tool scripts, | |
16 and JavaScript code. """ | |
17 | |
18 def to_dict(self, view='collection', value_mapper=None): | |
19 """ | |
20 Return item dictionary. | |
21 """ | |
22 | |
23 if not value_mapper: | |
24 value_mapper = {} | |
25 | |
26 def get_value(key, item): | |
27 """ | |
28 Recursive helper function to get item values. | |
29 """ | |
30 # FIXME: why use exception here? Why not look for key in value_mapper | |
31 # first and then default to to_dict? | |
32 try: | |
33 return item.to_dict(view=view, value_mapper=value_mapper) | |
34 except Exception: | |
35 if key in value_mapper: | |
36 return value_mapper.get(key)(item) | |
37 if type(item) == datetime.datetime: | |
38 return item.isoformat() | |
39 elif type(item) == uuid.UUID: | |
40 return str(item) | |
41 # Leaving this for future reference, though we may want a more | |
42 # generic way to handle special type mappings going forward. | |
43 # If the item is of a class that needs to be 'stringified' before being put into a JSON data structure | |
44 # elif type(item) in []: | |
45 # return str(item) | |
46 return item | |
47 | |
48 # Create dict to represent item. | |
49 rval = dict_for(self) | |
50 | |
51 # Fill item dict with visible keys. | |
52 try: | |
53 visible_keys = self.__getattribute__('dict_' + view + '_visible_keys') | |
54 except AttributeError: | |
55 raise Exception('Unknown Dictifiable view: %s' % view) | |
56 for key in visible_keys: | |
57 try: | |
58 item = self.__getattribute__(key) | |
59 if isinstance(item, list): | |
60 rval[key] = [] | |
61 for i in item: | |
62 rval[key].append(get_value(key, i)) | |
63 else: | |
64 rval[key] = get_value(key, item) | |
65 except AttributeError: | |
66 rval[key] = None | |
67 | |
68 return rval |