kensho-kfinance 3.2.14__tar.gz → 3.2.16__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.

Potentially problematic release.


This version of kensho-kfinance might be problematic. Click here for more details.

Files changed (149) hide show
  1. {kensho_kfinance-3.2.14/kensho_kfinance.egg-info → kensho_kfinance-3.2.16}/PKG-INFO +1 -1
  2. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16/kensho_kfinance.egg-info}/PKG-INFO +1 -1
  3. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/CHANGELOG.md +7 -0
  4. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/decimal_with_unit.py +14 -2
  5. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/tests/test_decimal_with_unit.py +9 -0
  6. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/competitors/competitor_tools.py +3 -1
  7. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/line_items/line_item_models.py +329 -12
  8. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/line_items/line_item_tools.py +83 -1
  9. kensho_kfinance-3.2.16/kfinance/domains/line_items/tests/test_line_item_tools.py +271 -0
  10. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/version.py +3 -3
  11. kensho_kfinance-3.2.14/kfinance/domains/line_items/tests/test_line_item_tools.py +0 -133
  12. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.coveragerc +0 -0
  13. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.github/workflows/ci-lint.yml +0 -0
  14. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.github/workflows/ci-test.yml +0 -0
  15. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.github/workflows/python-publish.yml +0 -0
  16. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.gitignore +0 -0
  17. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/.readthedocs.yaml +0 -0
  18. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/AUTHORS.md +0 -0
  19. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/CODE_OF_CONDUCT.md +0 -0
  20. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/CONTRIBUTING.md +0 -0
  21. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/LICENSE +0 -0
  22. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/README.md +0 -0
  23. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/build_tool_calling_documentation.py +0 -0
  24. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/conf.py +0 -0
  25. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/index.rst +0 -0
  26. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/kfinance.rst +0 -0
  27. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/requirements.txt +0 -0
  28. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/templates/apidoc/package.rst_t +0 -0
  29. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/templates/apidoc/toc.rst_t +0 -0
  30. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/docs/tool_calling.rst +0 -0
  31. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/basic_usage.ipynb +0 -0
  32. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/langchain/anthropic_langchain_tool_calling.ipynb +0 -0
  33. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/langchain/google_gemini_langchain_tool_calling.ipynb +0 -0
  34. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/langchain/openai_langchain_tool_calling.ipynb +0 -0
  35. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/non-langchain/anthropic_tool_calling.ipynb +0 -0
  36. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/non-langchain/google_gemini_tool_calling.ipynb +0 -0
  37. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/example_notebooks/tool_calling/non-langchain/openai_langchain_tool_calling.ipynb +0 -0
  38. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/images/colab_logo_32px.png +0 -0
  39. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/justfile +0 -0
  40. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kensho_kfinance.egg-info/SOURCES.txt +0 -0
  41. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kensho_kfinance.egg-info/dependency_links.txt +0 -0
  42. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kensho_kfinance.egg-info/requires.txt +0 -0
  43. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kensho_kfinance.egg-info/top_level.txt +0 -0
  44. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/__init__.py +0 -0
  45. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/README.md +0 -0
  46. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/__init__.py +0 -0
  47. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/batch_request_handling.py +0 -0
  48. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/fetch.py +0 -0
  49. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/industry_models.py +0 -0
  50. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/kfinance.py +0 -0
  51. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/meta_classes.py +0 -0
  52. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/__init__.py +0 -0
  53. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/currency_models.py +0 -0
  54. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/date_and_period_models.py +0 -0
  55. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/models/tests/__init__.py +0 -0
  56. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/permission_models.py +0 -0
  57. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/server_thread.py +0 -0
  58. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/__init__.py +0 -0
  59. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/test_batch_requests.py +0 -0
  60. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/test_client.py +0 -0
  61. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/test_fetch.py +0 -0
  62. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/test_group_objects.py +0 -0
  63. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/client/tests/test_objects.py +0 -0
  64. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/conftest.py +0 -0
  65. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/README.md +0 -0
  66. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/__init__.py +0 -0
  67. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/business_relationships/__init__.py +0 -0
  68. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/business_relationships/business_relationship_models.py +0 -0
  69. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/business_relationships/business_relationship_tools.py +0 -0
  70. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/business_relationships/tests/__init__.py +0 -0
  71. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/business_relationships/tests/test_business_relationship_tools.py +0 -0
  72. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/__init__.py +0 -0
  73. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/capitalization_models.py +0 -0
  74. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/capitalization_tools.py +0 -0
  75. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/tests/__init__.py +0 -0
  76. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/tests/test_capitalization_models.py +0 -0
  77. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/capitalizations/tests/test_capitalization_tools.py +0 -0
  78. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/__init__.py +0 -0
  79. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/company_identifiers.py +0 -0
  80. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/company_models.py +0 -0
  81. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/company_tools.py +0 -0
  82. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/tests/__init__.py +0 -0
  83. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/companies/tests/test_company_tools.py +0 -0
  84. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/competitors/__init__.py +0 -0
  85. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/competitors/competitor_models.py +0 -0
  86. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/competitors/tests/__init__.py +0 -0
  87. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/competitors/tests/test_competitor_tools.py +0 -0
  88. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/cusip_and_isin/__init__.py +0 -0
  89. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/cusip_and_isin/cusip_and_isin_tools.py +0 -0
  90. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/cusip_and_isin/tests/__init__.py +0 -0
  91. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/cusip_and_isin/tests/test_cusip_and_isin_tools.py +0 -0
  92. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/earnings/__init__.py +0 -0
  93. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/earnings/earning_models.py +0 -0
  94. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/earnings/earning_tools.py +0 -0
  95. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/earnings/tests/__init__.py +0 -0
  96. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/earnings/tests/test_earnings_tools.py +0 -0
  97. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/line_items/__init__.py +0 -0
  98. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/line_items/tests/__init__.py +0 -0
  99. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/mergers_and_acquisitions/__init__.py +0 -0
  100. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/mergers_and_acquisitions/merger_and_acquisition_models.py +0 -0
  101. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/mergers_and_acquisitions/merger_and_acquisition_tools.py +0 -0
  102. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/mergers_and_acquisitions/tests/__init__.py +0 -0
  103. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/mergers_and_acquisitions/tests/test_merger_and_acquisition_tools.py +0 -0
  104. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/__init__.py +0 -0
  105. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/price_models.py +0 -0
  106. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/price_tools.py +0 -0
  107. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/tests/__init__.py +0 -0
  108. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/tests/test_price_models.py +0 -0
  109. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/prices/tests/test_price_tools.py +0 -0
  110. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/segments/__init__.py +0 -0
  111. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/segments/segment_models.py +0 -0
  112. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/segments/segment_tools.py +0 -0
  113. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/segments/tests/__init__.py +0 -0
  114. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/segments/tests/test_segment_tools.py +0 -0
  115. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/statements/__init__.py +0 -0
  116. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/statements/statement_models.py +0 -0
  117. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/statements/statement_tools.py +0 -0
  118. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/statements/tests/__init__.py +0 -0
  119. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/domains/statements/tests/test_statement_tools.py +0 -0
  120. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/README.md +0 -0
  121. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/__init__.py +0 -0
  122. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/local_mcp/__init__.py +0 -0
  123. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/local_mcp/kfinance_mcp.py +0 -0
  124. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/local_mcp/local_mcp.py +0 -0
  125. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tests/__init__.py +0 -0
  126. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tests/test_example_notebook.py +0 -0
  127. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/README.md +0 -0
  128. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/__init__.py +0 -0
  129. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/all_tools.py +0 -0
  130. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/prompts.py +0 -0
  131. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/README.md +0 -0
  132. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/__init__.py +0 -0
  133. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/get_latest.py +0 -0
  134. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/get_n_quarters_ago.py +0 -0
  135. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/tests/__init__.py +0 -0
  136. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/tests/test_get_lastest.py +0 -0
  137. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/static_tools/tests/test_get_n_quarters_ago.py +0 -0
  138. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/tests/__init__.py +0 -0
  139. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/tests/test_tool_calling_models.py +0 -0
  140. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/integrations/tool_calling/tool_calling_models.py +0 -0
  141. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/mcp.py +0 -0
  142. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/models/permission_models.py +0 -0
  143. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/kfinance/py.typed +0 -0
  144. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/pyproject.toml +0 -0
  145. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/scripts/copyright_line_check.sh +0 -0
  146. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/scripts/lint.sh +0 -0
  147. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/scripts/test.sh +0 -0
  148. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/setup.cfg +0 -0
  149. {kensho_kfinance-3.2.14 → kensho_kfinance-3.2.16}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kensho-kfinance
