kensho-kfinance 3.0.2__tar.gz → 3.0.3__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 (146) hide show
  1. {kensho_kfinance-3.0.2/kensho_kfinance.egg-info → kensho_kfinance-3.0.3}/PKG-INFO +1 -1
  2. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3/kensho_kfinance.egg-info}/PKG-INFO +1 -1
  3. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/CHANGELOG.md +4 -1
  4. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/fetch.py +3 -2
  5. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/meta_classes.py +10 -11
  6. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/test_fetch.py +15 -10
  7. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/test_objects.py +19 -10
  8. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/line_items/line_item_models.py +7 -0
  9. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/line_items/line_item_tools.py +12 -4
  10. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/version.py +2 -2
  11. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.coveragerc +0 -0
  12. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.github/workflows/ci-lint.yml +0 -0
  13. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.github/workflows/ci-test.yml +0 -0
  14. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.github/workflows/python-publish.yml +0 -0
  15. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.gitignore +0 -0
  16. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/.readthedocs.yaml +0 -0
  17. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/AUTHORS.md +0 -0
  18. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/CODE_OF_CONDUCT.md +0 -0
  19. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/CONTRIBUTING.md +0 -0
  20. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/LICENSE +0 -0
  21. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/README.md +0 -0
  22. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/build_tool_calling_documentation.py +0 -0
  23. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/conf.py +0 -0
  24. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/index.rst +0 -0
  25. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/kfinance.rst +0 -0
  26. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/requirements.txt +0 -0
  27. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/templates/apidoc/package.rst_t +0 -0
  28. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/templates/apidoc/toc.rst_t +0 -0
  29. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/docs/tool_calling.rst +0 -0
  30. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/basic_usage.ipynb +0 -0
  31. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/langchain/anthropic_langchain_tool_calling.ipynb +0 -0
  32. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/langchain/google_gemini_langchain_tool_calling.ipynb +0 -0
  33. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/langchain/openai_langchain_tool_calling.ipynb +0 -0
  34. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/non-langchain/anthropic_tool_calling.ipynb +0 -0
  35. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/non-langchain/google_gemini_tool_calling.ipynb +0 -0
  36. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/example_notebooks/tool_calling/non-langchain/openai_langchain_tool_calling.ipynb +0 -0
  37. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/images/colab_logo_32px.png +0 -0
  38. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/justfile +0 -0
  39. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kensho_kfinance.egg-info/SOURCES.txt +0 -0
  40. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kensho_kfinance.egg-info/dependency_links.txt +0 -0
  41. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kensho_kfinance.egg-info/requires.txt +0 -0
  42. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kensho_kfinance.egg-info/top_level.txt +0 -0
  43. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/__init__.py +0 -0
  44. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/README.md +0 -0
  45. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/__init__.py +0 -0
  46. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/batch_request_handling.py +0 -0
  47. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/industry_models.py +0 -0
  48. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/kfinance.py +0 -0
  49. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/__init__.py +0 -0
  50. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/currency_models.py +0 -0
  51. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/date_and_period_models.py +0 -0
  52. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/decimal_with_unit.py +0 -0
  53. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/tests/__init__.py +0 -0
  54. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/models/tests/test_decimal_with_unit.py +0 -0
  55. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/permission_models.py +0 -0
  56. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/server_thread.py +0 -0
  57. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/__init__.py +0 -0
  58. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/test_batch_requests.py +0 -0
  59. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/test_client.py +0 -0
  60. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/client/tests/test_group_objects.py +0 -0
  61. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/conftest.py +0 -0
  62. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/README.md +0 -0
  63. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/__init__.py +0 -0
  64. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/business_relationships/__init__.py +0 -0
  65. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/business_relationships/business_relationship_models.py +0 -0
  66. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/business_relationships/business_relationship_tools.py +0 -0
  67. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/business_relationships/tests/__init__.py +0 -0
  68. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/business_relationships/tests/test_business_relationship_tools.py +0 -0
  69. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/__init__.py +0 -0
  70. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/capitalization_models.py +0 -0
  71. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/capitalization_tools.py +0 -0
  72. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/tests/__init__.py +0 -0
  73. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/tests/test_capitalization_models.py +0 -0
  74. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/capitalizations/tests/test_capitalization_tools.py +0 -0
  75. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/__init__.py +0 -0
  76. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/company_identifiers.py +0 -0
  77. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/company_models.py +0 -0
  78. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/company_tools.py +0 -0
  79. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/tests/__init__.py +0 -0
  80. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/companies/tests/test_company_tools.py +0 -0
  81. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/competitors/__init__.py +0 -0
  82. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/competitors/competitor_models.py +0 -0
  83. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/competitors/competitor_tools.py +0 -0
  84. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/competitors/tests/__init__.py +0 -0
  85. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/competitors/tests/test_competitor_tools.py +0 -0
  86. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/cusip_and_isin/__init__.py +0 -0
  87. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/cusip_and_isin/cusip_and_isin_tools.py +0 -0
  88. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/cusip_and_isin/tests/__init__.py +0 -0
  89. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/cusip_and_isin/tests/test_cusip_and_isin_tools.py +0 -0
  90. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/earnings/__init__.py +0 -0
  91. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/earnings/earning_models.py +0 -0
  92. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/earnings/earning_tools.py +0 -0
  93. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/earnings/tests/__init__.py +0 -0
  94. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/earnings/tests/test_earnings_tools.py +0 -0
  95. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/line_items/__init__.py +0 -0
  96. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/line_items/tests/__init__.py +0 -0
  97. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/line_items/tests/test_line_item_tools.py +0 -0
  98. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/mergers_and_acquisitions/__init__.py +0 -0
  99. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/mergers_and_acquisitions/merger_and_acquisition_tools.py +0 -0
  100. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/mergers_and_acquisitions/tests/__init__.py +0 -0
  101. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/mergers_and_acquisitions/tests/test_merger_and_acquisition_tools.py +0 -0
  102. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/__init__.py +0 -0
  103. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/price_models.py +0 -0
  104. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/price_tools.py +0 -0
  105. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/tests/__init__.py +0 -0
  106. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/tests/test_price_models.py +0 -0
  107. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/prices/tests/test_price_tools.py +0 -0
  108. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/segments/__init__.py +0 -0
  109. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/segments/segment_models.py +0 -0
  110. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/segments/segment_tools.py +0 -0
  111. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/segments/tests/__init__.py +0 -0
  112. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/segments/tests/test_segment_tools.py +0 -0
  113. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/statements/__init__.py +0 -0
  114. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/statements/statement_models.py +0 -0
  115. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/statements/statement_tools.py +0 -0
  116. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/statements/tests/__init__.py +0 -0
  117. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/domains/statements/tests/test_statement_tools.py +0 -0
  118. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/README.md +0 -0
  119. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/__init__.py +0 -0
  120. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/local_mcp/__init__.py +0 -0
  121. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/local_mcp/local_mcp.py +0 -0
  122. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tests/__init__.py +0 -0
  123. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tests/test_example_notebook.py +0 -0
  124. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/README.md +0 -0
  125. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/__init__.py +0 -0
  126. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/all_tools.py +0 -0
  127. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/prompts.py +0 -0
  128. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/README.md +0 -0
  129. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/__init__.py +0 -0
  130. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/get_latest.py +0 -0
  131. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/get_n_quarters_ago.py +0 -0
  132. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/tests/__init__.py +0 -0
  133. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/tests/test_get_lastest.py +0 -0
  134. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/static_tools/tests/test_get_n_quarters_ago.py +0 -0
  135. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/tests/__init__.py +0 -0
  136. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/tests/test_tool_calling_models.py +0 -0
  137. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/integrations/tool_calling/tool_calling_models.py +0 -0
  138. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/mcp.py +0 -0
  139. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/models/permission_models.py +0 -0
  140. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/kfinance/py.typed +0 -0
  141. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/pyproject.toml +0 -0
  142. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/scripts/copyright_line_check.sh +0 -0
  143. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/scripts/lint.sh +0 -0
  144. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/scripts/test.sh +0 -0
  145. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/setup.cfg +0 -0
  146. {kensho_kfinance-3.0.2 → kensho_kfinance-3.0.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kensho-kfinance
3
- Version: 3.0.2
3
+ Version: 3.0.3
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.0.2
3
+ Version: 3.0.3
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,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## v3.0.3
4
+ - Add LineItemResponse model
5
+
3
6
  ## v3.0.2
4
7
  - Add kfinance.mcp back to simplify transition to 3.0
5
8
 
@@ -25,7 +28,7 @@
25
28
  - Add transcript permission and update accepted_permissions type to set[Permission]
26
29
 
27
30
  ## v2.6.3
28
- - Bump urllib3 to 2.5 to address CVEs
31
+ - Bump urllib3 to 2.5 to address CVEs
29
32
 
30
33
  ## v2.6.2
31
34
  - Safely check for incomplete merger information
@@ -20,6 +20,7 @@ from kfinance.domains.capitalizations.capitalization_models import Capitalizatio
20
20
  from kfinance.domains.companies.company_models import IdentificationTriple
21
21
  from kfinance.domains.competitors.competitor_models import CompetitorResponse, CompetitorSource
22
22
  from kfinance.domains.earnings.earning_models import EarningsCallResp
23
+ from kfinance.domains.line_items.line_item_models import LineItemResponse
23
24
  from kfinance.domains.prices.price_models import PriceHistory
24
25
  from kfinance.domains.segments.segment_models import SegmentType
25
26
 
@@ -410,7 +411,7 @@ class KFinanceApiClient:
410
411
  end_year: Optional[int] = None,
411
412
  start_quarter: Optional[int] = None,
412
413
  end_quarter: Optional[int] = None,
413
- ) -> dict:
414
+ ) -> LineItemResponse:
414
415
  """Get a specified financial line item for a specified duration."""
