def start_import(request, instance): import_type = request.REQUEST['type'] if import_type == TreeImportEvent.import_type: kwargs = { 'plot_length_conversion_factor': float(request.REQUEST.get('unit_plot_length', 1.0)), 'plot_width_conversion_factor': float(request.REQUEST.get('unit_plot_width', 1.0)), 'diameter_conversion_factor': float(request.REQUEST.get('unit_diameter', 1.0)), 'tree_height_conversion_factor': float(request.REQUEST.get('unit_tree_height', 1.0)), 'canopy_height_conversion_factor': float(request.REQUEST.get('unit_canopy_height', 1.0)) } else: kwargs = { 'max_diameter_conversion_factor': get_conversion_factor(instance, 'tree', 'diameter'), 'max_tree_height_conversion_factor': get_conversion_factor(instance, 'tree', 'height') } process_csv(request, instance, import_type, **kwargs) return list_imports(request, instance)
def start_import(request, instance): import_type = request.REQUEST['type'] if import_type == TreeImportEvent.import_type: factors = { 'plot_length_conversion_factor': 'unit_plot_length', 'plot_width_conversion_factor': 'unit_plot_width', 'diameter_conversion_factor': 'unit_diameter', 'tree_height_conversion_factor': 'unit_tree_height', 'canopy_height_conversion_factor': 'unit_canopy_height' } kwargs = { k: float(request.REQUEST.get(v, 1.0)) for (k, v) in factors.items() } else: kwargs = { 'max_diameter_conversion_factor': get_conversion_factor(instance, 'tree', 'diameter'), 'max_tree_height_conversion_factor': get_conversion_factor(instance, 'tree', 'height') } process_csv(request, instance, import_type, **kwargs) return list_imports(request, instance)
def instance_info(request, instance): """ Get all the info we need about a given instance If also includes info about the fields available for the instance. If a user has been specified the field info will be tailored to that user """ user = request.user role = instance.default_role if user and not user.is_anonymous(): instance_user = user.get_instance_user(instance) if instance_user: role = instance_user.role perms = {} fields_to_allow = instance.mobile_api_fields for fp in role.fieldpermission_set.all(): model = fp.model_name.lower() if fields_to_allow and \ fp.field_name not in fields_to_allow.get(model, []): continue if fp.allows_reads: if model not in perms: perms[model] = [] if is_json_field_reference(fp.field_name): choices = None data_type = "string" else: model_inst = safe_get_model_class(fp.model_name)( instance=instance) data_type, _, choices = field_type_label_choices( model_inst, fp.field_name, fp.display_field_name) digits = get_digits_if_formattable( instance, model, fp.field_name) units = get_units_if_convertible( instance, model, fp.field_name) factor = 1.0 try: factor = get_conversion_factor( instance, model, fp.field_name) except KeyError: pass perms[model].append({ 'data_type': data_type, 'choices': choices, 'units': units, 'digits': digits, 'canonical_units_factor': 1.0 / factor, 'can_write': fp.allows_writes, 'display_name': fp.display_field_name, 'field_name': fp.field_name, 'field_key': '%s.%s' % (model, fp.field_name) }) info = _instance_info_dict(instance) info['fields'] = perms info['search'] = instance.mobile_search_fields public_config_keys = ['scss_variables'] info['config'] = {x: instance.config[x] for x in instance.config if x in public_config_keys} if instance.logo: info['logoUrl'] = instance.logo.url return info
def instance_info(request, instance): """ Get all the info we need about a given instance It also includes info about the fields available for the instance. If a user has been specified the field info will be tailored to that user """ user = request.user role = instance.default_role if user and not user.is_anonymous(): instance_user = user.get_instance_user(instance) if instance_user: role = instance_user.role collection_udfs = instance.userdefinedfielddefinition_set\ .filter(iscollection=True) collection_udf_dict = { "%s.%s" % (udf.model_type.lower(), udf.canonical_name): udf for udf in collection_udfs } # collect perms for the given role/instance into a serializable # dictionary. If a field isn't at least readable, it doesn't # get sent over at all. perms = {} for fp in role_permissions(role, instance): model = fp.model_name.lower() field_key = '%s.%s' % (model, fp.field_name) if fp.allows_reads: if field_key in collection_udf_dict: choices = [] data_type = json.loads(collection_udf_dict[field_key].datatype) elif is_json_field_reference(fp.field_name): choices = None data_type = "string" else: model_inst = safe_get_model_class( fp.model_name)(instance=instance) data_type, __, choices = field_type_label_choices( model_inst, fp.field_name, fp.display_field_name) digits = get_digits_if_formattable(instance, model, fp.field_name) units = get_units_if_convertible(instance, model, fp.field_name) factor = 1.0 try: factor = get_conversion_factor(instance, model, fp.field_name) except KeyError: pass perms[field_key] = { 'data_type': data_type, 'choices': choices, 'units': units, 'digits': digits, 'canonical_units_factor': 1.0 / factor, 'can_write': fp.allows_writes, 'display_name': fp.display_field_name, 'field_name': fp.field_name, 'field_key': field_key, 'is_collection': field_key in collection_udf_dict } def get_key_for_group(field_group): for key in ('collection_udf_keys', 'field_keys'): if key in field_group: return key return None # Remove fields from mobile_api_fields if they are not present in perms # (Generally because the user doesn't have read permissions) # If no fields are left in a group, remove the group mobile_api_fields = copy.deepcopy(instance.mobile_api_fields) for field_group in mobile_api_fields: # Field group headers are stored in English, and translated when they # are sent out to the client field_group['header'] = _(field_group['header']) key = get_key_for_group(field_group) if key: field_group[key] = [ field for field in field_group[key] if field in perms ] readable_mobile_api_fields = [ group for group in mobile_api_fields if group.get(get_key_for_group(group), None) ] info = _instance_info_dict(instance) info['fields'] = perms info['field_key_groups'] = readable_mobile_api_fields info['search'] = instance.mobile_search_fields info['date_format'] = _unicode_dateformat(instance.date_format) info['short_date_format'] = _unicode_dateformat(instance.short_date_format) info['meta_perms'] = { 'can_add_tree': perms_lib.plot_is_creatable(role), 'can_edit_tree': perms_lib.plot_is_writable(role), 'can_edit_tree_photo': perms_lib.treephoto_is_writable(role), } public_config_keys = ['scss_variables'] info['config'] = { x: instance.config[x] for x in instance.config if x in public_config_keys } if instance.logo: info['logoUrl'] = instance.logo.url return info
def instance_info(request, instance): """ Get all the info we need about a given instance It also includes info about the fields available for the instance. If a user has been specified the field info will be tailored to that user """ user = request.user role = instance.default_role if user and not user.is_anonymous(): instance_user = user.get_instance_user(instance) if instance_user: role = instance_user.role collection_udfs = instance.userdefinedfielddefinition_set\ .filter(iscollection=True) collection_udf_dict = {"%s.%s" % (udf.model_type.lower(), udf.canonical_name): udf for udf in collection_udfs} # collect perms for the given role/instance into a serializable # dictionary. If a field isn't at least readable, it doesn't # get sent over at all. perms = {} for fp in role_permissions(role, instance): model = fp.model_name.lower() field_key = '%s.%s' % (model, fp.field_name) if fp.allows_reads: if field_key in collection_udf_dict: choices = [] data_type = json.loads(collection_udf_dict[field_key].datatype) elif is_json_field_reference(fp.field_name): choices = None data_type = "string" else: model_inst = safe_get_model_class(fp.model_name)( instance=instance) data_type, __, choices = field_type_label_choices( model_inst, fp.field_name, fp.display_field_name) digits = get_digits_if_formattable( instance, model, fp.field_name) units = get_units_if_convertible( instance, model, fp.field_name) factor = 1.0 try: factor = get_conversion_factor( instance, model, fp.field_name) except KeyError: pass perms[field_key] = { 'data_type': data_type, 'choices': choices, 'units': units, 'digits': digits, 'canonical_units_factor': 1.0 / factor, 'can_write': fp.allows_writes, 'display_name': fp.display_field_name, 'field_name': fp.field_name, 'field_key': field_key, 'is_collection': field_key in collection_udf_dict } def get_key_for_group(field_group): for key in ('collection_udf_keys', 'field_keys'): if key in field_group: return key return None # Remove fields from mobile_api_fields if they are not present in perms # (Generally because the user doesn't have read permissions) # If no fields are left in a group, remove the group mobile_api_fields = copy.deepcopy(instance.mobile_api_fields) for field_group in mobile_api_fields: key = get_key_for_group(field_group) if key: field_group[key] = [field for field in field_group[key] if field in perms] readable_mobile_api_fields = [group for group in mobile_api_fields if group.get(get_key_for_group(group), None)] info = _instance_info_dict(instance) info['fields'] = perms info['field_key_groups'] = readable_mobile_api_fields info['search'] = instance.mobile_search_fields info['date_format'] = _unicode_dateformat(instance.date_format) info['short_date_format'] = _unicode_dateformat(instance.short_date_format) info['meta_perms'] = { 'can_add_tree': perms_lib.plot_is_creatable(role), 'can_edit_tree': perms_lib.plot_is_writable(role), 'can_edit_tree_photo': perms_lib.treephoto_is_writable(role), } public_config_keys = ['scss_variables'] info['config'] = {x: instance.config[x] for x in instance.config if x in public_config_keys} if instance.logo: info['logoUrl'] = instance.logo.url return info
def instance_info(request, instance): """ Get all the info we need about a given instance If also includes info about the fields available for the instance. If a user has been specified the field info will be tailored to that user """ user = request.user role = instance.default_role if user and not user.is_anonymous(): instance_user = user.get_instance_user(instance) if instance_user: role = instance_user.role perms = {} collection_udfs = instance.userdefinedfielddefinition_set\ .filter(iscollection=True) collection_udf_dict = { "%s.%s" % (udf.model_type.lower(), udf.canonical_name): udf for udf in collection_udfs } for fp in role.fieldpermission_set.all(): model = fp.model_name.lower() field_key = '%s.%s' % (model, fp.field_name) if fp.allows_reads: if field_key in collection_udf_dict: choices = [] data_type = collection_udf_dict[field_key].datatype elif is_json_field_reference(fp.field_name): choices = None data_type = "string" else: model_inst = safe_get_model_class( fp.model_name)(instance=instance) data_type, _, choices = field_type_label_choices( model_inst, fp.field_name, fp.display_field_name) digits = get_digits_if_formattable(instance, model, fp.field_name) units = get_units_if_convertible(instance, model, fp.field_name) factor = 1.0 try: factor = get_conversion_factor(instance, model, fp.field_name) except KeyError: pass perms[field_key] = { 'data_type': data_type, 'choices': choices, 'units': units, 'digits': digits, 'canonical_units_factor': 1.0 / factor, 'can_write': fp.allows_writes, 'display_name': fp.display_field_name, 'field_name': fp.field_name, 'field_key': field_key, 'is_collection': field_key in collection_udf_dict } info = _instance_info_dict(instance) info['fields'] = perms info['field_key_groups'] = instance.mobile_api_fields info['search'] = instance.mobile_search_fields public_config_keys = ['scss_variables'] info['config'] = { x: instance.config[x] for x in instance.config if x in public_config_keys } if instance.logo: info['logoUrl'] = instance.logo.url return info
def instance_info(request, instance): """ Get all the info we need about a given instance It also includes info about the fields available for the instance. If a user has been specified the field info will be tailored to that user """ user = request.user role = instance.default_role if user and not user.is_anonymous(): instance_user = user.get_instance_user(instance) if instance_user: role = instance_user.role perms = {} collection_udfs = instance.userdefinedfielddefinition_set\ .filter(iscollection=True) collection_udf_dict = {"%s.%s" % (udf.model_type.lower(), udf.canonical_name): udf for udf in collection_udfs} for fp in role.fieldpermission_set.all(): model = fp.model_name.lower() field_key = '%s.%s' % (model, fp.field_name) if fp.allows_reads: if field_key in collection_udf_dict: choices = [] data_type = collection_udf_dict[field_key].datatype elif is_json_field_reference(fp.field_name): choices = None data_type = "string" else: model_inst = safe_get_model_class(fp.model_name)( instance=instance) data_type, _, choices = field_type_label_choices( model_inst, fp.field_name, fp.display_field_name) digits = get_digits_if_formattable( instance, model, fp.field_name) units = get_units_if_convertible( instance, model, fp.field_name) factor = 1.0 try: factor = get_conversion_factor( instance, model, fp.field_name) except KeyError: pass perms[field_key] = { 'data_type': data_type, 'choices': choices, 'units': units, 'digits': digits, 'canonical_units_factor': 1.0 / factor, 'can_write': fp.allows_writes, 'display_name': fp.display_field_name, 'field_name': fp.field_name, 'field_key': field_key, 'is_collection': field_key in collection_udf_dict } info = _instance_info_dict(instance) info['fields'] = perms info['field_key_groups'] = instance.mobile_api_fields info['search'] = instance.mobile_search_fields public_config_keys = ['scss_variables'] info['config'] = {x: instance.config[x] for x in instance.config if x in public_config_keys} if instance.logo: info['logoUrl'] = instance.logo.url return info