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