415
416
  url = (
416
417
  f"{self.url_base}line_item/{company_id}/{line_item}/"
@@ -420,7 +421,7 @@ class KFinanceApiClient:
420
421
  f"{start_quarter if start_quarter is not None else 'none'}/"
421
422
  f"{end_quarter if end_quarter is not None else 'none'}"
422
423
  )
423
- return self.fetch(url)
424
+ return LineItemResponse.model_validate(self.fetch(url))
424
425
 
425
426
  def fetch_info(self, company_id: int) -> dict:
426
427
  """Get the company info."""
@@ -202,18 +202,17 @@ class CompanyFunctionsMetaClass:
202
202
  except ValueError:
203
203
  return pd.DataFrame()
204
204
 
205
+ line_item_response = self.kfinance_api_client.fetch_line_item(
206
+ company_id=self.company_id,
207
+ line_item=line_item,
208
+ period_type=period_type,
209
+ start_year=start_year,
210
+ end_year=end_year,
211
+ start_quarter=start_quarter,
212
+ end_quarter=end_quarter,
213
+ )
205
214
  return (
206
- pd.DataFrame(
207
- self.kfinance_api_client.fetch_line_item(
208
- company_id=self.company_id,
209
- line_item=line_item,
210
- period_type=period_type,
211
- start_year=start_year,
212
- end_year=end_year,
213
- start_quarter=start_quarter,
214
- end_quarter=end_quarter,
215
- )
216
- )
215
+ pd.DataFrame({"line_item": line_item_response.line_item})
217
216
  .transpose()
218
217
  .apply(pd.to_numeric)
219
218
  .replace(np.nan, None)
@@ -115,7 +115,9 @@ class TestFetchItem(TestCase):
115
115
  company_id = 21719
116
116
  line_item = "cash"
117
117
  expected_fetch_url = f"{self.kfinance_api_client.url_base}line_item/{company_id}/{line_item}/none/none/none/none/none"
118
- self.kfinance_api_client.fetch_line_item(company_id=company_id, line_item=line_item)
118
+ # Validation error is ok, we only care that the function was called with the correct url
119
+ with pytest.raises(ValidationError):
120
+ self.kfinance_api_client.fetch_line_item(company_id=company_id, line_item=line_item)
119
121
  self.kfinance_api_client.fetch.assert_called_with(expected_fetch_url)
120
122
  period_type = PeriodType.quarterly
121
123
  start_year = 2024
@@ -123,15 +125,18 @@ class TestFetchItem(TestCase):
123
125
  start_quarter = 1
124
126
  end_quarter = 4
125
127
  expected_fetch_url = f"{self.kfinance_api_client.url_base}line_item/{company_id}/{line_item}/{period_type.value}/{start_year}/{end_year}/{start_quarter}/{end_quarter}"
126
- self.kfinance_api_client.fetch_line_item(
127
- company_id=company_id,
128
- line_item=line_item,
129
- period_type=period_type,
130
- start_year=start_year,
131
- end_year=end_year,
132
- start_quarter=start_quarter,
133
- end_quarter=end_quarter,
134
- )
128
+
129
+ # Validation error is ok, we only care that the function was called with the correct url
130
+ with pytest.raises(ValidationError):
131
+ self.kfinance_api_client.fetch_line_item(
132
+ company_id=company_id,
133
+ line_item=line_item,
134
+ period_type=period_type,
135
+ start_year=start_year,
136
+ end_year=end_year,
137
+ start_quarter=start_quarter,
138
+ end_quarter=end_quarter,
139
+ )
135
140
  self.kfinance_api_client.fetch.assert_called_with(expected_fetch_url)
136
141
 
137
142
  def test_fetch_info(self) -> None:
@@ -28,6 +28,7 @@ from kfinance.domains.business_relationships.business_relationship_models import
28
28
  from kfinance.domains.capitalizations.capitalization_models import Capitalizations
29
29
  from kfinance.domains.companies.company_models import CompanyIdAndName
30
30
  from kfinance.domains.earnings.earning_models import EarningsCallResp
31
+ from kfinance.domains.line_items.line_item_models import LineItemResponse
31
32
 
32
33
 
33
34
  msft_company_id = "21835"
@@ -106,15 +107,17 @@ MOCK_COMPANY_DB = {
106
107
  }
107
108
  },
