aiteamutils 0.2.111__py3-none-any.whl → 0.2.113__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.
aiteamutils/validators.py CHANGED
@@ -197,6 +197,8 @@ class Validator:
197
197
  return None
198
198
  if isinstance(value, date):
199
199
  return value
200
+ if isinstance(value, datetime):
201
+ return value.date()
200
202
  if value == "" or not value:
201
203
  return None
202
204
  try:
@@ -209,6 +211,32 @@ class Validator:
209
211
  original_error=str(e)
210
212
  )
211
213
 
214
+ @staticmethod
215
+ def validate_datetime(value: Any, field_name: str = "datetime") -> Optional[datetime]:
216
+ """날짜+시간 형식 검증을 수행하는 메서드."""
217
+ if value is None:
218
+ return None
219
+ if isinstance(value, datetime):
220
+ return value
221
+ if isinstance(value, date):
222
+ return datetime.combine(value, datetime.min.time())
223
+ if value == "" or not value:
224
+ return None
225
+ try:
226
+ # ISO 형식 (YYYY-MM-DDTHH:MM:SS) 먼저 시도
227
+ try:
228
+ return datetime.fromisoformat(str(value))
229
+ except:
230
+ # 일반 날짜+시간 형식 시도
231
+ return datetime.strptime(str(value), '%Y-%m-%d %H:%M:%S')
232
+ except Exception as e:
233
+ raise CustomException(
234
+ error_code=ErrorCode.INVALID_DATETIME_FORMAT,
235
+ detail=f"{field_name}|{value}",
236
+ source_function="Validator.validate_datetime",
237
+ original_error=str(e)
238
+ )
239
+
212
240
  def date_validator(*field_names: str):
213
241
  """날짜 필드 유효성 검사 데코레이터
214
242
  Args:
@@ -220,6 +248,8 @@ def date_validator(*field_names: str):
220
248
  @classmethod
221
249
  def validate(cls, value: Any, info: Any) -> Any:
222
250
  try:
251
+ if value == "" or value is None:
252
+ return None
223
253
  return Validator.validate_date(value, field_name)
224
254
  except CustomException as e:
225
255
  raise e
@@ -232,4 +262,29 @@ def date_validator(*field_names: str):
232
262
  )
233
263
  setattr(cls, f'validate_{field_name}', validate)
234
264
  return cls
265
+ return decorator
266
+
267
+ def datetime_validator(*field_names: str):
268
+ """날짜+시간 필드 유효성 검사 데코레이터
269
+ Args:
270
+ field_names: 검증할 필드명들
271
+ """
272
+ def decorator(cls):
273
+ for field_name in field_names:
274
+ @field_validator(field_name, mode='before')
275
+ @classmethod
276
+ def validate(cls, value: Any, info: Any) -> Any:
277
+ try:
278
+ return Validator.validate_datetime(value, field_name)
279
+ except CustomException as e:
280
+ raise e
281
+ except Exception as e:
282
+ raise CustomException(
283
+ error_code=ErrorCode.INVALID_DATETIME_FORMAT,
284
+ detail=f"{field_name}|{value}",
285
+ source_function=f"datetime_validator.{field_name}",
286
+ original_error=str(e)
287
+ )
288
+ setattr(cls, f'validate_{field_name}', validate)
289
+ return cls
235
290
  return decorator
aiteamutils/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  """버전 정보"""
2
- __version__ = "0.2.111"
2
+ __version__ = "0.2.113"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiteamutils
3
- Version: 0.2.111
3
+ Version: 0.2.113
4
4
  Summary: AI Team Utilities
5
5
  Project-URL: Homepage, https://github.com/yourusername/aiteamutils
6
6
  Project-URL: Issues, https://github.com/yourusername/aiteamutils/issues
@@ -8,8 +8,8 @@ aiteamutils/database.py,sha256=SmE6JiyQoqCNlrV4AVxrp1tsrNryyZSQWJM0dHN4MQA,19696
8
8
  aiteamutils/enums.py,sha256=7WLqlcJqQWtETAga2WAxNp3dJTQIAd2TW-4WzkoHHa8,2498
9
9
  aiteamutils/exceptions.py,sha256=pgf3ersezObyl17wAO3I2fb8m9t2OzWDX1mSjwAWm2Y,16035
10
10
  aiteamutils/security.py,sha256=McUl3t5Z5SyUDVUHymHdDkYyF4YSeg4g9fFMML4W6Kw,11630
11
- aiteamutils/validators.py,sha256=Ogx-YhE7qhTr5L6TKLMaGOdJn27LmYD1ejfeNrxyPaw,9428
12
- aiteamutils/version.py,sha256=D9Ww_H4RqunQWUFEweffo1g8IsES8azAURE_irC2ro0,43
13
- aiteamutils-0.2.111.dist-info/METADATA,sha256=XLkSDKEXB09JWrjh6a3fYLPC_6G9PuAjORB5p7_MVpc,1719
14
- aiteamutils-0.2.111.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
15
- aiteamutils-0.2.111.dist-info/RECORD,,
11
+ aiteamutils/validators.py,sha256=FYDgL7Vb6jdqncqtTUa-8bN42VTNImP6bqcYFjcrvJs,11624
12
+ aiteamutils/version.py,sha256=LN7TnPE-1ym25kZeV1ozyOzkgWvMbthv7Niyw4ZUQ8U,43
13
+ aiteamutils-0.2.113.dist-info/METADATA,sha256=m8OpUio7xQajektSPKKpAw6sSQ86AVdmHPSxH62K3HY,1719
14
+ aiteamutils-0.2.113.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
15
+ aiteamutils-0.2.113.dist-info/RECORD,,