def guess_destination_and_type(field_name: str, sample_value: Optional[str]) -> Tuple: if field_name == "id": # The uploader *probably* does not mean to use the id field (possibly originating # from another AmCAT instance). return None, None from navigator.views.articleset_upload_views import CORE_FIELDS if field_name in CORE_FIELDS: return field_name, None # Guess based on field_name: ptype = get_property_primitive_type(field_name) if ptype != str: if ptype == float: return field_name, "num" elif ptype == int: return field_name, "int" elif ptype == datetime.datetime: return field_name, "date" else: raise ValueError( "Did not recognize return value of get_property_primitive_type: {}" .format(ptype)) # Guess based on sample value if sample_value is None: # Not able to guess something, do not recommend anything return None, None # Guess datetime try: iso8601.parse_date(sample_value) except iso8601.ParseError: pass else: return get_fieldname_tuple(field_name, "date") # TODO: Guess datetime based on DATE_INPUT_TYPES of Django # Guess int try: int(sample_value) except ValueError: pass else: return get_fieldname_tuple(field_name, "int") # Guess float try: float(sample_value) except ValueError: pass else: return get_fieldname_tuple(field_name, "num") if sample_value.startswith(("https://", "http://")): return get_fieldname_tuple(field_name, "url") return field_name, "default"
def guess_destination_and_type(field_name: str, sample_value: Optional[str]) -> Tuple: if field_name == "id": # The uploader *probably* does not mean to use the id field (possibly originating # from another AmCAT instance). return None, None from navigator.views.articleset_upload_views import CORE_FIELDS if field_name in CORE_FIELDS: return field_name, None # Guess based on field_name: ptype = get_property_primitive_type(field_name) if ptype != str: if ptype == float: return field_name, "num" elif ptype == int: return field_name, "int" elif ptype == datetime.datetime: return field_name, "date" else: raise ValueError("Did not recognize return value of get_property_primitive_type: {}".format(ptype)) # Guess based on sample value if sample_value is None: # Not able to guess something, do not recommend anything return None, None # Guess datetime try: iso8601.parse_date(sample_value) except iso8601.ParseError: pass else: return get_fieldname_tuple(field_name, "date") # TODO: Guess datetime based on DATE_INPUT_TYPES of Django # Guess int try: int(sample_value) except ValueError: pass else: return get_fieldname_tuple(field_name, "int") # Guess float try: float(sample_value) except ValueError: pass else: return get_fieldname_tuple(field_name, "num") if sample_value.startswith(("https://", "http://")): return get_fieldname_tuple(field_name, "url") return field_name, "default"
def parse_value(property: str, value: str): t = get_property_primitive_type(property) parser = get_parser(t) return parser(value)
def parse_value(self, property, value): t = get_property_primitive_type(property) parser = PARSERS[t] return parser(value)