dhisana 0.0.1.dev271__tar.gz → 0.0.1.dev272__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 (121) hide show
  1. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/PKG-INFO +1 -1
  2. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/setup.py +1 -1
  3. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/proxy_curl_tools.py +29 -11
  4. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/PKG-INFO +1 -1
  5. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/README.md +0 -0
  6. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/pyproject.toml +0 -0
  7. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/setup.cfg +0 -0
  8. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/__init__.py +0 -0
  9. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/cli/__init__.py +0 -0
  10. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/cli/cli.py +0 -0
  11. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/cli/datasets.py +0 -0
  12. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/cli/models.py +0 -0
  13. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/cli/predictions.py +0 -0
  14. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/schemas/__init__.py +0 -0
  15. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/schemas/common.py +0 -0
  16. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/schemas/sales.py +0 -0
  17. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/ui/__init__.py +0 -0
  18. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/ui/components.py +0 -0
  19. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/__init__.py +0 -0
  20. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/add_mapping.py +0 -0
  21. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/agent_tools.py +0 -0
  22. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/apollo_tools.py +0 -0
  23. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/assistant_tool_tag.py +0 -0
  24. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/built_with_api_tools.py +0 -0
  25. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/cache_output_tools.py +0 -0
  26. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/cache_output_tools_local.py +0 -0
  27. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/check_email_validity_tools.py +0 -0
  28. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/check_for_intent_signal.py +0 -0
  29. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/check_linkedin_url_validity.py +0 -0
  30. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/clay_tools.py +0 -0
  31. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/clean_properties.py +0 -0
  32. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/company_utils.py +0 -0
  33. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/compose_salesnav_query.py +0 -0
  34. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/compose_search_query.py +0 -0
  35. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/compose_three_step_workflow.py +0 -0
  36. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/composite_tools.py +0 -0
  37. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/dataframe_tools.py +0 -0
  38. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/domain_parser.py +0 -0
  39. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/email_body_utils.py +0 -0
  40. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/email_parse_helpers.py +0 -0
  41. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/email_provider.py +0 -0
  42. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/enrich_lead_information.py +0 -0
  43. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/extract_email_content_for_llm.py +0 -0
  44. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/fetch_openai_config.py +0 -0
  45. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/field_validators.py +0 -0
  46. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/g2_tools.py +0 -0
  47. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_content.py +0 -0
  48. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_custom_message.py +0 -0
  49. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_email.py +0 -0
  50. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_email_response.py +0 -0
  51. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_flow.py +0 -0
  52. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_leads_salesnav.py +0 -0
  53. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_linkedin_connect_message.py +0 -0
  54. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_linkedin_response_message.py +0 -0
  55. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/generate_structured_output_internal.py +0 -0
  56. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/google_custom_search.py +0 -0
  57. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/google_oauth_tools.py +0 -0
  58. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/google_workspace_tools.py +0 -0
  59. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/hubspot_clearbit.py +0 -0
  60. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/hubspot_crm_tools.py +0 -0
  61. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/instantly_tools.py +0 -0
  62. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/linkedin_crawler.py +0 -0
  63. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/lusha_tools.py +0 -0
  64. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/mailgun_tools.py +0 -0
  65. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/mailreach_tools.py +0 -0
  66. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/microsoft365_tools.py +0 -0
  67. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openai_assistant_and_file_utils.py +0 -0
  68. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openai_helpers.py +0 -0
  69. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openapi_spec_to_tools.py +0 -0
  70. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openapi_tool/__init__.py +0 -0
  71. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openapi_tool/api_models.py +0 -0
  72. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openapi_tool/convert_openai_spec_to_tool.py +0 -0
  73. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/openapi_tool/openapi_tool.py +0 -0
  74. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/parse_linkedin_messages_txt.py +0 -0
  75. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/profile.py +0 -0
  76. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/proxycurl_search_leads.py +0 -0
  77. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/python_function_to_tools.py +0 -0
  78. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/research_lead.py +0 -0
  79. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/sales_navigator_crawler.py +0 -0
  80. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/salesforce_crm_tools.py +0 -0
  81. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/search_router.py +0 -0
  82. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/search_router_jobs.py +0 -0
  83. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/sendgrid_tools.py +0 -0
  84. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serarch_router_local_business.py +0 -0
  85. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serpapi_additional_tools.py +0 -0
  86. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serpapi_google_jobs.py +0 -0
  87. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serpapi_google_search.py +0 -0
  88. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serpapi_local_business_search.py +0 -0
  89. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serpapi_search_tools.py +0 -0
  90. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serperdev_google_jobs.py +0 -0
  91. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serperdev_local_business.py +0 -0
  92. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/serperdev_search.py +0 -0
  93. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/smtp_email_tools.py +0 -0
  94. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/test_connect.py +0 -0
  95. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/trasform_json.py +0 -0
  96. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/web_download_parse_tools.py +0 -0
  97. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/workflow_code_model.py +0 -0
  98. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/utils/zoominfo_tools.py +0 -0
  99. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/workflow/__init__.py +0 -0
  100. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/workflow/agent.py +0 -0
  101. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/workflow/flow.py +0 -0
  102. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/workflow/task.py +0 -0
  103. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana/workflow/test.py +0 -0
  104. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/SOURCES.txt +0 -0
  105. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/dependency_links.txt +0 -0
  106. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/entry_points.txt +0 -0
  107. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/requires.txt +0 -0
  108. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/src/dhisana.egg-info/top_level.txt +0 -0
  109. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_agent_tools.py +0 -0
  110. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_apollo_company_search.py +0 -0
  111. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_apollo_lead_search.py +0 -0
  112. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_connectivity.py +0 -0
  113. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_email_body_utils.py +0 -0
  114. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_google_document.py +0 -0
  115. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_hubspot_call_logs.py +0 -0
  116. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_linkedin_serper.py +0 -0
  117. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_mailreach.py +0 -0
  118. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_mcp_connectivity.py +0 -0
  119. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_proxycurl_get_company_search_id.py +0 -0
  120. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/tests/test_proxycurl_job_count.py +0 -0
  121. {dhisana-0.0.1.dev271 → dhisana-0.0.1.dev272}/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.dev271
