dhisana 0.0.1.dev211__tar.gz → 0.0.1.dev212__tar.gz

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.
Files changed (115) hide show
  1. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/PKG-INFO +1 -1
  2. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/setup.py +1 -1
  3. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/smtp_email_tools.py +36 -4
  4. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/PKG-INFO +1 -1
  5. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/README.md +0 -0
  6. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/pyproject.toml +0 -0
  7. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/setup.cfg +0 -0
  8. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/__init__.py +0 -0
  9. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/cli/__init__.py +0 -0
  10. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/cli/cli.py +0 -0
  11. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/cli/datasets.py +0 -0
  12. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/cli/models.py +0 -0
  13. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/cli/predictions.py +0 -0
  14. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/schemas/__init__.py +0 -0
  15. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/schemas/common.py +0 -0
  16. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/schemas/sales.py +0 -0
  17. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/ui/__init__.py +0 -0
  18. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/ui/components.py +0 -0
  19. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/__init__.py +0 -0
  20. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/add_mapping.py +0 -0
  21. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/agent_tools.py +0 -0
  22. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/apollo_tools.py +0 -0
  23. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/assistant_tool_tag.py +0 -0
  24. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/built_with_api_tools.py +0 -0
  25. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/cache_output_tools.py +0 -0
  26. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/cache_output_tools_local.py +0 -0
  27. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/check_email_validity_tools.py +0 -0
  28. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/check_for_intent_signal.py +0 -0
  29. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/check_linkedin_url_validity.py +0 -0
  30. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/clay_tools.py +0 -0
  31. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/clean_properties.py +0 -0
  32. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/company_utils.py +0 -0
  33. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/compose_salesnav_query.py +0 -0
  34. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/compose_search_query.py +0 -0
  35. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/compose_three_step_workflow.py +0 -0
  36. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/composite_tools.py +0 -0
  37. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/dataframe_tools.py +0 -0
  38. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/domain_parser.py +0 -0
  39. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/email_parse_helpers.py +0 -0
  40. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/email_provider.py +0 -0
  41. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/enrich_lead_information.py +0 -0
  42. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/extract_email_content_for_llm.py +0 -0
  43. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/fetch_openai_config.py +0 -0
  44. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/field_validators.py +0 -0
  45. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/g2_tools.py +0 -0
  46. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_content.py +0 -0
  47. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_email.py +0 -0
  48. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_email_response.py +0 -0
  49. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_flow.py +0 -0
  50. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_leads_salesnav.py +0 -0
  51. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_linkedin_connect_message.py +0 -0
  52. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_linkedin_response_message.py +0 -0
  53. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/generate_structured_output_internal.py +0 -0
  54. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/google_custom_search.py +0 -0
  55. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/google_oauth_tools.py +0 -0
  56. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/google_workspace_tools.py +0 -0
  57. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/hubspot_clearbit.py +0 -0
  58. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/hubspot_crm_tools.py +0 -0
  59. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/instantly_tools.py +0 -0
  60. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/linkedin_crawler.py +0 -0
  61. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/lusha_tools.py +0 -0
  62. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/mailgun_tools.py +0 -0
  63. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/microsoft365_tools.py +0 -0
  64. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openai_assistant_and_file_utils.py +0 -0
  65. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openai_helpers.py +0 -0
  66. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openapi_spec_to_tools.py +0 -0
  67. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openapi_tool/__init__.py +0 -0
  68. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openapi_tool/api_models.py +0 -0
  69. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +0 -0
  70. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/openapi_tool/openapi_tool.py +0 -0
  71. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/parse_linkedin_messages_txt.py +0 -0
  72. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/profile.py +0 -0
  73. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/proxy_curl_tools.py +0 -0
  74. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/proxycurl_search_leads.py +0 -0
  75. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/python_function_to_tools.py +0 -0
  76. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/research_lead.py +0 -0
  77. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/sales_navigator_crawler.py +0 -0
  78. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/salesforce_crm_tools.py +0 -0
  79. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/search_router.py +0 -0
  80. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/search_router_jobs.py +0 -0
  81. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/sendgrid_tools.py +0 -0
  82. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serarch_router_local_business.py +0 -0
  83. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serpapi_additional_tools.py +0 -0
  84. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serpapi_google_jobs.py +0 -0
  85. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serpapi_google_search.py +0 -0
  86. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serpapi_local_business_search.py +0 -0
  87. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serpapi_search_tools.py +0 -0
  88. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serperdev_google_jobs.py +0 -0
  89. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serperdev_local_business.py +0 -0
  90. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/serperdev_search.py +0 -0
  91. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/test_connect.py +0 -0
  92. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/trasform_json.py +0 -0
  93. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/web_download_parse_tools.py +0 -0
  94. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/workflow_code_model.py +0 -0
  95. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/utils/zoominfo_tools.py +0 -0
  96. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/workflow/__init__.py +0 -0
  97. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/workflow/agent.py +0 -0
  98. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/workflow/flow.py +0 -0
  99. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/workflow/task.py +0 -0
  100. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana/workflow/test.py +0 -0
  101. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/SOURCES.txt +0 -0
  102. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/dependency_links.txt +0 -0
  103. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/entry_points.txt +0 -0
  104. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/requires.txt +0 -0
  105. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/src/dhisana.egg-info/top_level.txt +0 -0
  106. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_agent_tools.py +0 -0
  107. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_apollo_company_search.py +0 -0
  108. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_connectivity.py +0 -0
  109. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_google_document.py +0 -0
  110. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_hubspot_call_logs.py +0 -0
  111. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_linkedin_serper.py +0 -0
  112. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_mcp_connectivity.py +0 -0
  113. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_proxycurl_get_company_search_id.py +0 -0
  114. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_proxycurl_job_count.py +0 -0
  115. {dhisana-0.0.1.dev211 → dhisana-0.0.1.dev212}/tests/test_structured_output_with_mcp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev211
