1313from humps import camelize
1414from pydantic import (
1515 BaseModel ,
16+ BeforeValidator ,
1617 ConfigDict ,
1718 DirectoryPath ,
1819 EmailStr ,
2425from pydantic_settings import BaseSettings , SettingsConfigDict
2526
2627from tekst import package_metadata
27- from tekst .types import EmptyStrToNone , HttpUrl , MultiLineString , SingleLineString
28+ from tekst .types import FalsyToNone , HttpUrl , MultiLineString , SingleLineString
2829
2930
3031_DEV_MODE : bool = bool (os .environ .get ("TEKST_DEV_MODE" , False ))
@@ -93,13 +94,13 @@ class MongoDBConfig(ConfigSubSection):
9394 str | None ,
9495 StringConstraints (max_length = 64 ),
9596 SingleLineString ,
96- EmptyStrToNone ,
97+ FalsyToNone ,
9798 ] = None
9899 password : Annotated [
99100 str | None ,
100101 StringConstraints (max_length = 64 ),
101102 SingleLineString ,
102- EmptyStrToNone ,
103+ FalsyToNone ,
103104 ] = None
104105 name : str = "tekst"
105106 unicode_nf : Literal ["NFC" , "NFKC" , "NFD" , "NFKD" ] | None = "NFC"
@@ -181,7 +182,7 @@ class SecurityConfig(ConfigSubSection):
181182 str | None ,
182183 StringConstraints (max_length = 64 ),
183184 SingleLineString ,
184- EmptyStrToNone ,
185+ FalsyToNone ,
185186 ] = None
186187 auth_cookie_lifetime : Annotated [
187188 int ,
@@ -211,13 +212,13 @@ class SecurityConfig(ConfigSubSection):
211212 str | None ,
212213 StringConstraints (max_length = 256 ),
213214 SingleLineString ,
214- EmptyStrToNone ,
215+ FalsyToNone ,
215216 ] = None
216217 init_admin_password : Annotated [
217218 str | None ,
218219 StringConstraints (max_length = 256 ),
219220 SingleLineString ,
220- EmptyStrToNone ,
221+ FalsyToNone ,
221222 ] = None
222223
223224
@@ -229,18 +230,18 @@ class EMailConfig(ConfigSubSection):
229230 StringConstraints (max_length = 256 ),
230231 SingleLineString ,
231232 ] = "127.0.0.1"
232- smtp_port : int | None = 25
233+ smtp_port : int = 25
233234 smtp_user : Annotated [
234235 str | None ,
235236 StringConstraints (max_length = 256 ),
236237 SingleLineString ,
237- EmptyStrToNone ,
238+ FalsyToNone ,
238239 ] = None
239240 smtp_password : Annotated [
240241 str | None ,
241242 StringConstraints (max_length = 256 ),
242243 SingleLineString ,
243- EmptyStrToNone ,
244+ FalsyToNone ,
244245 ] = None
245246 smtp_starttls : bool = True
246247 from_address : str = "noreply@example-tekst-instance.org"
@@ -262,39 +263,39 @@ class ApiDocConfig(ConfigSubSection):
262263 str | None ,
263264 StringConstraints (max_length = 256 ),
264265 SingleLineString ,
265- EmptyStrToNone ,
266+ FalsyToNone ,
266267 ] = None
267268 description : Annotated [
268269 str | None ,
269270 StringConstraints (max_length = 4096 ),
270271 MultiLineString ,
271- EmptyStrToNone ,
272+ FalsyToNone ,
272273 ] = None
273- terms_url : Annotated [HttpUrl | None , EmptyStrToNone ] = None
274+ terms_url : Annotated [HttpUrl | None , FalsyToNone ] = None
274275 contact_name : Annotated [
275276 str | None ,
276277 StringConstraints (max_length = 64 ),
277278 SingleLineString ,
278- EmptyStrToNone ,
279+ FalsyToNone ,
279280 ] = None
280281 contact_email : Annotated [
281282 EmailStr | None ,
282- EmptyStrToNone ,
283+ FalsyToNone ,
283284 ] = None
284- contact_url : Annotated [HttpUrl | None , EmptyStrToNone ] = None
285+ contact_url : Annotated [HttpUrl | None , FalsyToNone ] = None
285286 license_name : Annotated [
286287 str | None ,
287288 StringConstraints (max_length = 32 ),
288289 SingleLineString ,
289- EmptyStrToNone ,
290+ FalsyToNone ,
290291 ] = None
291292 license_id : Annotated [
292293 str | None ,
293294 StringConstraints (max_length = 32 ),
294295 SingleLineString ,
295- EmptyStrToNone ,
296+ FalsyToNone ,
296297 ] = None
297- license_url : Annotated [HttpUrl | None , EmptyStrToNone ] = None
298+ license_url : Annotated [HttpUrl | None , FalsyToNone ] = None
298299
299300
300301class CORSConfig (ConfigSubSection ):
@@ -352,7 +353,10 @@ class TekstConfig(BaseSettings):
352353 auto_migrate : bool = False
353354 xsrf : bool = True
354355
355- temp_files_dir : DirectoryPath = Path ("/tmp/tekst_tmp" )
356+ temp_files_dir : Annotated [
357+ DirectoryPath ,
358+ BeforeValidator (lambda v : Path (v ) if isinstance (v , str ) else v ),
359+ ] = Path ("/tmp/tekst_tmp" )
356360
357361 # config sub sections
358362 db : MongoDBConfig = MongoDBConfig () # MongoDB-related config
0 commit comments