Skip to content

Commit fdc5497

Browse files
authored
Merge pull request #67 from keboola/fix/separator-delimiter-from-manifest
Fix/separator delimiter from manifest
2 parents f264dcd + 8032119 commit fdc5497

17 files changed

Lines changed: 1207 additions & 57 deletions

File tree

docs/dao.html

Lines changed: 73 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,6 +2151,15 @@ <h2 id="args">Args</h2>
21512151
self.delete_where_column = None
21522152
self.delete_where_operator = None
21532153

2154+
if kwargs.get(&#39;delete_where_values&#39;):
2155+
self.delete_where_values = kwargs[&#39;delete_where_values&#39;]
2156+
2157+
if kwargs.get(&#39;delete_where_column&#39;):
2158+
self.delete_where_column = kwargs[&#39;delete_where_column&#39;]
2159+
2160+
if kwargs.get(&#39;delete_where_operator&#39;):
2161+
self.delete_where_operator = kwargs[&#39;delete_where_operator&#39;]
2162+
21542163
self.set_delete_where_from_dict(delete_where)
21552164
self.write_always = write_always
21562165

@@ -2185,7 +2194,8 @@ <h2 id="args">Args</h2>
21852194
delimiter: Optional[str] = &#39;,&#39;,
21862195
delete_where: Optional[dict] = None,
21872196
write_always: Optional[bool] = False,
2188-
schema: Optional[List[ColumnDefinition]] = None,
2197+
schema: Optional[Union[TypeOrderedDict[str, ColumnDefinition], list[str]]] = None,
2198+
**kwargs
21892199
):
21902200
&#34;&#34;&#34;
21912201
Factory method for creating a TableDefinition instance for output tables.
@@ -2220,6 +2230,7 @@ <h2 id="args">Args</h2>
22202230
delete_where=delete_where,
22212231
write_always=write_always,
22222232
schema=schema,
2233+
**kwargs
22232234
)
22242235

22252236
@classmethod
@@ -2237,7 +2248,7 @@ <h2 id="args">Args</h2>
22372248
delete_where: Optional[dict] = None,
22382249
stage: Optional[str] = &#39;in&#39;,
22392250
write_always: Optional[bool] = False,
2240-
schema: Optional[List[ColumnDefinition]] = None,
2251+
schema: Optional[Union[TypeOrderedDict[str, ColumnDefinition], list[str]]] = None,
22412252
rows_count: Optional[int] = None,
22422253
data_size_bytes: Optional[int] = None,
22432254
is_alias: Optional[bool] = False,
@@ -2247,7 +2258,9 @@ <h2 id="args">Args</h2>
22472258
id: Optional[str] = &#39;&#39;,
22482259
created: Optional[str] = None,
22492260
last_change_date: Optional[str] = None,
2250-
last_import_date: Optional[str] = None):
2261+
last_import_date: Optional[str] = None,
2262+
**kwargs
2263+
):
22512264
&#34;&#34;&#34;
22522265
Factory method for creating a TableDefinition instance for input tables.
22532266

@@ -2302,7 +2315,9 @@ <h2 id="args">Args</h2>
23022315
id=id,
23032316
created=created,
23042317
last_change_date=last_change_date,
2305-
last_import_date=last_import_date)
2318+
last_import_date=last_import_date,
2319+
**kwargs
2320+
)
23062321

23072322
@classmethod
23082323
def convert_to_column_definition(cls, column_name, column_metadata, primary_key=False):
@@ -2390,6 +2405,9 @@ <h2 id="args">Args</h2>
23902405
else:
23912406
name = Path(manifest_file_path).stem
23922407

