2
2
3
3
from __future__ import annotations
4
4
5
- import os
6
5
from caseconverter import snakecase
7
6
from notion_client import Client
7
+ from notion_client .errors import HTTPResponseError
8
+ from retry import retry
8
9
from singer_sdk .sinks import RecordSink
9
10
10
11
@@ -17,6 +18,7 @@ def __init__(self, **kwargs) -> None: # noqa: ANN003
17
18
self .client = Client (auth = self .config ["api_key" ])
18
19
self .database_schema = self .get_database_schema ()
19
20
21
+ @retry (HTTPResponseError , tries = 3 , delay = 1 , backoff = 4 , max_delay = 10 )
20
22
def process_record (self , record : dict , context : dict ) -> None :
21
23
"""Process the record.
22
24
@@ -55,7 +57,7 @@ def create_page_properties(self, record: dict) -> dict:
55
57
self .database_schema .get (key , {})["type" ], value
56
58
)
57
59
for key , value in record .items ()
58
- if key in self .database_schema
60
+ if key in self .database_schema and value
59
61
}
60
62
61
63
def create_page_property (self , _type : str , value ) -> dict :
@@ -66,17 +68,17 @@ def create_page_property(self, _type: str, value) -> dict:
66
68
case "rich_text" :
67
69
_property = {"rich_text" : [{"text" : {"content" : str (value )}}]}
68
70
case "number" :
69
- _property = {"number" : float (value ) if value else None }
71
+ _property = {"number" : float (value )}
70
72
case "select" :
71
- _property = {"select" : {"name" : str (value )}}
73
+ _property = {"select" : {"name" : str (value ). replace ( "," , "" ) }}
72
74
case "multi_select" :
73
- _property = {"multi_select" : [{"name" : str (v )} for v in value .split (", " ) if value ]}
75
+ _property = {"multi_select" : [{"name" : str (v ). replace ( "," , "" ) } for v in value .split (", " )]}
74
76
case "date" :
75
77
_property = {"date" : {"start" : value }}
76
78
case "people" :
77
79
_property = {"people" : [{"id" : str (v )} for v in value .split (", " )]}
78
80
case "files" :
79
- _property = {"files" : [{"name" : v ["name" ], "url" : v ["url" ]} for v in value .split (", " ) if value ]}
81
+ _property = {"files" : [{"name" : v ["name" ], "url" : v ["url" ]} for v in value .split (", " )]}
80
82
case "checkbox" :
81
83
_property = {"checkbox" : value }
82
84
case "url" :
@@ -86,7 +88,7 @@ def create_page_property(self, _type: str, value) -> dict:
86
88
case "phone_number" :
87
89
_property = {"phone_number" : str (value )}
88
90
case "relation" :
89
- _property = {"relation" : [{"id" : v } for v in value .split (", " ) if value ]}
91
+ _property = {"relation" : [{"id" : v } for v in value .split (", " )]}
90
92
case _:
91
93
msg = f"Unsupported property type: { _type } "
92
94
raise ValueError (msg )
0 commit comments