amochka 0.4.4__py3-none-any.whl → 0.4.6__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.
amochka/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
  amochka: Библиотека для работы с API amoCRM.
3
3
  """
4
4
 
5
- __version__ = "0.4.4"
5
+ __version__ = "0.4.6"
6
6
 
7
7
  from .client import AmoCRMClient, CacheConfig
8
8
  from .errors import (
amochka/client.py CHANGED
@@ -1093,12 +1093,22 @@ class AmoCRMClient:
1093
1093
  updated_from: Optional[Union[int, float, str, datetime]] = None,
1094
1094
  updated_to: Optional[Union[int, float, str, datetime]] = None,
1095
1095
  contact_ids: Optional[Union[int, Sequence[Union[int, str]]]] = None,
1096
+ query: Optional[str] = None,
1097
+ min_query_length: Optional[int] = None,
1096
1098
  limit: int = 250,
1097
1099
  extra_params: Optional[dict] = None,
1098
1100
  max_pages: Optional[int] = None,
1101
+ query_mode: str = "auto",
1102
+ min_phone_length: Optional[int] = None,
1099
1103
  ) -> Iterator[dict]:
1100
1104
  """
1101
- Итератор контактов с фильтрацией по диапазону обновления или списку ID.
1105
+ Итератор контактов с фильтрацией по диапазону обновления, списку ID или query.
1106
+
1107
+ :param query: Строка поиска (например, телефон). Перед отправкой очищается до цифр.
1108
+ :param min_query_length: Минимальная длина query (по числу цифр). Если не достигнута, query не отправляется.
1109
+ Deprecated: используйте min_phone_length.
1110
+ :param query_mode: Режим обработки query: auto | phone | raw.
1111
+ :param min_phone_length: Минимальная длина номера (по числу цифр). Применяется в phone/auto режимах.
1102
1112
 
1103
1113
  :param max_pages: Максимальное количество страниц для итерации (None = без ограничений)
1104
1114
  :raises ValidationError: Если параметры имеют некорректный тип или значение.
@@ -1125,6 +1135,15 @@ class AmoCRMClient:
1125
1135
  elif not isinstance(contact_ids, str):
1126
1136
  raise ValidationError(f"contact_ids must be int, str or sequence, got {type(contact_ids).__name__}")
1127
1137
 
1138
+ if min_query_length is not None and (not isinstance(min_query_length, int) or min_query_length < 1):
1139
+ raise ValidationError("min_query_length must be a positive int")
1140
+ if min_phone_length is not None and (not isinstance(min_phone_length, int) or min_phone_length < 1):
1141
+ raise ValidationError("min_phone_length must be a positive int")
1142
+
1143
+ mode = (query_mode or "auto").lower()
1144
+ if mode not in {"auto", "phone", "raw"}:
1145
+ raise ValidationError(f"query_mode must be one of: auto, phone, raw (got {query_mode})")
1146
+
1128
1147
  params = {"limit": limit, "page": 1}
1129
1148
  start_ts = self._to_timestamp(updated_from)
1130
1149
  end_ts = self._to_timestamp(updated_to)
@@ -1135,6 +1154,18 @@ class AmoCRMClient:
1135
1154
  contact_param = self._format_filter_values(contact_ids)
1136
1155
  if contact_param:
1137
1156
  params["filter[id][]"] = contact_param
1157
+ if query is not None:
1158
+ query_str = str(query).strip()
1159
+ if query_str:
1160
+ effective_min_len = min_phone_length if min_phone_length is not None else min_query_length
1161
+ is_raw = mode == "raw" or (mode == "auto" and any(ch.isalpha() or ch == "@" for ch in query_str))
1162
+ if is_raw:
1163
+ params["query"] = query_str
1164
+ else:
1165
+ query_digits = "".join(ch for ch in query_str if ch.isdigit())
1166
+ if query_digits:
1167
+ if effective_min_len is None or len(query_digits) >= effective_min_len:
1168
+ params["query"] = query_digits
1138
1169
  if extra_params:
1139
1170
  params.update(extra_params)
1140
1171
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amochka
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: Python library for working with amoCRM API with ETL capabilities
5
5
  Author-email: Timur <timurdt@gmail.com>
6
6
  License: MIT
@@ -1,5 +1,5 @@
1
- amochka/__init__.py,sha256=L2D_slwPlqEmazAVuCBtq75YKtSwIwGQJDlcrpqfOmI,925
2
- amochka/client.py,sha256=tjWCkKaosmYV3D1CM8w9PiIAOC_Qqb4Eipfczv4F1QM,89481
1
+ amochka/__init__.py,sha256=Rt8W0zW4TY7QnhVG6I4qTL12mEtKdkyqrRdWUrOQGeY,925
2
+ amochka/client.py,sha256=zQUy6DhoQfLDnO9q7CxXd28cjLQmwE15MtTGsGYYVSs,91571
3
3
  amochka/errors.py,sha256=Rg4U9srjboQwgU3wwhAed0p3vGcc0ZhuyKHIDhYFnp8,1371
4
4
  amochka/etl.py,sha256=tzdGPRGxR49aSAjLksic-FqechvDUTfK8ZUUJGuIU7M,8960
5
5
  etl/__init__.py,sha256=bp9fPqbKlOc7xzs27diHEvysy1FgBrwlpX6GnR6GL9U,255
@@ -9,7 +9,7 @@ etl/loaders.py,sha256=x8PcDQoq2kjbd52H2VzKKz5vHzyD6DXSsb9X0foPX_U,31941
9
9
  etl/run_etl.py,sha256=LxKQLE_yUPkg7kaFmmMxrdggz27puS1VdV9NTna9e4Q,26665
10
10
  etl/transformers.py,sha256=OwYJ_9l3oqvy2Y3-umXjAGweOIqlfRI0iSiCFPrcQ8E,17867
11
11
  etl/migrations/001_create_tables.sql,sha256=YrSaZjpofC1smjYx0bM4eHQumboruIBY3fwRDlJLLSo,15749
12
- amochka-0.4.4.dist-info/METADATA,sha256=St1Dle9yx49gdUNz104Af6akTBhAF_KnZ8QL2BdTN94,7530
13
- amochka-0.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
14
- amochka-0.4.4.dist-info/top_level.txt,sha256=grRX8aLFG-yYKPsAqCD6sUBmdLSQeOMHsc9Dl6S7Lzo,12
15
- amochka-0.4.4.dist-info/RECORD,,
12
+ amochka-0.4.6.dist-info/METADATA,sha256=xbYEJTNgE5RsqN8UPudtOrs4gKnXzuF27hmR3wcco1s,7530
13
+ amochka-0.4.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
14
+ amochka-0.4.6.dist-info/top_level.txt,sha256=grRX8aLFG-yYKPsAqCD6sUBmdLSQeOMHsc9Dl6S7Lzo,12
15
+ amochka-0.4.6.dist-info/RECORD,,