|
2 | 2 |
|
3 | 3 | from uliweb import settings, models, request, functions, UliwebError
|
4 | 4 | from uliweb.orm import ModelNotFound
|
| 5 | +from json import dumps as json_dumps |
5 | 6 | import logging
|
6 | 7 |
|
7 | 8 | log = logging.getLogger('apijson')
|
8 | 9 |
|
9 |
| -def get_apijson_tables(role="UNKNOWN"): |
10 |
| - from uliweb import settings |
11 | 10 |
|
12 |
| - s = settings.APIJSON_TABLES |
13 |
| - if s: |
14 |
| - apijson_tables = dict(s.iteritems()) |
15 |
| - else: |
16 |
| - return {} |
17 |
| - for n in apijson_tables: |
18 |
| - c = apijson_tables[n] |
19 |
| - editable = c.get("editable",False) |
20 |
| - _model_name = c.get("@model_name") or n |
21 |
| - if editable=="auto": |
| 11 | +class ApijsonTable(object): |
| 12 | + def __init__(self, model_name, request_tag=None, role=None, tableui_name=None, table_name=None): |
| 13 | + self.model_name = model_name |
| 14 | + self.request_tag = request_tag or self.model_name |
| 15 | + self.role = role |
| 16 | + self.tableui_name = tableui_name or self.model_name |
| 17 | + self.table_name = table_name |
| 18 | + self._get_tableui() |
| 19 | + self._apply_auto() |
| 20 | + |
| 21 | + def _get_tableui(self): |
| 22 | + self.tableui = settings.APIJSON_TABLE_UI.get(self.tableui_name, {}) |
| 23 | + if not self.tableui: |
| 24 | + log.warn("cannot find setting for {} in settings.APIJSON_TABLE_UI".format(self.tableui_name)) |
| 25 | + |
| 26 | + def _apply_auto(self): |
| 27 | + editable = self.tableui.get("editable", False) |
| 28 | + if editable == "auto": |
22 | 29 | editable = False
|
23 |
| - POST = settings.APIJSON_MODELS.get(_model_name,{}).get("POST") |
| 30 | + POST = settings.APIJSON_MODELS.get(self.model_name, {}).get("POST") |
24 | 31 | if POST:
|
25 | 32 | roles = POST["roles"]
|
26 | 33 | if roles:
|
27 |
| - editable = role in roles |
28 |
| - c["editable"] = editable |
29 |
| - return apijson_tables |
30 |
| - |
31 |
| -def get_apijson_table(role="UNKNOWN",name=None): |
32 |
| - from uliweb import settings |
33 |
| - |
34 |
| - if not name: |
35 |
| - return {} |
36 |
| - s = settings.APIJSON_TABLES |
37 |
| - if s: |
38 |
| - apijson_tables = dict(s.iteritems()) |
39 |
| - else: |
40 |
| - return {} |
41 |
| - |
42 |
| - c = apijson_tables.get(name) |
43 |
| - if not c: |
44 |
| - return {} |
45 |
| - editable = c.get("editable",False) |
46 |
| - _model_name = c.get("@model_name") or n |
47 |
| - if editable=="auto": |
48 |
| - editable = False |
49 |
| - POST = settings.APIJSON_MODELS.get(_model_name,{}).get("POST") |
50 |
| - if POST: |
51 |
| - roles = POST["roles"] |
52 |
| - if roles: |
53 |
| - editable = role in roles |
54 |
| - c["editable"] = editable |
55 |
| - return c |
| 34 | + editable = self.role in roles |
| 35 | + self.tableui["editable"] = editable |
| 36 | + |
| 37 | + def to_dict(self): |
| 38 | + return dict(model_name=self.model_name, |
| 39 | + request_tag=self.request_tag, |
| 40 | + role=self.role, |
| 41 | + tableui_name=self.tableui_name, |
| 42 | + table_name=self.table_name, |
| 43 | + tableui=self.tableui) |
| 44 | + |
| 45 | + |
| 46 | +def get_apijson_tables(): |
| 47 | + def iter_table(): |
| 48 | + s = settings.APIJSON_TABLES |
| 49 | + apijson_tables = dict(s.iteritems()) if s else {} |
| 50 | + if apijson_tables: |
| 51 | + for k in apijson_tables: |
| 52 | + v = apijson_tables[k] |
| 53 | + model_name = v.get("model_name") or k |
| 54 | + tableui_name = v.get("tableui_name") or model_name |
| 55 | + if not model_name: |
| 56 | + model_name = tableui_name |
| 57 | + if model_name and tableui_name: |
| 58 | + request_tag = v.get("request_tag") |
| 59 | + role = v.get("role") |
| 60 | + yield(ApijsonTable(model_name=model_name, request_tag=request_tag, role=role, tableui_name=tableui_name, table_name=k)) |
| 61 | + else: |
| 62 | + apison_table_ui = dict( |
| 63 | + settings.APIJSON_TABLE_UI.iteritems()) |
| 64 | + for tableui_name in apison_table_ui: |
| 65 | + tableui = apison_table_ui[tableui_name] |
| 66 | + model_name = tableui.get("@model_name") or tableui_name |
| 67 | + request_tag = model_name |
| 68 | + role = None |
| 69 | + yield(ApijsonTable(model_name=model_name, request_tag=request_tag, role=role, tableui_name=tableui_name)) |
| 70 | + return list(iter_table()) |
| 71 | + |
| 72 | + |
| 73 | +def get_apijson_table(*args, **kwargs): |
| 74 | + return ApijsonTable(*args, **kwargs) |
56 | 75 |
|
57 | 76 | class ApiJsonModelQuery(object):
|
58 | 77 | def __init__(self,name,params,parent,key):
|
|
0 commit comments