3
+ Version: 0.0.1.dev212
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
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='dhisana',
5
- version='0.0.1-dev211',
5
+ version='0.0.1-dev212',
6
6
  description='A Python SDK for Dhisana AI Platform',
7
7
  author='Admin',
8
8
  author_email='contact@dhisana.ai',
@@ -11,6 +11,8 @@ import imaplib
11
11
  import logging
12
12
  import re
13
13
  import uuid
14
+ from email.errors import HeaderParseError
15
+ from email.header import Header, decode_header, make_header
14
16
  from email.mime.text import MIMEText
15
17
  from datetime import datetime, timedelta, timezone
16
18
  from typing import Any, Dict, List, Optional, Union
@@ -35,6 +37,32 @@ from dhisana.utils.google_workspace_tools import (
35
37
  # Helper / Utility
36
38
  # --------------------------------------------------------------------------- #
37
39
 
40
+
41
+ def _decode_header_value(value: Any) -> str:
42
+ """Return a unicode string for an e-mail header field."""
43
+
44
+ if value is None:
45
+ return ""
46
+
47
+ if isinstance(value, Header):
48
+ value = str(value)
49
+
50
+ if isinstance(value, bytes):
51
+ try:
52
+ return value.decode("utf-8")
53
+ except UnicodeDecodeError:
54
+ return value.decode("latin-1", errors="replace")
55
+
56
+ if isinstance(value, str):
57
+ try:
58
+ decoded = make_header(decode_header(value))
59
+ return str(decoded)
60
+ except (HeaderParseError, UnicodeDecodeError, LookupError):
61
+ return value
62
+
63
+ return str(value)
64
+
65
+
38
66
  def _imap_date(iso_dt: Union[str, datetime]) -> str:
39
67
  """
40
68
  Convert an ISO 8601 datetime or datetime object into IMAP date format: DD-Mmm-YYYY.
@@ -150,7 +178,7 @@ def _parse_email_msg(raw_bytes: bytes) -> MessageItem:
150
178
  msg = email.message_from_bytes(raw_bytes)
151
179
 
152
180
  # Helper for reading headers
153
- hdr = lambda h: msg.get(h, "")
181
+ hdr = lambda h: _decode_header_value(msg.get(h))
154
182
 
155
183
  sender_name, sender_email = email.utils.parseaddr(hdr("From"))
156
184
  receiver_name, receiver_email = email.utils.parseaddr(hdr("To"))
@@ -163,10 +191,14 @@ def _parse_email_msg(raw_bytes: bytes) -> MessageItem:
163
191
  part.get_content_type() == "text/plain"
164
192
  and "attachment" not in str(part.get("Content-Disposition", ""))
165
193
  ):
166
- body = part.get_payload(decode=True).decode(errors="ignore")
167
- break
194
+ payload = part.get_payload(decode=True)
195
+ if payload is not None:
196
+ body = payload.decode(errors="ignore")
197
+ break
168
198
  else:
169
- body = msg.get_payload(decode=True).decode(errors="ignore")
199
+ payload = msg.get_payload(decode=True)
200
+ if payload is not None:
201
+ body = payload.decode(errors="ignore")
170
202
 
171
203
  # Parse the Date header to get a timezone-aware datetime
172
204
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev211
3
+ Version: 0.0.1.dev212
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
File without changes
File without changes