3
- Version: 3.2.14
3
+ Version: 3.2.16
4
4
  Summary: Python CLI for kFinance
5
5
  Author-email: Luke Brown <luke.brown@kensho.com>, Michelle Keoy <michelle.keoy@kensho.com>, Keith Page <keith.page@kensho.com>, Matthew Rosen <matthew.rosen@kensho.com>, Nick Roshdieh <nick.roshdieh@kensho.com>
6
6
  Project-URL: source, https://github.com/kensho-technologies/kfinance
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kensho-kfinance
3
- Version: 3.2.14
3
+ Version: 3.2.16
4
4
  Summary: Python CLI for kFinance
5
5
  Author-email: Luke Brown <luke.brown@kensho.com>, Michelle Keoy <michelle.keoy@kensho.com>, Keith Page <keith.page@kensho.com>, Matthew Rosen <matthew.rosen@kensho.com>, Nick Roshdieh <nick.roshdieh@kensho.com>
6
6
  Project-URL: source, https://github.com/kensho-technologies/kfinance
@@ -1,4 +1,11 @@
1
1
  # Changelog
2
+
3
+ ## v3.2.16
4
+ - Allow None and "NaN" for DecimalWithValue
5
+
6
+ ## v3.2.15
7
+ - Add smart line item validation with intelligent suggestions and descriptions to reduce token consumption by 75%
8
+
2
9
  # 3.2.14
