csv-detective 0.10.1.dev2576__py3-none-any.whl → 0.10.1.dev2590__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. csv_detective/detection/formats.py +11 -38
  2. csv_detective/format.py +8 -1
  3. csv_detective/formats/binary.py +1 -0
  4. csv_detective/formats/booleen.py +1 -0
  5. csv_detective/formats/code_commune_insee.py +1 -0
  6. csv_detective/formats/code_departement.py +1 -0
  7. csv_detective/formats/code_fantoir.py +1 -0
  8. csv_detective/formats/code_postal.py +1 -0
  9. csv_detective/formats/code_region.py +1 -0
  10. csv_detective/formats/date.py +1 -0
  11. csv_detective/formats/datetime_aware.py +6 -1
  12. csv_detective/formats/datetime_naive.py +3 -0
  13. csv_detective/formats/datetime_rfc822.py +1 -0
  14. csv_detective/formats/float.py +1 -0
  15. csv_detective/formats/geojson.py +1 -0
  16. csv_detective/formats/int.py +2 -1
  17. csv_detective/formats/json.py +1 -0
  18. csv_detective/formats/latitude_l93.py +2 -0
  19. csv_detective/formats/latitude_wgs.py +2 -0
  20. csv_detective/formats/latitude_wgs_fr_metropole.py +2 -0
  21. csv_detective/formats/latlon_wgs.py +1 -0
  22. csv_detective/formats/longitude_l93.py +2 -0
  23. csv_detective/formats/longitude_wgs.py +2 -0
  24. csv_detective/formats/longitude_wgs_fr_metropole.py +2 -0
  25. csv_detective/formats/lonlat_wgs.py +1 -0
  26. csv_detective/formats/siren.py +1 -0
  27. csv_detective/formats/siret.py +1 -0
  28. csv_detective/formats/year.py +1 -0
  29. {csv_detective-0.10.1.dev2576.dist-info → csv_detective-0.10.1.dev2590.dist-info}/METADATA +1 -1
  30. {csv_detective-0.10.1.dev2576.dist-info → csv_detective-0.10.1.dev2590.dist-info}/RECORD +32 -32
  31. {csv_detective-0.10.1.dev2576.dist-info → csv_detective-0.10.1.dev2590.dist-info}/WHEEL +1 -1
  32. {csv_detective-0.10.1.dev2576.dist-info → csv_detective-0.10.1.dev2590.dist-info}/entry_points.txt +0 -0
