dhisana 0.0.1.dev274__py3-none-any.whl → 0.0.1.dev275__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.
@@ -1,9 +1,8 @@
1
- # dhisana/email_io.py
1
+ # dhisana/smtp_email_tools.py
2
2
  # ─────────────────────────────────────────────────────────────────────────────
3
3
  # Standard library
4
4
  # ─────────────────────────────────────────────────────────────────────────────
5
5
  import asyncio
6
- import datetime
7
6
  import email
8
7
  import email.utils
9
8
  import hashlib
@@ -105,11 +104,6 @@ def _to_datetime(val: Union[datetime, str]) -> datetime:
105
104
  ) from exc
106
105
 
107
106
 
108
- def _looks_like_html(text: str) -> bool:
109
- """Heuristically determine whether the body contains HTML markup."""
110
- return bool(text and re.search(r"<[a-zA-Z][^>]*>", text))
111
-
112
-
113
107
  def _html_to_plain_text(html: str) -> str:
114
108
  """
115
109
  Produce a very lightweight plain-text version of an HTML fragment.
@@ -186,18 +180,18 @@ async def send_email_via_smtp_async(
186
180
  username=username,
187
181
  password=password,
188
182
  )
189
- # Decide whether to use STARTTLS or TLS
183
+ # Decide whether to use STARTTLS or implicit TLS; otherwise connect plaintext.
190
184
  if use_starttls:
191
185
  smtp_kwargs["start_tls"] = True
192
- else:
193
- smtp_kwargs["tls"] = True
186
+ elif smtp_port == 465:
187
+ # aiosmtplib expects `use_tls` for implicit TLS (e.g., port 465)
188
+ smtp_kwargs["use_tls"] = True
194
189
 
195
190
  try:
196
191
  # aiosmtplib.send returns a (code, response) tuple, but no server message ID.
197
192
  # We rely on the real Message-ID we have just set.
198
193
  await aiosmtplib.send(msg, **smtp_kwargs)
199
194
  logging.info("SMTP send OK – msg id %s", generated_id)
200
- await asyncio.sleep(20)
201
195
  return generated_id
202
196
  except Exception:
203
197
  logging.exception("SMTP send failed")
@@ -557,8 +551,8 @@ async def reply_to_email_via_smtp_async(
557
551
  )
558
552
  if use_starttls_smtp:
559
553
  smtp_kwargs["start_tls"] = True
560
- else:
561
- smtp_kwargs["tls"] = True
554
+ elif smtp_port == 465:
555
+ smtp_kwargs["use_tls"] = True
562
556
 
563
557
  await aiosmtplib.send(msg, **smtp_kwargs)
564
558
 
@@ -17,7 +17,6 @@ from googleapiclient.discovery import build
17
17
  import imaplib
18
18
  import aiosmtplib
19
19
  from simple_salesforce import Salesforce
20
- from urllib.parse import urljoin, urlparse
21
20
 
22
21
  from dhisana.utils.clay_tools import push_to_clay_table
23
22
 
@@ -1030,9 +1029,10 @@ async def test_smtp_accounts(
1030
1029
  try:
1031
1030
  smtp_kwargs = dict(hostname=smtp_host, port=smtp_port, timeout=10)
1032
1031
  if smtp_port == 587:
1033
- smtp_kwargs["start_tls"] = True # STARTTLS upgrade
1032
+ smtp_kwargs["start_tls"] = True # STARTTLS upgrade on submission port
1034
1033
  else:
1035
- smtp_kwargs["tls"] = (smtp_port == 465) # implicit SSL on 465
1034
+ # aiosmtplib uses `use_tls` for implicit TLS (e.g., port 465)
1035
+ smtp_kwargs["use_tls"] = (smtp_port == 465)
1036
1036
 
1037
1037
  smtp = aiosmtplib.SMTP(**smtp_kwargs)
1038
1038
  await smtp.connect()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev274
3
+ Version: 0.0.1.dev275
4
4
  Summary: A Python SDK for Dhisana AI Platform
5
5
  Home-page: https://github.com/dhisana-ai/dhisana-python-sdk
6
6
  Author: Admin
@@ -80,8 +80,8 @@ dhisana/utils/serpapi_search_tools.py,sha256=e9wxU9-lnRIFI7uNuHiQmGhyLv2xikPZDEs
80
80
  dhisana/utils/serperdev_google_jobs.py,sha256=m5_2f_5y79FOFZz1A_go6m0hIUfbbAoZ0YTjUMO2BSI,4508
81
81
  dhisana/utils/serperdev_local_business.py,sha256=JoZfTg58Hojv61cyuwA2lcnPdLT1lawnWaBNrUYWnuQ,6447
82
82
  dhisana/utils/serperdev_search.py,sha256=_iBKIfHMq4gFv5StYz58eArriygoi1zW6VnLlux8vto,9363
83
- dhisana/utils/smtp_email_tools.py,sha256=J9uDHCEu2BTyFzDBru0e1lC8bsAMt9c_mYXTzJgk9Kc,22054
84
- dhisana/utils/test_connect.py,sha256=YCweFyTRWSP3iwR3uLE0VWLIOK1qHY2OI4oNe6pCV_Y,92403
83
+ dhisana/utils/smtp_email_tools.py,sha256=peW0dKMUW5s_yso9uhLb6DGOM3Aj028zshqBWlQKviE,21990
84
+ dhisana/utils/test_connect.py,sha256=tp9mdd_aGMeqq1FSkELfgiiQ6kgk4JPcOahKYwBicck,92434
85
85
  dhisana/utils/trasform_json.py,sha256=7V72XNDpuxUX0GHN5D83z4anj_gIf5zabaHeQm7b1_E,6979
86
86
  dhisana/utils/web_download_parse_tools.py,sha256=ouXwH7CmjcRjoBfP5BWat86MvcGO-8rLCmWQe_eZKjc,7810
87
87
  dhisana/utils/workflow_code_model.py,sha256=YPWse5vBb3O6Km2PvKh1Q3AB8qBkzLt1CrR5xOL9Mro,99
@@ -95,8 +95,8 @@ dhisana/workflow/agent.py,sha256=esv7_i_XuMkV2j1nz_UlsHov_m6X5WZZiZm_tG4OBHU,565
95
95
  dhisana/workflow/flow.py,sha256=xWE3qQbM7j2B3FH8XnY3zOL_QXX4LbTW4ArndnEYJE0,1638
96
96
  dhisana/workflow/task.py,sha256=HlWz9mtrwLYByoSnePOemBUBrMEcj7KbgNjEE1oF5wo,1830
97
97
  dhisana/workflow/test.py,sha256=E7lRnXK0PguTNzyasHytLzTJdkqIPxG5_4qk4hMEeKc,3399
98
- dhisana-0.0.1.dev274.dist-info/METADATA,sha256=sPREfHEIvxxGk24-YL0zauwjU1n_pAUvaVmyLL_XKj0,1190
99
- dhisana-0.0.1.dev274.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
- dhisana-0.0.1.dev274.dist-info/entry_points.txt,sha256=jujxteZmNI9EkEaK-pOCoWuBujU8TCevdkfl9ZcKHek,49
101
- dhisana-0.0.1.dev274.dist-info/top_level.txt,sha256=NETTHt6YifG_P7XtRHbQiXZlgSFk9Qh9aR-ng1XTf4s,8
102
- dhisana-0.0.1.dev274.dist-info/RECORD,,
98
+ dhisana-0.0.1.dev275.dist-info/METADATA,sha256=jyDGbVBp2uLFmcP2q44nlsI-AWZclGbuQQLi1ktuhmQ,1190
99
+ dhisana-0.0.1.dev275.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
100
+ dhisana-0.0.1.dev275.dist-info/entry_points.txt,sha256=jujxteZmNI9EkEaK-pOCoWuBujU8TCevdkfl9ZcKHek,49
101
+ dhisana-0.0.1.dev275.dist-info/top_level.txt,sha256=NETTHt6YifG_P7XtRHbQiXZlgSFk9Qh9aR-ng1XTf4s,8
102
+ dhisana-0.0.1.dev275.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5