3
10
  - Fix Capitalizations validator to handle nulls
4
11
 
@@ -2,7 +2,7 @@ from copy import deepcopy
2
2
  from decimal import Decimal
3
3
  from typing import Any
4
4
 
5
- from pydantic import BaseModel, Field, model_validator
5
+ from pydantic import BaseModel, Field, field_validator, model_validator
6
6
  from typing_extensions import Self
7
7
 
8
8
  from kfinance.client.models.currency_models import ISO_CODE_TO_CURRENCY
@@ -20,11 +20,23 @@ class DecimalWithUnit(BaseModel):
20
20
  existing subclass like `Money` or `Shares` or create a new one.
21
21
  """
22
22
 
23
- value: Decimal
23
+ value: Decimal = Field(allow_inf_nan=True)
24
24
  unit: str
25
25
  # exclude conventional_decimals from serialization
26
26
  conventional_decimals: int = Field(exclude=True)
27
27
 
28
+ @field_validator("value", mode="before")
29
+ @classmethod
30
+ def convert_none_to_nan(cls, v: Any) -> Any:
31
+ """Convert None values to NaN.
32
+
33
+ Price data can include None for open prices.
34
+ https://kfinance.kensho.com/api/v1/pricing/37284793/2003-01-01/2024-12-31/month/adjusted
35
+ """
36
+ if v is None:
37
+ return Decimal("NaN")
38
+ return v
39
+
28
40
  @model_validator(mode="after")
29
41
  def quantize_value(self) -> Self:
30
42
  """Quantize the value at the end of the deserialization.
@@ -32,6 +32,15 @@ class TestDecimalWithUnit:
32
32
  )
33
33
  assert dwu.value == expected_value
34
34
 
35
+ @pytest.mark.parametrize("value", [None, "NaN"])
36
+ def test_null_nan_allowed(self, value: str | None):
37
+ """
38
+ WHEN a DecimalWithUnit gets deserialized with None or "NaN"
39
+ THEN the deserialized value is Decimal("NaN")
40
+ """
41
+ dwu = DecimalWithUnit.model_validate(dict(value=value, conventional_decimals=1, unit="foo"))
42
+ assert dwu.value.is_nan()
43
+
35
44
 
36
45
  class TestMoney:
37
46
  @pytest.mark.parametrize("currency, expected_conventional_decimals", [("USD", 2), ("BIF", 0)])
@@ -1,3 +1,5 @@
1
+ from typing import Type
2
+
1
3
  from kfinance.client.batch_request_handling import Task, process_tasks_in_thread_pool_executor
2
4
  from kfinance.client.permission_models import Permission
3
5
  from kfinance.domains.competitors.competitor_models import CompetitorResponse, CompetitorSource
@@ -20,7 +22,7 @@ class GetCompetitorsFromIdentifiersResp(ToolRespWithErrors):
20
22
  class GetCompetitorsFromIdentifiers(KfinanceTool):
21
23
  name: str = "get_competitors_from_identifiers"
22
24
  description: str = "Retrieves a list of company_id and company_name that are competitors for a list of companies, optionally filtered by the source of the competitor information."
23
- args_schema = GetCompetitorsFromIdentifiersArgs
25
+ args_schema: Type[GetCompetitorsFromIdentifiersArgs] = GetCompetitorsFromIdentifiersArgs
24
26
  accepted_permissions: set[Permission] | None = {Permission.CompetitorsPermission}
25
27
 
26
28
  def _run(