3
+ Version: 0.0.1.dev272
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-dev271',
5
+ version='0.0.1-dev272',
6
6
  description='A Python SDK for Dhisana AI Platform',
7
7
  author='Admin',
8
8
  author_email='contact@dhisana.ai',
@@ -826,23 +826,41 @@ def fill_in_missing_properties(input_user_properties: dict, person_data: dict) -
826
826
  # Experiences
827
827
  experiences = person_data.get("experiences", [])
828
828
  if experiences:
829
- # Current role data
830
-
831
- input_user_properties["organization_name"] = experiences[0].get("company", "")
829
+ # Helper to convert starts_at dict to a comparable tuple (year, month, day)
830
+ def get_start_date_tuple(exp):
831
+ starts_at = exp.get("starts_at")
832
+ if not starts_at:
833
+ return (0, 0, 0)
834
+ return (
835
+ starts_at.get("year", 0) or 0,
836
+ starts_at.get("month", 0) or 0,
837
+ starts_at.get("day", 0) or 0
838
+ )
839
+
840
+ # Find current role: no ends_at and latest starts_at
841
+ current_experiences = [exp for exp in experiences if not exp.get("ends_at")]
842
+ if current_experiences:
843
+ # Pick the one with the latest starts_at
844
+ current_role = max(current_experiences, key=get_start_date_tuple)
845
+ else:
846
+ # Fallback: pick the experience with the latest starts_at overall
847
+ current_role = max(experiences, key=get_start_date_tuple)
848
+
849
+ input_user_properties["organization_name"] = current_role.get("company", "")
832
850
 
833
- org_url = experiences[0].get("company_linkedin_profile_url", "")
834
- if org_url and is_empty(input_user_properties.get("organization_linkedin_url")):
851
+ org_url = current_role.get("company_linkedin_profile_url", "")
852
+ if org_url:
835
853
  input_user_properties["organization_linkedin_url"] = org_url
836
854
 
837
- # If there's a second experience, track it as previous
838
- if len(experiences) > 1:
839
- previous_org = experiences[1]
855
+ # Find previous role: the most recent experience that is NOT the current role
856
+ other_experiences = [exp for exp in experiences if exp is not current_role]
857
+ if other_experiences:
858
+ # Sort by starts_at descending and pick the most recent
859
+ previous_org = max(other_experiences, key=get_start_date_tuple)
840
860
  prev_org_url = previous_org.get("company_linkedin_profile_url", "")
841
861
 
842
- if prev_org_url and is_empty(input_user_properties.get("previous_organization_linkedin_url")):
862
+ if prev_org_url:
843
863
  input_user_properties["previous_organization_linkedin_url"] = prev_org_url
844
-
845
- if is_empty(input_user_properties.get("previous_organization_name")):
846
864
  input_user_properties["previous_organization_name"] = previous_org.get("company", "")
847
865
 
848
866
  # Combine city/state if available (and if lead_location is empty); avoid literal "None"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhisana
3
- Version: 0.0.1.dev271
3
+ Version: 0.0.1.dev272
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