1import os 2import json 3import gzip 4import zipfile 5 6 7# Helpers 8 9 10def read_asset(*paths): 11 dirname = os.path.dirname(__file__) 12 with open(os.path.join(dirname, "assets", *paths)) as file: 13 return file.read().strip() 14 15 16# General 17 18 19UNDEFINED = object() 20VERSION = read_asset("VERSION") 21COMPRESSION_FORMATS = ["zip", "gz"] 22INQUIRY_PROFILE = json.loads(read_asset("profiles", "inquiry.json")) 23PIPELINE_PROFILE = json.loads(read_asset("profiles", "pipeline.json")) 24REPORT_PROFILE = json.loads(read_asset("profiles", "report.json")) 25STATUS_PROFILE = json.loads(read_asset("profiles", "status.json")) 26SCHEMA_PROFILE = json.loads(read_asset("profiles", "schema", "general.json")) 27RESOURCE_PROFILE = json.loads(read_asset("profiles", "resource", "general.json")) 28TABULAR_RESOURCE_PROFILE = json.loads(read_asset("profiles", "resource", "tabular.json")) 29PACKAGE_PROFILE = json.loads(read_asset("profiles", "package", "general.json")) 30FISCAL_PACKAGE_PROFILE = json.loads(read_asset("profiles", "package", "fiscal.json")) 31TABULAR_PACKAGE_PROFILE = json.loads(read_asset("profiles", "package", "tabular.json")) 32GEOJSON_PROFILE = json.loads(read_asset("profiles", "geojson", "general.json")) 33TOPOJSON_PROFILE = json.loads(read_asset("profiles", "geojson", "topojson.json")) 34 35 36# Defaults 37 38 39DEFAULT_SCHEME = "file" 40DEFAULT_FORMAT = "csv" 41DEFAULT_HASHING = "md5" 42DEFAULT_ENCODING = "utf-8" 43DEFAULT_INNERPATH = "" 44DEFAULT_COMPRESSION = "" 45DEFAULT_HEADER = True 46DEFAULT_HEADER_ROWS = [1] 47DEFAULT_HEADER_JOIN = " " 48DEFAULT_HEADER_CASE = True 49DEFAULT_FLOAT_NUMBERS = False 50DEFAULT_MISSING_VALUES = [""] 51DEFAULT_LIMIT_ERRORS = 1000 52DEFAULT_LIMIT_MEMORY = 1000 53DEFAULT_BUFFER_SIZE = 10000 54DEFAULT_SAMPLE_SIZE = 100 55DEFAULT_ENCODING_CONFIDENCE = 0.5 56DEFAULT_FIELD_CONFIDENCE = 0.9 57DEFAULT_PACKAGE_PROFILE = "data-package" 58DEFAULT_RESOURCE_PROFILE = "data-resource" 59DEFAULT_TABULAR_RESOURCE_PROFILE = "tabular-data-resource" 60DEFAULT_TRUE_VALUES = ["true", "True", "TRUE", "1"] 61DEFAULT_FALSE_VALUES = ["false", "False", "FALSE", "0"] 62DEFAULT_DATETIME_PATTERN = "%Y-%m-%dT%H:%M:%S%z" 63DEFAULT_DATE_PATTERN = "%Y-%m-%d" 64DEFAULT_TIME_PATTERN = "%H:%M:%S%z" 65DEFAULT_BARE_NUMBER = True 66DEFAULT_FLOAT_NUMBER = False 67DEFAULT_GROUP_CHAR = "" 68DEFAULT_DECIMAL_CHAR = "." 69DEFAULT_SERVER_PORT = 8000 70DEFAULT_CANDIDATES = [ 71 {"type": "yearmonth"}, 72 {"type": "geopoint"}, 73 {"type": "duration"}, 74 {"type": "geojson"}, 75 {"type": "object"}, 76 {"type": "array"}, 77 {"type": "datetime"}, 78 {"type": "time"}, 79 {"type": "date"}, 80 {"type": "integer"}, 81 {"type": "number"}, 82 {"type": "boolean"}, 83 {"type": "year"}, 84 {"type": "string"}, 85] 86 87 88# Backports 89 90 91# It can be removed after dropping support for Python 3.6 and Python 3.7 92COMPRESSION_EXCEPTIONS = ( 93 (zipfile.BadZipFile, gzip.BadGzipFile) 94 if hasattr(gzip, "BadGzipFile") 95 else (zipfile.BadZipFile) 96) 97