108
109
  "line_items": {
109
- "revenue": {
110
- "line_item": {
111
- "2019": "125843000000.000000",
112
- "2020": "143015000000.000000",
113
- "2021": "168088000000.000000",
114
- "2022": "198270000000.000000",
115
- "2023": "211915000000.000000",
110
+ "revenue": LineItemResponse.model_validate(
111
+ {
112
+ "line_item": {
113
+ "2019": "125843000000.000000",
114
+ "2020": "143015000000.000000",
115
+ "2021": "168088000000.000000",
116
+ "2022": "198270000000.000000",
117
+ "2023": "211915000000.000000",
118
+ }
116
119
  }
117
- }
120
+ )
118
121
  },
119
122
  "segments": {
120
123
  "2024": {
@@ -533,8 +536,11 @@ class TestCompany(TestCase):
533
536
 
534
537
  def test_revenue(self) -> None:
535
538
  """test revenue"""
539
+ line_item_response: LineItemResponse = MOCK_COMPANY_DB[msft_company_id]["line_items"][
540
+ "revenue"
541
+ ]
536
542
  expected_revenue = (
537
- pd.DataFrame(MOCK_COMPANY_DB[msft_company_id]["line_items"]["revenue"])
543
+ pd.DataFrame({"line_item": line_item_response.line_item})
538
544
  .transpose()
539
545
  .apply(pd.to_numeric)
540
546
  .replace(np.nan, None)
@@ -862,8 +868,11 @@ class TestTicker(TestCase):
862
868
 
863
869
  def test_revenue(self) -> None:
864
870
  """test revenue"""
871
+ line_item_response: LineItemResponse = MOCK_COMPANY_DB[msft_company_id]["line_items"][
872
+ "revenue"
873
+ ]
865
874
  expected_revenue = (
866
- pd.DataFrame(MOCK_COMPANY_DB[msft_company_id]["line_items"]["revenue"])
875
+ pd.DataFrame({"line_item": line_item_response.line_item})
867
876
  .transpose()
868
877
  .apply(pd.to_numeric)
869
878
  .replace(np.nan, None)
@@ -1,6 +1,13 @@
1
+ from decimal import Decimal
1
2
  from itertools import chain
2
3
  from typing import TypedDict
3
4
 
5
+ from pydantic import BaseModel
6
+
7
+
8
+ class LineItemResponse(BaseModel):
9
+ line_item: dict[str, Decimal]
10
+
4
11
 
5
12
  class LineItemType(TypedDict):
6
13
  name: str
@@ -9,10 +9,14 @@ from kfinance.client.batch_request_handling import Task, process_tasks_in_thread
9
9
  from kfinance.client.models.date_and_period_models import PeriodType
10
10
  from kfinance.client.permission_models import Permission
11
11
  from kfinance.domains.companies.company_identifiers import (
12
+ Identifier,
12
13
  fetch_company_ids_from_identifiers,
13
14
  parse_identifiers,
14
15
  )
15
- from kfinance.domains.line_items.line_item_models import LINE_ITEM_NAMES_AND_ALIASES
16
+ from kfinance.domains.line_items.line_item_models import (
17
+ LINE_ITEM_NAMES_AND_ALIASES,
18
+ LineItemResponse,
19
+ )
16
20
  from kfinance.integrations.tool_calling.tool_calling_models import (
17
21
  KfinanceTool,
18
22
  ToolArgsWithIdentifiers,
@@ -94,13 +98,17 @@ class GetFinancialLineItemFromIdentifiers(KfinanceTool):
94
98
  for identifier, company_id in identifiers_to_company_ids.items()
95
99
  ]
96
100
 
97
- line_item_responses = process_tasks_in_thread_pool_executor(
98
- api_client=api_client, tasks=tasks
101
+ line_item_responses: dict[Identifier, LineItemResponse] = (
102
+ process_tasks_in_thread_pool_executor(api_client=api_client, tasks=tasks)
99
103
  )
100
104
 
101
105
  output = dict()
102
106
  for identifier, result in line_item_responses.items():
103
- df = pd.DataFrame(result).apply(pd.to_numeric).replace(np.nan, None)
107
+ df = (
108
+ pd.DataFrame({"line_item": result.line_item})
109
+ .apply(pd.to_numeric)
110
+ .replace(np.nan, None)
111
+ )
104
112
  # If no date and multiple companies, only return the most recent value.
105
113
  # By default, we return 5 years of data, which can be too much when
106
114
  # returning data for many companies.
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.0.2'
21
- __version_tuple__ = version_tuple = (3, 0, 2)
20
+ __version__ = version = '3.0.3'
21
+ __version_tuple__ = version_tuple = (3, 0, 3)
File without changes