@@ -82,22 +82,7 @@ def detect_formats(
82
82
  # To reduce false positives: ensure these formats are detected only if the label yields
83
83
  # a detection (skipping the ones that have been excluded by the users).
84
84
  formats_with_mandatory_label = [
85
- f
86
- for f in [
87
- "code_departement",
88
- "code_commune_insee",
89
- "code_postal",
90
- "code_fantoir",
91
- "latitude_wgs",
92
- "longitude_wgs",
93
- "latitude_wgs_fr_metropole",
94
- "longitude_wgs_fr_metropole",
95
- "latitude_l93",
96
- "longitude_l93",
97
- "siren",
98
- "siret",
99
- ]
100
- if f in scores_table.index
85
+ f for f in fmtm.get_formats_with_mandatory_label() if f in scores_table.index
101
86
  ]
102
87
  scores_table.loc[formats_with_mandatory_label, :] = np.where(
103
88
  scores_table_labels.loc[formats_with_mandatory_label, :],
@@ -106,32 +91,16 @@ def detect_formats(
106
91
  )
107
92
  analysis["columns"] = prepare_output_dict(scores_table, limited_output)
108
93
 
109
- metier_to_python_type = {
110
- "booleen": "bool",
111
- "int": "int",
112
- "float": "float",
113
- "string": "string",
114
- "json": "json",
115
- "geojson": "json",
116
- "datetime_aware": "datetime",
117
- "datetime_naive": "datetime",
118
- "datetime_rfc822": "datetime",
119
- "date": "date",
120
- "latitude_l93": "float",
121
- "latitude_wgs": "float",
122
- "latitude_wgs_fr_metropole": "float",
123
- "longitude_l93": "float",
124
- "longitude_wgs": "float",
125
- "longitude_wgs_fr_metropole": "float",
126
- "binary": "binary",
127
- }
128
-
129
94
  if not limited_output:
130
95
  for detection_method in ["columns_fields", "columns_labels", "columns"]:
131
96
  analysis[detection_method] = {
132
97
  col_name: [
133
98
  {
134
- "python_type": metier_to_python_type.get(detection["format"], "string"),
99
+ "python_type": (
100
+ "string"
101
+ if detection["format"] == "string"
102
+ else fmtm.formats[detection["format"]].python_type
103
+ ),
135
104
  **detection,
136
105
  }
137
106
  for detection in detections
@@ -142,7 +111,11 @@ def detect_formats(
142
111
  for detection_method in ["columns_fields", "columns_labels", "columns"]:
143
112
  analysis[detection_method] = {
144
113
  col_name: {
145
- "python_type": metier_to_python_type.get(detection["format"], "string"),
114
+ "python_type": (
115
+ "string"
116
+ if detection["format"] == "string"
117
+ else fmtm.formats[detection["format"]].python_type
118
+ ),
146
119
  **detection,
147
120
  }
148
121
  for col_name, detection in analysis[detection_method].items()
csv_detective/format.py CHANGED
@@ -12,6 +12,8 @@ class Format:
12
12
  labels: list[str] = [],
13
13
  proportion: float = 1,
14
14
  tags: list[str] = [],
15
+ mandatory_label: bool = False,
16
+ python_type: str = "string",
15
17
  ) -> None:
16
18
  """
17
19
  Instanciates a Format object.
@@ -30,6 +32,8 @@ class Format:
30
32
  self.labels: list[str] = labels
31
33
  self.proportion: float = proportion
32
34
  self.tags: list[str] = tags
35
+ self.mandatory_label: bool = mandatory_label
36
+ self.python_type: str = python_type
33
37
 
34
38
  def is_valid_label(self, val: str) -> float:
35
39
  return header_score(val, self.labels)
@@ -49,7 +53,7 @@ class FormatsManager:
49
53
  _test_values=module._test_values,
50
54
  **{
51
55
  attr: val
52
- for attr in ["labels", "proportion", "tags"]
56
+ for attr in ["labels", "proportion", "tags", "mandatory_label", "python_type"]
53
57
  if (val := getattr(module, attr, None))
54
58
  },
55
59
  )
@@ -63,5 +67,8 @@ class FormatsManager:
63
67
  if all(tag in fmt.tags for tag in tags)
64
68
  }
65
69
 
70
+ def get_formats_with_mandatory_label(self) -> dict[str, Format]:
71
+ return {label: fmt for label, fmt in self.formats.items() if fmt.mandatory_label}
72
+
66
73
  def available_tags(self) -> set[str]:
67
74
  return set(tag for format in self.formats.values() for tag in format.tags)
@@ -2,6 +2,7 @@ import codecs
2
2
 
3
3
  proportion = 1
4
4
  tags = ["type"]
5
+ python_type = "binary"
5
6
  labels = ["bytes", "binary", "image", "encode", "content"]
6
7
 
7
8
 
@@ -1,5 +1,6 @@
1
1
  proportion = 1
2
2
  tags = ["type"]
3
+ python_type = "bool"
3
4
  labels = ["is ", "has ", "est "]
4
5
 
5
6
  bool_mapping = {
@@ -2,6 +2,7 @@ from frformat import CodeCommuneInsee, Millesime
2
2
 
3
3
  proportion = 0.75
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "code commune insee",
7
8
  "code insee",
@@ -2,6 +2,7 @@ from frformat import Millesime, NumeroDepartement, Options
2
2
 
3
3
  proportion = 1
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "code departement",
7
8
  "code_departement",
@@ -2,6 +2,7 @@ from frformat import CodeFantoir
2
2
 
3
3
  proportion = 1
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "cadastre1",
7
8
  "code fantoir",
@@ -2,6 +2,7 @@ from frformat import CodePostal
2
2
 
3
3
  proportion = 0.9
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "code postal",
7
8
  "postal code",
@@ -2,6 +2,7 @@ from frformat import CodeRegion, Millesime
2
2
 
3
3
  proportion = 1
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "code region",
7
8
  "reg",
@@ -7,6 +7,7 @@ from dateutil.parser import parse as dateutil_parser
7
7
 
8
8
  proportion = 1
9
9
  tags = ["temp", "type"]
10
+ python_type = "date"
10
11
  SHARED_DATE_LABELS = [
11
12
  "date",
12
13
  "mise à jour",
@@ -4,6 +4,7 @@ from csv_detective.formats.date import SHARED_DATE_LABELS, aaaammjj_pattern, dat
4
4
 
5
5
  proportion = 1
6
6
  tags = ["temp", "type"]
7
+ python_type = "datetime"
7
8
  labels = SHARED_DATE_LABELS + ["datetime", "timestamp"]
8
9
 
9
10
  threshold = 0.7
@@ -12,7 +13,9 @@ pat = (
12
13
  + r"(T|\s)(0\d|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.\d{1,6})"
13
14
  + r"?(([+-](0\d|1[0-9]|2[0-3]):([0-5][0-9]))|Z)$"
14
15
  )
15
- prefix = r"^\d{4}"
16
+ # date_casting is very (too?) good at finding date(time)s where there sometimes is just a number
17
+ # this prefix check asserts we only consider strings that have a somewhat fine structure trying to cast
18
+ prefix = r"^\d{2}[-/:]?\d{2}"
16
19
 
17
20
 
18
21
  def _is(val):
@@ -41,6 +44,8 @@ _test_values = {
41
44
  "2000-12-21 10:20:10.1Z",
42
45
  "2024-12-19T10:53:36.428000+00:00",
43
46
  "1996/06/22 10:20:10 GMT",
47
+ "12/31/2022 12:00:00-04:00",
48
+ "12:00:00-04:00 12/31/2022",
44
49
  ],
45
50
  False: [
46
51
  "2021-06-22T30:20:10",
@@ -6,6 +6,7 @@ from csv_detective.formats.datetime_aware import labels, prefix # noqa
6
6
 
7
7
  proportion = 1
8
8
  tags = ["temp", "type"]
9
+ python_type = "datetime"
9
10
  threshold = 0.7
10
11
 
11
12
  # matches AAAA-MM-JJTHH:MM:SS(.dddddd)Z with any of the listed separators for the date OR NO SEPARATOR
@@ -36,6 +37,8 @@ _test_values = {
36
37
  "2021-06-22 10:20:10",
37
38
  "2030/06-22 00:00:00",
38
39
  "2030/06/22 00:00:00.0028",
40
+ "12/31/2022 12:00:00",
41
+ "12:00:00 12/31/2022",
39
42
  ],
40
43
  False: [
41
44
  "2021-06-22T30:20:10",
@@ -4,6 +4,7 @@ from csv_detective.formats.datetime_aware import labels # noqa
4
4
 
5
5
  proportion = 1
6
6
  tags = ["temp", "type"]
7
+ python_type = "datetime"
7
8
 
8
9
 
9
10
  def _is(val):
@@ -2,6 +2,7 @@ import re
2
2
 
3
3
  proportion = 1
4
4
  tags = ["type"]
5
+ python_type = "float"
5
6
  labels = ["part", "ratio", "taux"]
6
7
 
7
8
  scientific_notation_pattern = r"\d+\.\d+[e|E][+|-]?\d+"
@@ -2,6 +2,7 @@ import json
2
2
 
3
3
  proportion = 1
4
4
  tags = ["geo"]
5
+ python_type = "json"
5
6
  labels = [
6
7
  "json geojson",
7
8
  "json",
@@ -1,5 +1,6 @@
1
- labels = ["nb", "nombre", "nbre"]
2
1
  tag = ["type"]
2
+ python_type = "int"
3
+ labels = ["nb", "nombre", "nbre"]
3
4
 
4
5
 
5
6
  def _is(val):
@@ -2,6 +2,7 @@ import json
2
2
  from json import JSONDecodeError
3
3
 
4
4
  proportion = 1
5
+ python_type = "json"
5
6
  tags = ["type"]
6
7
 
7
8
 
@@ -5,6 +5,8 @@ from csv_detective.formats.float import float_casting
5
5
 
6
6
  proportion = 1
7
7
  tags = ["fr", "geo"]
8
+ mandatory_label = True
9
+ python_type = "float"
8
10
  labels = [
9
11
  "latitude",
10
12
  "lat",
@@ -2,6 +2,8 @@ from csv_detective.formats.float import _is as is_float
2
2
 
3
3
  proportion = 1
4
4
  tags = ["geo"]
5
+ mandatory_label = True
6
+ python_type = "float"
5
7
  labels = [
6
8
  "latitude",
7
9
  "lat",
@@ -2,6 +2,8 @@ from csv_detective.formats.float import _is as is_float
2
2
 
3
3
  proportion = 1
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
6
+ python_type = "float"
5
7
  labels = [
6
8
  "latitude",
7
9
  "lat",
@@ -3,6 +3,7 @@ from csv_detective.formats.longitude_wgs import _is as is_lon
3
3
 
4
4
  proportion = 1
5
5
  tags = ["geo"]
6
+ mandatory_label = True
6
7
 
7
8
  SHARED_COORDS_LABELS = [
8
9
  "ban",
@@ -5,6 +5,8 @@ from csv_detective.formats.float import float_casting
5
5
 
6
6
  proportion = 1
7
7
  tags = ["fr", "geo"]
8
+ mandatory_label = True
9
+ python_type = "float"
8
10
  labels = [
9
11
  "longitude",
10
12
  "lon",
@@ -2,6 +2,8 @@ from csv_detective.formats.float import _is as is_float
2
2
 
3
3
  proportion = 1
4
4
  tags = ["geo"]
5
+ mandatory_label = True
6
+ python_type = "float"
5
7
  labels = [
6
8
  "longitude",
7
9
  "lon",
@@ -2,6 +2,8 @@ from csv_detective.formats.float import _is as is_float
2
2
 
3
3
  proportion = 1
4
4
  tags = ["fr", "geo"]
5
+ mandatory_label = True
6
+ python_type = "float"
5
7
  labels = [
6
8
  "longitude",
7
9
  "lon",
@@ -4,6 +4,7 @@ from csv_detective.formats.longitude_wgs import _is as is_lon
4
4
 
5
5
  proportion = 1
6
6
  tags = ["geo"]
7
+ mandatory_label = True
7
8
 
8
9
  specific = [
9
10
  "lonlat",
@@ -2,6 +2,7 @@ import re
2
2
 
3
3
  proportion = 0.9
4
4
  tags = ["fr"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "siren",
7
8
  "siren organisme designe",
@@ -2,6 +2,7 @@ import re
2
2
 
3
3
  proportion = 0.8
4
4
  tags = ["fr"]
5
+ mandatory_label = True
5
6
  labels = [
6
7
  "siret",
7
8
  "siret d",
@@ -1,5 +1,6 @@
1
1
  proportion = 1
2
2
  tags = ["temp"]
3
+ python_type = "int"
3
4
  labels = [
4
5
  "year",
5
6
  "annee",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: csv-detective
3
- Version: 0.10.1.dev2576
3
+ Version: 0.10.1.dev2590
4
4
  Summary: Detect tabular files column content
5
5
  Keywords: CSV,data processing,encoding,guess,parser,tabular
6
6
  Author: data.gouv.fr
@@ -4,24 +4,24 @@ csv_detective/detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
4
4
  csv_detective/detection/columns.py,sha256=_JtZHBr3aoEmSWh2xVe2ISnt-G7hpnA9vqlvcaGd0Go,2887
5
5
  csv_detective/detection/encoding.py,sha256=KZ8W8BPfZAq9UiP5wgaeupYa5INU8KPz98E2L3XpX2Y,999
6
6
  csv_detective/detection/engine.py,sha256=wQeDKpp2DKF-HcS1R8H6GgQyaUgQme4szPtEHgAjBII,1552
7
- csv_detective/detection/formats.py,sha256=kQEht5lr9hFhYe0Zn1lfj9jOKaqYrXNrM_tkQX24pEk,5410
7
+ csv_detective/detection/formats.py,sha256=9aIE4gwTN8c8pa-kofeJ7zalo8NqjGZabYD-G79kV5I,4734
8
8
  csv_detective/detection/headers.py,sha256=95pTL524Sy5PGxyQ03ofFUaamvlmkxTJQe8u6HfzOkU,1051
9
9
  csv_detective/detection/rows.py,sha256=quf3ZTTFPOo09H-faZ9cRKibb1QGHEKHlpivFRx2Va4,742
10
10
  csv_detective/detection/separator.py,sha256=XjeDBqhiBxVfkCPJKem9BAgJqs_hOgQltc_pxrH_-Tg,1547
11
11
  csv_detective/detection/variables.py,sha256=-QtZOB96z3pWbqnZ-c1RU3yzoYqcO61A0JzeS6JbkxY,3576
12
12
  csv_detective/explore_csv.py,sha256=qSf6N3tbp43BUMJF5wiXz3aYKaTez6ro-75KL2Arci4,7174
13
- csv_detective/format.py,sha256=XX_cSTQc0jlsQq3GUqHi7Cz36AiRrpjrwPmeoOTLMvo,2396
13
+ csv_detective/format.py,sha256=5f3XhqDyGAlSxvNuSOiJhs0qVNuV7JmoJyGVXtaY8Zc,2770
14
14
  csv_detective/formats/__init__.py,sha256=Egiy29kcG3Oz2eE2maYhD3wP29zOSOWyRlOpGD5LGvU,318
15
15
  csv_detective/formats/adresse.py,sha256=jALDpEDAWyAcgqEfNVRg_W1r6XaYuJKD_jAaP2l-bxk,1943
16
- csv_detective/formats/binary.py,sha256=OCGRDh5p27sA4yjrpKIp3b2_PfHJYUe5QxIArf-fCxA,676
17
- csv_detective/formats/booleen.py,sha256=AnDDKShkSYpWO4POhwY2V7_C4yPWbmqBu8CJPgQ9Gwc,648
18
- csv_detective/formats/code_commune_insee.py,sha256=MhwCPVAhwWH-MyaNAIVRNbqKfeNe3oiCpzEGfpHkpJY,504
16
+ csv_detective/formats/binary.py,sha256=eATFZ6JdD6wNu47zKnxG-hB_lA7R34R9grXFJlw7wrU,700
17
+ csv_detective/formats/booleen.py,sha256=Bavi1e89UDEkTWFbkn5YJNtWZnn6gmbt86CweXQAX44,670
18
+ csv_detective/formats/code_commune_insee.py,sha256=9GXruZOR6MY94CjIIcHapDf0rlw0im8omhu7n-7E0gY,528
19
19
  csv_detective/formats/code_csp_insee.py,sha256=_JQ-YbnHMenNnwIg1xBmNVqgCa1tLD2hbPN1soODhDk,656
20
- csv_detective/formats/code_departement.py,sha256=odwVbmktgjEhL-dSFHXuCRVwhkF8bL8G7VlpVTnMY2A,628
21
- csv_detective/formats/code_fantoir.py,sha256=nFVFYJEP2HHE2TyhR_dhGdPCMLfCROBO_B8wxwQn7T8,366
20
+ csv_detective/formats/code_departement.py,sha256=IlDENaJh2aEmjrUMhnphT0f1KwmbEtAu9UANTxssbgg,652
21
+ csv_detective/formats/code_fantoir.py,sha256=XqXx3al20lp1eoxfm9eKqg0iII4NtSWN03lMIH-Tcdg,390
22
22
  csv_detective/formats/code_import.py,sha256=N5NVvnHkRwC7ARHoM77R-2cYSeyNmPoRIn6JL3Fbnjs,346
23
- csv_detective/formats/code_postal.py,sha256=C6XMkiVTxhMFvfyvJmGp3iwvh722EzMwD_UdqQU4aR0,427
24
- csv_detective/formats/code_region.py,sha256=VFKh1rGYVYTNWBJZ2_m0xS4rhJlrI_Gr8q8RXuZCr-w,366
23
+ csv_detective/formats/code_postal.py,sha256=hbE9J4OKi8qLcLEGNtkjzV1SS5RJ2CgzoEs77WahZYo,451
24
+ csv_detective/formats/code_region.py,sha256=DTM7pIHGK-vPc2ZuJ4nNlh0X7lXPl3HJJ3XMbb-UZs0,390
25
25
  csv_detective/formats/code_rna.py,sha256=WExlQtlAUfOFT4N3MKsMBhZVxTdNzgexFjmXhZdRM1w,512
26
26
  csv_detective/formats/code_waldec.py,sha256=kJEJfikbhMfVwtA8hBpup0tpeSFoY_rWrEdXQxgNwhg,297
27
27
  csv_detective/formats/commune.py,sha256=oVpwINGqpwMOT43KkasozipJ9hBeoQ5FrKV_wIeVJGE,532
@@ -31,31 +31,31 @@ csv_detective/formats/data/insee_ape700.txt,sha256=nKgslakENwgE7sPkVNHqR23iXuxF0
31
31
  csv_detective/formats/data/iso_country_code_alpha2.txt,sha256=YyPlDqCdz65ecf4Wes_r0P4rDSJG35niXtjc4MmctXM,1740
32
32
  csv_detective/formats/data/iso_country_code_alpha3.txt,sha256=aYqKSohgXuBtcIBfF52f8JWYDdxL_HV_Ol1srGnWBp4,1003
33
33
  csv_detective/formats/data/iso_country_code_numeric.txt,sha256=2GtEhuporsHYV-pU4q9kfXU5iOtfW5C0GYBTTKQtnnA,1004
34
- csv_detective/formats/date.py,sha256=X4ohXaFO8cXPJktUSumc3bfdlbDIWEYTG8S9ugVRcsE,2730
34
+ csv_detective/formats/date.py,sha256=INqXv2l5wMID2FMHPqOsnrwMKuB587e_RoQ0rq3ap50,2752
35
35
  csv_detective/formats/date_fr.py,sha256=3hTw5RommrhcgECFRSt9KgyB9zyi1j4W3UygEHmRgoE,502
36
- csv_detective/formats/datetime_aware.py,sha256=kSEVLAovUJEYYFMFk4RiHY50rnPkDlrjfUFwk7ogJYQ,1587
37
- csv_detective/formats/datetime_naive.py,sha256=CVC-yey5uoPAAr8VnrY_HbLUGOk9dqduM5yLAvAhgfc,1591
38
- csv_detective/formats/datetime_rfc822.py,sha256=l-SLb34hSuHxC2JQ-9SD-nG38JqzoozwUZiGtoybb0A,601
36
+ csv_detective/formats/datetime_aware.py,sha256=7ARCYgNBkVKt8eVLKR3ZzTodZAFRqqsLzxjqP5UdFD0,1903
37
+ csv_detective/formats/datetime_naive.py,sha256=DZ0apAm3vIy4cdm5DynAeRueI_8rhuHYQtAOZ5yyZ5k,1681
38
+ csv_detective/formats/datetime_rfc822.py,sha256=URyS-_5zyImWwY-IX3hSGueyCJfQkfvVDpD2UsDzW3g,627
39
39
  csv_detective/formats/departement.py,sha256=UP9UF23BFq_-mIS8N10K5XkoCXwPmDeSoa_7lCAkI4w,768
40
40
  csv_detective/formats/email.py,sha256=Qen2EBDYY5TtWXwxrrTGWRrbIybz0ySlVpl4ZRk8pzA,517
41
- csv_detective/formats/float.py,sha256=DF8CwBC4Vk-PFRlIawDr6OUPTtZjAiKYguvilDGUcmY,1033
42
- csv_detective/formats/geojson.py,sha256=udbBxCBRmb0o6TD8z5ryemfqdinBz6njNJU0XcbfMig,757
41
+ csv_detective/formats/float.py,sha256=YhZ2EX1MtazSLuh1xyRHq0OoZxMUrNoRgXZd8h_HRkU,1056
42
+ csv_detective/formats/geojson.py,sha256=oV5pJo2yWxeEdvCEmM4tGhp0D8Joz2RZzKCvlkh7yJ8,779
43
43
  csv_detective/formats/insee_ape700.py,sha256=cLs3Eersqm4wX6oqsqp0Vb3WGPJb2xY5Za_vh0uLgKc,780
44
44
  csv_detective/formats/insee_canton.py,sha256=Q5jczsOmh1wPP2KtDkcmqZ7Hlv50Zz9YvPIbxy46qs0,531
45
- csv_detective/formats/int.py,sha256=ZBUOn50luMtlNKWPyOaMIkY3J4f4hA0MqwcoFtksozU,482
45
+ csv_detective/formats/int.py,sha256=sVGVWPlPtdErY7b2g0HgsSExwuMEfkPJw6qrPoEJjHo,503
46
46
  csv_detective/formats/iso_country_code_alpha2.py,sha256=vIep_j0xuqlXKyuvk8c8GaJC73HuJqKfQ4QzQKHsPc0,613
47
47
  csv_detective/formats/iso_country_code_alpha3.py,sha256=yOmm91O8ot6KoUBfss5cqykDfeeMNCwafDAvPNvbufA,668
48
48
  csv_detective/formats/iso_country_code_numeric.py,sha256=989ypOmjIrNTV9vFnrBlbpRWQ9whd3Rv9gNasdF_O4g,685
49
49
  csv_detective/formats/jour_de_la_semaine.py,sha256=c5QBw9eZfwRs_jL_Ckm95UH-TxlExdFmfZNYW7-_iZI,606
50
- csv_detective/formats/json.py,sha256=E-s7IHW0q5WgAJVK0I-5Rv7W_RdofROB5wnIXbNegZQ,446
51
- csv_detective/formats/latitude_l93.py,sha256=GteGpxAht-jeOBLr_deCuEXA_LliVYIAmyr_7jFAWgI,986
52
- csv_detective/formats/latitude_wgs.py,sha256=HPcFlLzJNqynLugDQ07vO04rOCNBuAabVJEP8FQ89Q0,780
53
- csv_detective/formats/latitude_wgs_fr_metropole.py,sha256=ruGzQLJPiMV2AlnsBneQIhMzstseddzWA0bDg5gfTG4,791
54
- csv_detective/formats/latlon_wgs.py,sha256=CbNi4Y-ZgBfNyYi54xwcZGLpEusiLAWVpFP1YgHtI1M,1224
55
- csv_detective/formats/longitude_l93.py,sha256=vJE4k_DyQOjAruqu_Q0E2sJKZB4mXGGN6bS9WCelsbs,768
56
- csv_detective/formats/longitude_wgs.py,sha256=DUZCUxJQl53HHVQbXlz_lWXoAZhy3MvJWcPNdiK5cCM,552
57
- csv_detective/formats/longitude_wgs_fr_metropole.py,sha256=wPlJP06K0BVWfrx1wwEAKK93AKIqvsuw705gKAlWAfQ,550
58
- csv_detective/formats/lonlat_wgs.py,sha256=BgtTl2ReI0hSQB-7mcR4TDxx-QzvA1B9fiZWxTb5xPI,1005
50
+ csv_detective/formats/json.py,sha256=KkqI5fP32EGSGeBPwE1CwUlWHhjla4cLOOmXp5Sja7E,468
51
+ csv_detective/formats/latitude_l93.py,sha256=V0rdKmCgfWLdssoN5xaoDM9vSK4KmhCw_lSaX23i-sI,1033
52
+ csv_detective/formats/latitude_wgs.py,sha256=W-SB8kfe4Kbz3erZ2GHTOPah3Y0gk_0jOGAnRHJWYko,827
53
+ csv_detective/formats/latitude_wgs_fr_metropole.py,sha256=ZO6xxYb7FEtYxA9Jrzhi7ZzW0-WKvGrD1smm7hZP_Zs,838
54
+ csv_detective/formats/latlon_wgs.py,sha256=0tEwF8ITWKcuZwfzaXm5EZKNiKGEfJ0JINAWALPHNDk,1248
55
+ csv_detective/formats/longitude_l93.py,sha256=uYEiRa6pqCIrfCh22XQ-sURZWQZqWymqnNpSkvuedTE,815
56
+ csv_detective/formats/longitude_wgs.py,sha256=1EqeynDb8QDLXR8pf4ogFuI9UWD9eIqb49blSLTwRL4,599
57
+ csv_detective/formats/longitude_wgs_fr_metropole.py,sha256=RzckeV6a1y9UfqqBmVQfdyDHD9Kk7x-vAwt6PATj5A4,597
58
+ csv_detective/formats/lonlat_wgs.py,sha256=zXqT-wWXx99qKfmWGfXfBZsAa5570RyaBTtB9B30QV4,1029
59
59
  csv_detective/formats/mois_de_lannee.py,sha256=4_mmdr9S83utVCgPaK_epkeBm2mhwdUWQEoB_Fhdh2o,759
60
60
  csv_detective/formats/money.py,sha256=HpjrmfUmbG8sXF557XbYzQ7TLtpNVRgpC991gGokO8I,414
61
61
  csv_detective/formats/mongo_object_id.py,sha256=XsiP4iMxfBBIeuL-4g5bm3jgS6yUMJC2X5CmrEJ40oI,296
@@ -63,14 +63,14 @@ csv_detective/formats/pays.py,sha256=FRvoQwIWiKbm0RC62Sus1X0Y_yJ-cfvdB5RYhkY-4NY
63
63
  csv_detective/formats/percent.py,sha256=s6eQBMwJr2uyTZMUCK1_ifA0c4Rt2iEe9_E_hKKU_mk,308
64
64
  csv_detective/formats/region.py,sha256=CkN7JTsZB1X3bH5xohbtMCxL5BX9MSpith36_1mHMd4,1483
65
65
  csv_detective/formats/sexe.py,sha256=yioD4W6EkgUgo74rxn6KLZtN_0XYXtmA4mqVyI7e1mU,387
66
- csv_detective/formats/siren.py,sha256=ieLe50vdSnkXadcUI8VXnnId9GFGHyIBWVTP6bJtyMo,758
67
- csv_detective/formats/siret.py,sha256=ehkZgOH-HggN6IgxF4G0DMut_6giZ3gc4g9wMdwZFHQ,997
66
+ csv_detective/formats/siren.py,sha256=i3e4LDsHkmi3nOjKG52g42AzcMvNPwg-SoHD0EEtKWI,782
67
+ csv_detective/formats/siret.py,sha256=4sRuDKkumDWdBS3lm0RQhq4kSqH4CDXMarchy6ubt-M,1021
68
68
  csv_detective/formats/tel_fr.py,sha256=yKCqIlqKO2yKucCoCjYfSjqNKfTjqFcmNXxg6THG0WE,624
69
69
  csv_detective/formats/uai.py,sha256=uT5gjdTmoFH9QPZdTFkJgiyuKLW0B6KmT6yqHQeaeOU,711
70
70
  csv_detective/formats/url.py,sha256=j6tCbcEzQw7U53ixeeFfhzueN8syVgQsjmAmY7RRWdU,1049
71
71
  csv_detective/formats/username.py,sha256=y38OggfWpEQsGi0JnD9QRM30musa29lO6nz-qybR24U,249
72
72
  csv_detective/formats/uuid.py,sha256=ekMEFfzQtz0cLudzmu3AoCM0Yf5pu23qAcFNFgHWJ1A,346
73
- csv_detective/formats/year.py,sha256=pkAfYPKZdy0g1ZoHGgJNpgTS5y5weGEKXCVMGaxIX8k,472
73
+ csv_detective/formats/year.py,sha256=-cPDlMERnnv-toy4SI1X7DhBdgSpNovg5nzM5IFxOKE,493
74
74
  csv_detective/output/__init__.py,sha256=ALSq_tgX7rGyh--7rmbKz8wHkmResN0h7mNujndow3w,2103
75
75
  csv_detective/output/dataframe.py,sha256=Hnd-AY51U0JMACcpuaK9wwO4oCX9Nd7ZLUTqavgJWRA,3406
76
76
  csv_detective/output/example.py,sha256=8LWheSBYCeDFfarbnmzBrdCbTd8Alh1U4pfXMKfabOw,8630
@@ -86,7 +86,7 @@ csv_detective/parsing/load.py,sha256=f-8aKiNpy_47qg4Lq-UZUR4NNrbJ_-KEGvcUQZ8cmb0
86
86
  csv_detective/parsing/text.py,sha256=uz8wfmNTQnOd_4fjrIZ_5rxmFmgrg343hJh2szB73Hc,1770
87
87
  csv_detective/utils.py,sha256=RJ_zFOJ1DRY8HtDrKPiCdNk5gU6-KwOrOKOyfSkBZZY,1118
88
88
  csv_detective/validate.py,sha256=CjZXhhDP-n6wGgEqbwrGRqebU8L5bidwnvQp-TbnvFA,5424
89
- csv_detective-0.10.1.dev2576.dist-info/WHEEL,sha256=z-mOpxbJHqy3cq6SvUThBZdaLGFZzdZPtgWLcP2NKjQ,79
90
- csv_detective-0.10.1.dev2576.dist-info/entry_points.txt,sha256=1J86TQNCanjsLMboAufdEUla03qEQaC9QmVGYgt2FCQ,57
91
- csv_detective-0.10.1.dev2576.dist-info/METADATA,sha256=h08HHBWPN3GbYHYQOxg7dOot4b8hyKAIfG2cTZO6cqk,11064
92
- csv_detective-0.10.1.dev2576.dist-info/RECORD,,
89
+ csv_detective-0.10.1.dev2590.dist-info/WHEEL,sha256=93kfTGt3a0Dykt_T-gsjtyS5_p8F_d6CE1NwmBOirzo,79
90
+ csv_detective-0.10.1.dev2590.dist-info/entry_points.txt,sha256=1J86TQNCanjsLMboAufdEUla03qEQaC9QmVGYgt2FCQ,57
91
+ csv_detective-0.10.1.dev2590.dist-info/METADATA,sha256=j1vkTQFTY-hR0lLqp-dwtvpm7lQwSVHyO1tJQ6vA124,11064
92
+ csv_detective-0.10.1.dev2590.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.15
2
+ Generator: uv 0.9.16
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any