summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py120
1 files changed, 75 insertions, 45 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 3406cf7af..4ee8da963 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -527,7 +527,7 @@ HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types',
def get_item(model, func_name, default_name, extra_request_keys=[],
base_request={}, bool_fields=[], reversed_bool_fields=[],
- dated_fields=[], associated_models=[], relative_session_names={},
+ dated_fields=[], associated_models=[], relative_session_names=[],
specific_perms=[], own_table_cols=None, relation_types_prefix={}):
"""
Generic treatment of tables
@@ -569,6 +569,43 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
data_type = 'json'
if not allowed:
return HttpResponse(EMPTY, mimetype='text/plain')
+
+ # get defaults from model
+ if not extra_request_keys and hasattr(model, 'EXTRA_REQUEST_KEYS'):
+ my_extra_request_keys = copy(model.EXTRA_REQUEST_KEYS)
+ else:
+ my_extra_request_keys = copy(extra_request_keys)
+ if not base_request and hasattr(model, 'BASE_REQUEST'):
+ my_base_request = copy(model.BASE_REQUEST)
+ else:
+ my_base_request = copy(base_request)
+ if not bool_fields and hasattr(model, 'BOOL_FIELDS'):
+ my_bool_fields = model.BOOL_FIELDS[:]
+ else:
+ my_bool_fields = bool_fields[:]
+ if not reversed_bool_fields and hasattr(model, 'REVERSED_BOOL_FIELDS'):
+ my_reversed_bool_fields = model.REVERSED_BOOL_FIELDS[:]
+ else:
+ my_reversed_bool_fields = reversed_bool_fields[:]
+ if not dated_fields and hasattr(model, 'DATED_FIELDS'):
+ my_dated_fields = model.DATED_FIELDS[:]
+ else:
+ my_dated_fields = dated_fields[:]
+ if not associated_models and hasattr(model, 'ASSOCIATED_MODELS'):
+ my_associated_models = model.ASSOCIATED_MODELS[:]
+ else:
+ my_associated_models = associated_models[:]
+ if not relative_session_names and hasattr(model,
+ 'RELATIVE_SESSION_NAMES'):
+ my_relative_session_names = model.RELATIVE_SESSION_NAMES[:]
+ else:
+ my_relative_session_names = relative_session_names[:]
+ if not relation_types_prefix and hasattr(model,
+ 'RELATION_TYPES_PREFIX'):
+ my_relation_types_prefix = copy(model.RELATION_TYPES_PREFIX)
+ else:
+ my_relation_types_prefix = copy(relation_types_prefix)
+
fields = [model._meta.get_field_by_name(k)[0]
for k in model._meta.get_all_field_names()]
request_keys = dict([
@@ -576,7 +613,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
field.name + (hasattr(field, 'rel') and field.rel and '__pk'
or ''))
for field in fields])
- for associated_model, key in associated_models:
+ for associated_model, key in my_associated_models:
associated_fields = [
associated_model._meta.get_field_by_name(k)[0]
for k in associated_model._meta.get_all_field_names()]
@@ -585,10 +622,10 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
key + "__" + field.name +
(hasattr(field, 'rel') and field.rel and '__pk' or ''))
for field in associated_fields]))
- request_keys.update(extra_request_keys)
+ request_keys.update(my_extra_request_keys)
request_items = request.method == 'POST' and request.POST \
or request.GET
- dct = base_request.copy()
+ dct = my_base_request
if full == 'shortcut':
dct['cached_label__icontains'] = request.GET.get('term', None)
and_reqs, or_reqs = [], []
@@ -598,15 +635,14 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
return HttpResponse('[]', mimetype='text/plain')
# manage relations types
- my_rtypes_prefix = copy(relation_types_prefix)
- if 'relation_types' not in my_rtypes_prefix:
- my_rtypes_prefix['relation_types'] = ''
+ if 'relation_types' not in my_relation_types_prefix:
+ my_relation_types_prefix['relation_types'] = ''
relation_types = {}
- for rtype_key in my_rtypes_prefix:
- relation_types[my_rtypes_prefix[rtype_key]] = set()
+ for rtype_key in my_relation_types_prefix:
+ relation_types[my_relation_types_prefix[rtype_key]] = set()
for k in request_items:
if k.startswith(rtype_key):
- relation_types[my_rtypes_prefix[rtype_key]].add(
+ relation_types[my_relation_types_prefix[rtype_key]].add(
request_items[k])
continue
@@ -637,7 +673,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
dct = {"pk": request.session[default_name]}
elif dct == base_request:
# a parent item may be selected in the default menu
- for name, key in relative_session_names:
+ for name, key in my_relative_session_names:
if name in request.session and request.session[name]:
dct.update({key: request.session[name]})
break
@@ -646,13 +682,13 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
dct = request.session[func_name]
else:
request.session[func_name] = dct
- for k in (list(bool_fields) + list(reversed_bool_fields)):
+ for k in (list(my_bool_fields) + list(my_reversed_bool_fields)):
if k in dct:
if dct[k] == u"1":
dct.pop(k)
else:
dct[k] = dct[k] == u"2" and True or False
- if k in reversed_bool_fields:
+ if k in my_reversed_bool_fields:
dct[k] = not dct[k]
# check also for empty value with image field
field_name = k.split('__')[0]
@@ -668,7 +704,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
dct[k.split('__')[0] + '__regex'] = '.{1}.*'
except FieldDoesNotExist:
pass
- for k in dated_fields:
+ for k in my_dated_fields:
if k in dct:
if not dct[k]:
dct.pop(k)
@@ -1001,6 +1037,26 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
return func
+def get_by_importer(request, slug, data_type='json', full=False,
+ force_own=False, **dct):
+ q = models.ImporterType.objects.filter(slug=slug)
+ if not q.count():
+ res = ''
+ if data_type == "json":
+ res = '{}'
+ return HttpResponse(res, mimetype='text/plain')
+ imp = q.all()[0].get_importer_class()
+ cols = []
+ for formater in imp.LINE_FORMAT:
+ if not formater:
+ continue
+ cols.append(formater.field_name)
+ obj_name = imp.OBJECT_CLS.__name__.lower()
+ return get_item(
+ imp.OBJECT_CLS, 'get_' + obj_name, obj_name, own_table_cols=cols
+ )(request, data_type, full, force_own, **dct)
+
+
def show_item(model, name, extra_dct=None):
def func(request, pk, **dct):
try:
@@ -1203,40 +1259,14 @@ new_person = new_item(models.Person, forms.PersonForm)
new_person_noorga = new_item(models.Person, forms.NoOrgaPersonForm)
new_organization = new_item(models.Organization, forms.OrganizationForm)
show_organization = show_item(models.Organization, 'organization')
-get_organization = get_item(
- models.Organization,
- 'get_organization', 'organization',
- extra_request_keys={
- 'name': 'name__icontains',
- 'organization_type': 'organization_type__pk__in',
- })
+get_organization = get_item(models.Organization, 'get_organization',
+ 'organization')
new_author = new_item(models.Author, forms.AuthorForm)
show_person = show_item(models.Person, 'person')
-get_person = get_item(
- models.Person,
- 'get_person', 'person',
- reversed_bool_fields=['ishtaruser__isnull'],
- extra_request_keys={
- 'name': ['name__icontains', 'raw_name__icontains'],
- 'surname': ['surname__icontains', 'raw_name__icontains'],
- 'attached_to': 'attached_to__pk',
- 'person_types': 'person_types__pk__in',
- 'ishtaruser__isnull': 'ishtaruser__isnull'
- })
-
-get_ishtaruser = get_item(
- models.IshtarUser,
- 'get_ishtaruser', 'ishtaruser',
- extra_request_keys={
- 'username': ['username__icontains'],
- 'name': ['person__name__icontains', 'person__raw_name__icontains'],
- 'surname': ['person__surname__icontains',
- 'person__raw_name__icontains'],
- 'email': ['person__email'],
- 'attached_to': 'person__attached_to__pk',
- 'person_types': 'person__person_types__pk__in',
- })
+get_person = get_item(models.Person, 'get_person', 'person')
+
+get_ishtaruser = get_item(models.IshtarUser, 'get_ishtaruser', 'ishtaruser')
def action(request, action_slug, obj_id=None, *args, **kwargs):