2408+
if manifest.get(&#39;name&#39;):
2409+
name = manifest.get(&#39;name&#39;)
2410+
23932411
# test if the manifest is output and incompatible
23942412
force_legacy_mode = False
23952413
if not manifest.get(&#39;columns&#39;) and manifest.get(&#39;primary_key&#39;):
@@ -2399,28 +2417,57 @@ <h2 id="args">Args</h2>
23992417

24002418
if manifest.get(&#39;id&#39;):
24012419
stage = &#39;in&#39;
2420+
table_def = cls.build_input_definition(
2421+
# helper parameters
2422+
stage=stage,
2423+
force_legacy_mode=force_legacy_mode,
2424+
is_sliced=is_sliced,
2425+
full_path=full_path,
2426+
2427+
# basic in manifest parameters
2428+
id=manifest.get(&#39;id&#39;),
2429+
uri=manifest.get(&#39;uri&#39;),
2430+
name=name,
2431+
primary_key=manifest.get(&#39;primary_key&#39;),
2432+
created=manifest.get(&#39;created&#39;),
2433+
last_change_date=manifest.get(&#39;last_change_date&#39;),
2434+
last_import_date=manifest.get(&#39;last_import_date&#39;),
2435+
schema=cls.return_schema_from_manifest(manifest),
2436+
table_metadata=TableMetadata(manifest),
2437+
2438+
# additional in manifest parameters
2439+
rows_count=manifest.get(&#39;rows_count&#39;),
2440+
data_size_bytes=manifest.get(&#39;data_size_bytes&#39;),
2441+
is_alias=manifest.get(&#39;is_alias&#39;),
2442+
attributes=manifest.get(&#39;attributes&#39;),
2443+
indexed_columns=manifest.get(&#39;indexed_columns&#39;),
2444+
)
2445+
24022446
else:
24032447
stage = &#39;out&#39;
2404-
2405-
table_def = cls(name=name,
2406-
stage=stage,
2407-
full_path=full_path,
2408-
is_sliced=is_sliced,
2409-
id=manifest.get(&#39;id&#39;),
2410-
table_metadata=TableMetadata(manifest),
2411-
primary_key=manifest.get(&#39;primary_key&#39;),
2412-
schema=cls.return_schema_from_manifest(manifest),
2413-
uri=manifest.get(&#39;uri&#39;),
2414-
created=manifest.get(&#39;created&#39;),
2415-
last_change_date=manifest.get(&#39;last_change_date&#39;),
2416-
last_import_date=manifest.get(&#39;last_import_date&#39;),
2417-
rows_count=manifest.get(&#39;rows_count&#39;),
2418-
data_size_bytes=manifest.get(&#39;data_size_bytes&#39;),
2419-
is_alias=manifest.get(&#39;is_alias&#39;),
2420-
force_legacy_mode=force_legacy_mode,
2421-
indexed_columns=manifest.get(&#39;indexed_columns&#39;),
2422-
attributes=manifest.get(&#39;attributes&#39;)
2423-
)
2448+
table_def = cls.build_output_definition(
2449+
# helper parameters
2450+
stage=stage,
2451+
force_legacy_mode=force_legacy_mode,
2452+
is_sliced=is_sliced,
2453+
full_path=full_path,
2454+
2455+
# basic out manifest parameters
2456+
name=name,
2457+
destination=manifest.get(&#39;destination&#39;),
2458+
schema=cls.return_schema_from_manifest(manifest),
2459+
incremental=manifest.get(&#39;incremental&#39;),
2460+
primary_key=manifest.get(&#39;primary_key&#39;),
2461+
write_always=manifest.get(&#39;write_always&#39;, False),
2462+
delimiter=manifest.get(&#39;delimiter&#39;, &#39;,&#39;),
2463+
enclosure=manifest.get(&#39;enclosure&#39;, &#39;&#34;&#39;),
2464+
table_metadata=TableMetadata(manifest),
2465+
2466+
# additional in manifest parameters
2467+
delete_where_values=manifest.get(&#39;delete_where_values&#39;),
2468+
delete_where_column=manifest.get(&#39;delete_where_column&#39;),
2469+
delete_where_operator=manifest.get(&#39;delete_where_operator&#39;)
2470+
)
24242471

24252472
return table_def
24262473

@@ -2838,7 +2885,7 @@ <h2 id="args">Args</h2>
28382885
table with no input manifest.</p></div>
28392886
</dd>
28402887
<dt id="keboola.component.dao.TableDefinition.build_input_definition"><code class="name flex">
2841-
<span>def <span class="ident">build_input_definition</span></span>(<span>name: str, full_path: Optional[Union[str, None]] = None, is_sliced: Optional[bool] = False, destination: Optional[str] = '', primary_key: Optional[List[str]] = None, columns: Optional[List[str]] = None, incremental: Optional[bool] = None, table_metadata: Optional[<a title="keboola.component.dao.TableMetadata" href="#keboola.component.dao.TableMetadata">TableMetadata</a>] = None, enclosure: Optional[str] = '"', delimiter: Optional[str] = ',', delete_where: Optional[dict] = None, stage: Optional[str] = 'in', write_always: Optional[bool] = False, schema: Optional[List[<a title="keboola.component.dao.ColumnDefinition" href="#keboola.component.dao.ColumnDefinition">ColumnDefinition</a>]] = None, rows_count: Optional[int] = None, data_size_bytes: Optional[int] = None, is_alias: Optional[bool] = False, uri: Optional[str] = None, id: Optional[str] = '', created: Optional[str] = None, last_change_date: Optional[str] = None, last_import_date: Optional[str] = None)</span>
2888+
<span>def <span class="ident">build_input_definition</span></span>(<span>name: str, full_path: Optional[Union[str, None]] = None, is_sliced: Optional[bool] = False, destination: Optional[str] = '', primary_key: Optional[List[str]] = None, columns: Optional[List[str]] = None, incremental: Optional[bool] = None, table_metadata: Optional[<a title="keboola.component.dao.TableMetadata" href="#keboola.component.dao.TableMetadata">TableMetadata</a>] = None, enclosure: Optional[str] = '"', delimiter: Optional[str] = ',', delete_where: Optional[dict] = None, stage: Optional[str] = 'in', write_always: Optional[bool] = False, schema: Optional[Union[TypeOrderedDict[str, <a title="keboola.component.dao.ColumnDefinition" href="#keboola.component.dao.ColumnDefinition">ColumnDefinition</a>], list[str]]] = None, rows_count: Optional[int] = None, data_size_bytes: Optional[int] = None, is_alias: Optional[bool] = False, uri: Optional[str] = None, id: Optional[str] = '', created: Optional[str] = None, last_change_date: Optional[str] = None, last_import_date: Optional[str] = None, **kwargs)</span>
28422889
</code></dt>
28432890
<dd>
28442891
<div class="desc"><p>Factory method for creating a TableDefinition instance for input tables.</p>
@@ -2900,7 +2947,7 @@ <h2 id="returns">Returns</h2>
29002947
</dl></div>
29012948
</dd>
29022949
<dt id="keboola.component.dao.TableDefinition.build_output_definition"><code class="name flex">
2903-
<span>def <span class="ident">build_output_definition</span></span>(<span>name: str, destination: Optional[str] = '', columns: Optional[List[str]] = None, primary_key: Optional[List[str]] = None, incremental: Optional[bool] = False, table_metadata: Optional[<a title="keboola.component.dao.TableMetadata" href="#keboola.component.dao.TableMetadata">TableMetadata</a>] = None, enclosure: Optional[str] = '"', delimiter: Optional[str] = ',', delete_where: Optional[dict] = None, write_always: Optional[bool] = False, schema: Optional[List[<a title="keboola.component.dao.ColumnDefinition" href="#keboola.component.dao.ColumnDefinition">ColumnDefinition</a>]] = None)</span>
2950+
<span>def <span class="ident">build_output_definition</span></span>(<span>name: str, destination: Optional[str] = '', columns: Optional[List[str]] = None, primary_key: Optional[List[str]] = None, incremental: Optional[bool] = False, table_metadata: Optional[<a title="keboola.component.dao.TableMetadata" href="#keboola.component.dao.TableMetadata">TableMetadata</a>] = None, enclosure: Optional[str] = '"', delimiter: Optional[str] = ',', delete_where: Optional[dict] = None, write_always: Optional[bool] = False, schema: Optional[Union[TypeOrderedDict[str, <a title="keboola.component.dao.ColumnDefinition" href="#keboola.component.dao.ColumnDefinition">ColumnDefinition</a>], list[str]]] = None, **kwargs)</span>
29042951
</code></dt>
29052952
<dd>
29062953
<div class="desc"><p>Factory method for creating a TableDefinition instance for output tables.</p>

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
setuptools.setup(
1515
name="keboola.component",
16-
version="1.6.5",
16+
version="1.6.6",
1717
author="Keboola KDS Team",
1818
project_urls=project_urls,
1919
setup_requires=['pytest-runner', 'flake8'],

src/keboola/component/dao.py

Lines changed: 71 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,15 @@ def __init__(self, name: str,
849849
self.delete_where_column = None
850850
self.delete_where_operator = None
851851

852+
if kwargs.get('delete_where_values'):
853+
self.delete_where_values = kwargs['delete_where_values']
854+
855+
if kwargs.get('delete_where_column'):
856+
self.delete_where_column = kwargs['delete_where_column']
857+
858+
if kwargs.get('delete_where_operator'):
859+
self.delete_where_operator = kwargs['delete_where_operator']
860+
852861
self.set_delete_where_from_dict(delete_where)
853862
self.write_always = write_always
854863

@@ -883,7 +892,8 @@ def build_output_definition(cls, name: str,
883892
delimiter: Optional[str] = ',',
884893
delete_where: Optional[dict] = None,
885894
write_always: Optional[bool] = False,
886-
schema: Optional[List[ColumnDefinition]] = None,
895+
schema: Optional[Union[TypeOrderedDict[str, ColumnDefinition], list[str]]] = None,
896+
**kwargs
887897
):
888898
"""
889899
Factory method for creating a TableDefinition instance for output tables.
@@ -918,6 +928,7 @@ def build_output_definition(cls, name: str,
918928
delete_where=delete_where,
919929
write_always=write_always,
920930
schema=schema,
931+
**kwargs
921932
)
922933

923934
@classmethod
@@ -935,7 +946,7 @@ def build_input_definition(cls, name: str,
935946
delete_where: Optional[dict] = None,
936947
stage: Optional[str] = 'in',
937948
write_always: Optional[bool] = False,
938-
schema: Optional[List[ColumnDefinition]] = None,
949+
schema: Optional[Union[TypeOrderedDict[str, ColumnDefinition], list[str]]] = None,
939950
rows_count: Optional[int] = None,
940951
data_size_bytes: Optional[int] = None,
941952
is_alias: Optional[bool] = False,
@@ -945,7 +956,9 @@ def build_input_definition(cls, name: str,
945956
id: Optional[str] = '',
946957
created: Optional[str] = None,
947958
last_change_date: Optional[str] = None,
948-
last_import_date: Optional[str] = None):
959+
last_import_date: Optional[str] = None,
960+
**kwargs
961+
):
949962
"""
950963
Factory method for creating a TableDefinition instance for input tables.
951964
@@ -1000,7 +1013,9 @@ def build_input_definition(cls, name: str,
10001013
id=id,
10011014
created=created,
10021015
last_change_date=last_change_date,
1003-
last_import_date=last_import_date)
1016+
last_import_date=last_import_date,
1017+
**kwargs
1018+
)
10041019

10051020
@classmethod
10061021
def convert_to_column_definition(cls, column_name, column_metadata, primary_key=False):
@@ -1088,6 +1103,9 @@ def build_from_manifest(cls,
10881103
else:
10891104
name = Path(manifest_file_path).stem
10901105

1106+
if manifest.get('name'):
1107+
name = manifest.get('name')
1108+
10911109
# test if the manifest is output and incompatible
10921110
force_legacy_mode = False
10931111
if not manifest.get('columns') and manifest.get('primary_key'):
@@ -1097,28 +1115,57 @@ def build_from_manifest(cls,
10971115

10981116
if manifest.get('id'):
10991117
stage = 'in'
1118+
table_def = cls.build_input_definition(
1119+
# helper parameters
1120+
stage=stage,
1121+
force_legacy_mode=force_legacy_mode,
1122+
is_sliced=is_sliced,
1123+
full_path=full_path,
1124+
1125+
# basic in manifest parameters
1126+
id=manifest.get('id'),
1127+
uri=manifest.get('uri'),
1128+
name=name,
1129+
primary_key=manifest.get('primary_key'),
1130+
created=manifest.get('created'),
1131+
last_change_date=manifest.get('last_change_date'),
1132+
last_import_date=manifest.get('last_import_date'),
1133+
schema=cls.return_schema_from_manifest(manifest),
1134+
table_metadata=TableMetadata(manifest),
1135+
1136+
# additional in manifest parameters
1137+
rows_count=manifest.get('rows_count'),
1138+
data_size_bytes=manifest.get('data_size_bytes'),
1139+
is_alias=manifest.get('is_alias'),
1140+
attributes=manifest.get('attributes'),
1141+
indexed_columns=manifest.get('indexed_columns'),
1142+
)
1143+
11001144
else:
11011145
stage = 'out'
1102-
1103-
table_def = cls(name=name,
1104-
stage=stage,
1105-
full_path=full_path,
1106-
is_sliced=is_sliced,
1107-
id=manifest.get('id'),
1108-
table_metadata=TableMetadata(manifest),
1109-
primary_key=manifest.get('primary_key'),
1110-
schema=cls.return_schema_from_manifest(manifest),
1111-
uri=manifest.get('uri'),
1112-
created=manifest.get('created'),
1113-
last_change_date=manifest.get('last_change_date'),
1114-
last_import_date=manifest.get('last_import_date'),
1115-
rows_count=manifest.get('rows_count'),
1116-
data_size_bytes=manifest.get('data_size_bytes'),
1117-
is_alias=manifest.get('is_alias'),
1118-
force_legacy_mode=force_legacy_mode,
1119-
indexed_columns=manifest.get('indexed_columns'),
1120-
attributes=manifest.get('attributes')
1121-
)
1146+
table_def = cls.build_output_definition(
1147+
# helper parameters
1148+
stage=stage,
1149+
force_legacy_mode=force_legacy_mode,
1150+
is_sliced=is_sliced,
1151+
full_path=full_path,
1152+
1153+
# basic out manifest parameters
1154+
name=name,
1155+
destination=manifest.get('destination'),
1156+
schema=cls.return_schema_from_manifest(manifest),
1157+
incremental=manifest.get('incremental'),
1158+
primary_key=manifest.get('primary_key'),
1159+
write_always=manifest.get('write_always', False),
1160+
delimiter=manifest.get('delimiter', ','),
1161+
enclosure=manifest.get('enclosure', '"'),
1162+
table_metadata=TableMetadata(manifest),
1163+
1164+
# additional in manifest parameters
1165+
delete_where_values=manifest.get('delete_where_values'),
1166+
delete_where_column=manifest.get('delete_where_column'),
1167+
delete_where_operator=manifest.get('delete_where_operator')
1168+
)
11221169

11231170
return table_def
11241171

tests/data_examples/data1/in/tables/fooBar.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "in.c-main.test2",
33
"uri": "https:\/\/connection.keboola.com\/\/v2\/storage\/tables\/in.c-main.test2",
4-
"name": "test2",
4+
"name": "fooBar",
55
"primary_key": [],
66
"indexed_columns": [],
77
"created": "2015-09-22T17:04:52+0200",

tests/data_examples/data1/in/tables/orphaned_manifest.csv.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "in.c-main.test",
33
"uri": "https:\/\/connection.keboola.com\/\/v2\/storage\/tables\/in.c-main.test",
4-
"name": "test",
4+
"name": "orphaned_manifest.csv",
55
"primary_key": [],
66
"indexed_columns": [],
77
"created": "2015-11-02T09:11:37+0100",

tests/data_examples/data1/in/tables/sample.csv.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "in.c-main.test",
33
"uri": "https:\/\/connection.keboola.com\/\/v2\/storage\/tables\/in.c-main.test",
4-
"name": "test",
4+
"name": "sample.csv",
55
"primary_key": [],
66
"indexed_columns": [],
77
"created": "2015-11-02T09:11:37+0100",

0 commit comments

Comments
 (0)