From a030980495a2c00119b8b2838a28695f8755eff5 Mon Sep 17 00:00:00 2001 From: "penify-dev[bot]" <146478655+penify-dev[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 02:48:15 +0000 Subject: [PATCH] Add architecture documentation --- docs345/docbook/README_8md.xml | 5 + docs345/docbook/annotated.xml | 4 + docs345/docbook/api__client_8py.xml | 21 + docs345/docbook/auth__commands_8py.xml | 25 + docs345/docbook/base__analyzer_8py.xml | 21 + docs345/docbook/classException.xml | 25 + .../docbook/classException__coll__graph.md5 | 1 + .../docbook/classException__coll__graph.svg | 26 + .../classException__inherit__graph.md5 | 1 + .../classException__inherit__graph.svg | 46 + ...nify__hook_1_1api__client_1_1APIClient.xml | 206 +++ ...1api__client_1_1APIClient__coll__graph.md5 | 1 + ...1api__client_1_1APIClient__coll__graph.svg | 36 + ...f74798e7d428b4e2f20095287eb2ce_icgraph.md5 | 1 + ...f74798e7d428b4e2f20095287eb2ce_icgraph.svg | 39 + ...0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 | 1 + ...0ada470b897935f9fb372cd0e7e51e3_cgraph.svg | 70 + ...hook_1_1base__analyzer_1_1BaseAnalyzer.xml | 99 ++ ..._analyzer_1_1BaseAnalyzer__coll__graph.md5 | 1 + ..._analyzer_1_1BaseAnalyzer__coll__graph.svg | 33 + ...alyzer_1_1BaseAnalyzer__inherit__graph.md5 | 1 + ...alyzer_1_1BaseAnalyzer__inherit__graph.svg | 127 ++ ..._1commit__analyzer_1_1CommitDocGenHook.xml | 229 +++ ...lyzer_1_1CommitDocGenHook__coll__graph.md5 | 1 + ...lyzer_1_1CommitDocGenHook__coll__graph.svg | 57 + ...er_1_1CommitDocGenHook__inherit__graph.md5 | 1 + ...er_1_1CommitDocGenHook__inherit__graph.svg | 57 + ...370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 | 1 + ...370a03f7ed9175ef6f81e931a105ea9_cgraph.svg | 180 +++ ...496194276441fa2eb2fa014eaab9a37_cgraph.md5 | 1 + ...496194276441fa2eb2fa014eaab9a37_cgraph.svg | 54 + ...96194276441fa2eb2fa014eaab9a37_icgraph.md5 | 1 + ...96194276441fa2eb2fa014eaab9a37_icgraph.svg | 40 + ...99c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 | 1 + ...99c5cbc852a7ec3b412ccb43c274ca_icgraph.svg | 40 + ...da13cc121d96342476ccf72b63a007f_cgraph.md5 | 1 + ...da13cc121d96342476ccf72b63a007f_cgraph.svg | 86 ++ ...a13cc121d96342476ccf72b63a007f_icgraph.md5 | 1 + ...a13cc121d96342476ccf72b63a007f_icgraph.svg | 40 + ...127d86729e226d74dbeb095b008db3e_cgraph.md5 | 1 + ...127d86729e226d74dbeb095b008db3e_cgraph.svg | 30 + ...27d86729e226d74dbeb095b008db3e_icgraph.md5 | 1 + ...27d86729e226d74dbeb095b008db3e_icgraph.svg | 30 + ...1file__analyzer_1_1FileAnalyzerGenHook.xml | 129 ++ ...er_1_1FileAnalyzerGenHook__coll__graph.md5 | 1 + ...er_1_1FileAnalyzerGenHook__coll__graph.svg | 56 + ...1_1FileAnalyzerGenHook__inherit__graph.md5 | 1 + ...1_1FileAnalyzerGenHook__inherit__graph.svg | 56 + ...cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 | 1 + ...cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg | 71 + ...c6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 | 1 + ...c6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg | 55 + ...f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 | 1 + ...f4dffbc432fac3e259d957dd1e187f1_cgraph.svg | 204 +++ ...ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 | 1 + ...ab39391dfb7686f2a2d21a702dd3073_cgraph.svg | 40 + ...der__analyzer_1_1FolderAnalyzerGenHook.xml | 120 ++ ..._1_1FolderAnalyzerGenHook__coll__graph.md5 | 1 + ..._1_1FolderAnalyzerGenHook__coll__graph.svg | 55 + ...1FolderAnalyzerGenHook__inherit__graph.md5 | 1 + ...1FolderAnalyzerGenHook__inherit__graph.svg | 55 + ...b845318fc7ac3b607daf26378e19ec_icgraph.md5 | 1 + ...b845318fc7ac3b607daf26378e19ec_icgraph.svg | 41 + ...d189d1b8c773bf710a899eb21fd76cc_cgraph.md5 | 1 + ...d189d1b8c773bf710a899eb21fd76cc_cgraph.svg | 41 + ...hook_1_1git__analyzer_1_1GitDocGenHook.xml | 197 +++ ...analyzer_1_1GitDocGenHook__coll__graph.md5 | 1 + ...analyzer_1_1GitDocGenHook__coll__graph.svg | 58 + ...lyzer_1_1GitDocGenHook__inherit__graph.md5 | 1 + ...lyzer_1_1GitDocGenHook__inherit__graph.svg | 58 + ...5313caa22b173ce75638f0db08eeb85_cgraph.md5 | 1 + ...5313caa22b173ce75638f0db08eeb85_cgraph.svg | 39 + ...313caa22b173ce75638f0db08eeb85_icgraph.md5 | 1 + ...313caa22b173ce75638f0db08eeb85_icgraph.svg | 55 + ...549766100e91eb94b5f1a1d34bf481_icgraph.md5 | 1 + ...549766100e91eb94b5f1a1d34bf481_icgraph.svg | 40 + ...beba14e92d717391a74bb70b1fab0ae_cgraph.md5 | 1 + ...beba14e92d717391a74bb70b1fab0ae_cgraph.svg | 268 ++++ ...2275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 | 1 + ...2275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg | 29 + ...275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 | 1 + ...275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg | 29 + ...4d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 | 1 + ...4d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg | 71 + ...fy__hook_1_1jira__client_1_1JiraClient.xml | 447 ++++++ ...ira__client_1_1JiraClient__coll__graph.md5 | 1 + ...ira__client_1_1JiraClient__coll__graph.svg | 44 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.md5 | 1 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.svg | 176 +++ ...93d6456fe053ef7a7862d5d6851910c_cgraph.md5 | 1 + ...93d6456fe053ef7a7862d5d6851910c_cgraph.svg | 60 + ...3d6456fe053ef7a7862d5d6851910c_icgraph.md5 | 1 + ...3d6456fe053ef7a7862d5d6851910c_icgraph.svg | 30 + ...9ea1149758f7f5212149d357b13cc23_cgraph.md5 | 1 + ...9ea1149758f7f5212149d357b13cc23_cgraph.svg | 78 + ...ea1149758f7f5212149d357b13cc23_icgraph.md5 | 1 + ...ea1149758f7f5212149d357b13cc23_icgraph.svg | 41 + ...5f6924819084b7c8d268956a784804a_cgraph.md5 | 1 + ...5f6924819084b7c8d268956a784804a_cgraph.svg | 39 + ...f6924819084b7c8d268956a784804a_icgraph.md5 | 1 + ...f6924819084b7c8d268956a784804a_icgraph.svg | 80 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 | 1 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.svg | 153 ++ ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 | 1 + ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg | 45 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 | 1 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg | 29 + ...967169a4b7970c67c0947b9ac56f746_cgraph.md5 | 1 + ...967169a4b7970c67c0947b9ac56f746_cgraph.svg | 40 + ...67169a4b7970c67c0947b9ac56f746_icgraph.md5 | 1 + ...67169a4b7970c67c0947b9ac56f746_icgraph.svg | 58 + ...a8837552d37bfd611de23441a240826_cgraph.md5 | 1 + ...a8837552d37bfd611de23441a240826_cgraph.svg | 40 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.md5 | 1 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.svg | 57 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 | 1 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg | 85 ++ ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 | 1 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg | 41 + ...nify__hook_1_1llm__client_1_1LLMClient.xml | 148 ++ ...1llm__client_1_1LLMClient__coll__graph.md5 | 1 + ...1llm__client_1_1LLMClient__coll__graph.svg | 29 + ...ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 | 1 + ...ad3014dac466ee1d8e00306d0cf2000_cgraph.svg | 38 + ...d3014dac466ee1d8e00306d0cf2000_icgraph.md5 | 1 + ...d3014dac466ee1d8e00306d0cf2000_icgraph.svg | 39 + ...f06658ca922793f879474f2234518e_icgraph.md5 | 1 + ...f06658ca922793f879474f2234518e_icgraph.svg | 54 + ..._hook_1_1utils_1_1GitRepoNotFoundError.xml | 25 + ...s_1_1GitRepoNotFoundError__coll__graph.md5 | 1 + ...s_1_1GitRepoNotFoundError__coll__graph.svg | 46 + ..._1GitRepoNotFoundError__inherit__graph.md5 | 1 + ..._1GitRepoNotFoundError__inherit__graph.svg | 46 + ...commit__commands_1_1TestCommitCommands.xml | 342 +++++ ...nds_1_1TestCommitCommands__coll__graph.md5 | 1 + ...nds_1_1TestCommitCommands__coll__graph.svg | 42 + ...3c2ff3707124aa48e8eb581106b8691_cgraph.md5 | 1 + ...3c2ff3707124aa48e8eb581106b8691_cgraph.svg | 156 ++ ...d04b125e102190a768f65f1948f15bc_cgraph.md5 | 1 + ...d04b125e102190a768f65f1948f15bc_cgraph.svg | 40 + ...13e368262340af98b30fd8ebdac6597_cgraph.md5 | 1 + ...13e368262340af98b30fd8ebdac6597_cgraph.svg | 317 ++++ ...c4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 | 1 + ...c4b1e4189792a3f7c11d2a745f479c0_cgraph.svg | 156 ++ ...ea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 | 1 + ...ea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg | 157 ++ ...9c09013055ec39ddde86b487aefcf8b_cgraph.md5 | 1 + ...9c09013055ec39ddde86b487aefcf8b_cgraph.svg | 156 ++ ...config__commands_1_1TestConfigCommands.xml | 397 +++++ ...nds_1_1TestConfigCommands__coll__graph.md5 | 1 + ...nds_1_1TestConfigCommands__coll__graph.svg | 50 + ...e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 | 1 + ...e8162082bcdd5652bb37bdb14cf453a_cgraph.svg | 62 + ...355f7d313bebaa71694387cf2bc5232_cgraph.md5 | 1 + ...355f7d313bebaa71694387cf2bc5232_cgraph.svg | 123 ++ ...3d4760eee3b67e1cde3aed755ebb948_cgraph.md5 | 1 + ...3d4760eee3b67e1cde3aed755ebb948_cgraph.svg | 62 + ...00ca5d9fcdc159714e8df54920f9436_cgraph.md5 | 1 + ...00ca5d9fcdc159714e8df54920f9436_cgraph.svg | 123 ++ ...73984d31452b56acd6ce4011a1248bd_cgraph.md5 | 1 + ...73984d31452b56acd6ce4011a1248bd_cgraph.svg | 101 ++ ...c0207be563c3de59a6d16277805114c_cgraph.md5 | 1 + ...c0207be563c3de59a6d16277805114c_cgraph.svg | 123 ++ ...3a264dfb21e16003e095b79f6eab2ac_cgraph.md5 | 1 + ...3a264dfb21e16003e095b79f6eab2ac_cgraph.svg | 62 + ...d12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 | 1 + ...d12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg | 101 ++ ...d8df8219441b9e9871b903a681400d9_cgraph.md5 | 1 + ...d8df8219441b9e9871b903a681400d9_cgraph.svg | 62 + ...f9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 | 1 + ...f9f2233a3f4cc5725b9d4f05758b167_cgraph.svg | 101 ++ ...e37b97432821d19758c6325d4c74bcf_cgraph.md5 | 1 + ...e37b97432821d19758c6325d4c74bcf_cgraph.svg | 101 ++ ...8d62310da2d768e21770f8f01ff5375_cgraph.md5 | 1 + ...8d62310da2d768e21770f8f01ff5375_cgraph.svg | 62 + ..._1_1test__web__config_1_1TestWebConfig.xml | 85 ++ ...__config_1_1TestWebConfig__coll__graph.md5 | 1 + ...__config_1_1TestWebConfig__coll__graph.svg | 30 + ...6e600222e426b003850509cb1d3190a_cgraph.md5 | 1 + ...6e600222e426b003850509cb1d3190a_cgraph.svg | 139 ++ ...c6440352201d207ea8b4d26f8ccfa35_cgraph.md5 | 1 + ...c6440352201d207ea8b4d26f8ccfa35_cgraph.svg | 40 + docs345/docbook/commit-commands_8md.xml | 5 + docs345/docbook/commit__analyzer_8py.xml | 21 + docs345/docbook/commit__commands_8py.xml | 27 + docs345/docbook/config-commands_8md.xml | 5 + docs345/docbook/config__command_8py.xml | 23 + docs345/docbook/config__commands_8py.xml | 50 + docs345/docbook/conftest_8py.xml | 14 + docs345/docbook/constants_8py.xml | 23 + docs345/docbook/detailed-usage_8md.xml | 5 + .../dir_063e2d5fe58a131099a7fe4200cca78c.xml | 31 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.md5 | 1 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.svg | 30 + .../dir_1648a057408aae8db85b8e3797335623.xml | 14 + ...r_1648a057408aae8db85b8e3797335623_dep.md5 | 1 + ...r_1648a057408aae8db85b8e3797335623_dep.svg | 30 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.xml | 31 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 | 1 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.svg | 30 + .../dir_b3b22d2ab7966b65f6b237e3231b41be.xml | 23 + .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml | 56 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 | 1 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg | 42 + docs345/docbook/doc__commands_8md.xml | 5 + docs345/docbook/doc__commands_8py.xml | 34 + docs345/docbook/example-workflows_8md.xml | 5 + docs345/docbook/file__analyzer_8py.xml | 28 + docs345/docbook/folder__analyzer_8py.xml | 21 + docs345/docbook/git__analyzer_8py.xml | 28 + docs345/docbook/hook__commands_8py.xml | 34 + docs345/docbook/index.xml | 116 ++ docs345/docbook/jira__client_8py.xml | 28 + docs345/docbook/llm__client_8py.xml | 21 + docs345/docbook/login__command_8py.xml | 23 + docs345/docbook/main_8py.xml | 21 + ...enContext_Penify_dev_penify_cli_README.xml | 200 +++ ...fy_dev_penify_cli_docs_commit_commands.xml | 215 +++ ...fy_dev_penify_cli_docs_config_commands.xml | 273 ++++ ...ify_dev_penify_cli_docs_detailed_usage.xml | 261 ++++ ...enify_dev_penify_cli_docs_doc_commands.xml | 402 +++++ ..._dev_penify_cli_docs_example_workflows.xml | 209 +++ docs345/docbook/namespacepenify__hook.xml | 40 + .../namespacepenify__hook_1_1api__client.xml | 12 + ...amespacepenify__hook_1_1base__analyzer.xml | 12 + .../namespacepenify__hook_1_1commands.xml | 20 + ...fy__hook_1_1commands_1_1auth__commands.xml | 90 ++ ...8f375c58bb6f69f98675e6a9ac84655_cgraph.md5 | 1 + ...8f375c58bb6f69f98675e6a9ac84655_cgraph.svg | 61 + ...f375c58bb6f69f98675e6a9ac84655_icgraph.md5 | 1 + ...f375c58bb6f69f98675e6a9ac84655_icgraph.svg | 60 + ...3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 | 1 + ...3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg | 45 + ...956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 | 1 + ...956ca1749d4218ea1dc6e5b6218b24_icgraph.svg | 76 + ...__hook_1_1commands_1_1commit__commands.xml | 133 ++ ...2564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 | 1 + ...2564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg | 139 ++ ...564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 | 1 + ...564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg | 146 ++ ...27583116eb78e31a4d3cdc16d2f15c_icgraph.md5 | 1 + ...27583116eb78e31a4d3cdc16d2f15c_icgraph.svg | 61 + ...4f739f524c38b437e4e47673d683e23_cgraph.md5 | 1 + ...4f739f524c38b437e4e47673d683e23_cgraph.svg | 300 ++++ ...f739f524c38b437e4e47673d683e23_icgraph.md5 | 1 + ...f739f524c38b437e4e47673d683e23_icgraph.svg | 61 + ...__hook_1_1commands_1_1config__commands.xml | 364 +++++ ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 | 1 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg | 84 ++ ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 | 1 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg | 149 ++ ...5dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 | 1 + ...5dfc34a655ed80e6c95939b6f3c35c_icgraph.svg | 77 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 | 1 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg | 398 +++++ ...617bc5956e502c9555dc0dda0376df4_cgraph.md5 | 1 + ...617bc5956e502c9555dc0dda0376df4_cgraph.svg | 45 + ...17bc5956e502c9555dc0dda0376df4_icgraph.md5 | 1 + ...17bc5956e502c9555dc0dda0376df4_icgraph.svg | 94 ++ ...503d51c905e2f1b299b12d2a73bd812_cgraph.md5 | 1 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.svg | 106 ++ ...03d51c905e2f1b299b12d2a73bd812_icgraph.md5 | 1 + ...03d51c905e2f1b299b12d2a73bd812_icgraph.svg | 214 +++ ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 | 1 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg | 84 ++ ...92bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 | 1 + ...92bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg | 128 ++ ...559a82d0bf727703d550d1003d3ed20_cgraph.md5 | 1 + ...559a82d0bf727703d550d1003d3ed20_cgraph.svg | 45 + ...59a82d0bf727703d550d1003d3ed20_icgraph.md5 | 1 + ...59a82d0bf727703d550d1003d3ed20_icgraph.svg | 264 ++++ ...be277132ce0bc0aacef951cf1dee2ae_cgraph.md5 | 1 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.svg | 51 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.md5 | 1 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.svg | 403 +++++ ...2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 | 1 + ...2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg | 45 + ...486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 | 1 + ...486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg | 116 ++ ...115198ea5d6808ccb98733957f50b06_cgraph.md5 | 1 + ...115198ea5d6808ccb98733957f50b06_cgraph.svg | 122 ++ ...15198ea5d6808ccb98733957f50b06_icgraph.md5 | 1 + ...15198ea5d6808ccb98733957f50b06_icgraph.svg | 77 + ...ify__hook_1_1commands_1_1doc__commands.xml | 134 ++ ...006ab13bff718ef783868a910c0b704_cgraph.md5 | 1 + ...006ab13bff718ef783868a910c0b704_cgraph.svg | 170 +++ ...06ab13bff718ef783868a910c0b704_icgraph.md5 | 1 + ...06ab13bff718ef783868a910c0b704_icgraph.svg | 108 ++ ...aac68bc563432bf25c85dc78081a25_icgraph.md5 | 1 + ...aac68bc563432bf25c85dc78081a25_icgraph.svg | 221 +++ ...7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 | 1 + ...7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg | 60 + ...fy__hook_1_1commands_1_1hook__commands.xml | 94 ++ ...543eb5fa835fd1237f24e8bce6201d_icgraph.md5 | 1 + ...543eb5fa835fd1237f24e8bce6201d_icgraph.svg | 124 ++ ...f8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 | 1 + ...f8f5d3bf1c3795974a391ee95b72b2_icgraph.svg | 124 ++ ...espacepenify__hook_1_1commit__analyzer.xml | 12 + ...mespacepenify__hook_1_1config__command.xml | 79 + ...40e5331681eb574ac319d7458783bde_cgraph.md5 | 1 + ...40e5331681eb574ac319d7458783bde_cgraph.svg | 182 +++ ...0e5331681eb574ac319d7458783bde_icgraph.md5 | 1 + ...0e5331681eb574ac319d7458783bde_icgraph.svg | 44 + ...3eb92164a69df1446d745f8a09285e_icgraph.md5 | 1 + ...3eb92164a69df1446d745f8a09285e_icgraph.svg | 45 + .../namespacepenify__hook_1_1constants.xml | 27 + ...amespacepenify__hook_1_1file__analyzer.xml | 27 + ...espacepenify__hook_1_1folder__analyzer.xml | 12 + ...namespacepenify__hook_1_1git__analyzer.xml | 27 + .../namespacepenify__hook_1_1jira__client.xml | 27 + .../namespacepenify__hook_1_1llm__client.xml | 12 + ...amespacepenify__hook_1_1login__command.xml | 68 + ...63db4c484797bead34b7d874020c6a_icgraph.md5 | 1 + ...63db4c484797bead34b7d874020c6a_icgraph.svg | 44 + ...4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 | 1 + ...4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg | 77 + ...bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 | 1 + ...bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg | 44 + .../docbook/namespacepenify__hook_1_1main.xml | 51 + ...6838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 | 1 + ...6838b20df4bd14ee4b5e1dd2906738f_cgraph.svg | 620 ++++++++ ...838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 | 1 + ...838b20df4bd14ee4b5e1dd2906738f_icgraph.svg | 28 + .../namespacepenify__hook_1_1ui__utils.xml | 572 ++++++++ ...6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 | 1 + ...6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg | 259 ++++ ...2b92532b1458af94f3649d411b5505c_cgraph.md5 | 1 + ...2b92532b1458af94f3649d411b5505c_cgraph.svg | 38 + ...b92532b1458af94f3649d411b5505c_icgraph.md5 | 1 + ...b92532b1458af94f3649d411b5505c_icgraph.svg | 39 + ...ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 | 1 + ...ffbb9671dbe233770268e2dd66a67fa_cgraph.svg | 39 + ...fbb9671dbe233770268e2dd66a67fa_icgraph.md5 | 1 + ...fbb9671dbe233770268e2dd66a67fa_icgraph.svg | 243 ++++ ...b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 | 1 + ...b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg | 39 + ...16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 | 1 + ...16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg | 71 + ...da02cd1140179a9ce60f62c85fccfef_cgraph.md5 | 1 + ...da02cd1140179a9ce60f62c85fccfef_cgraph.svg | 38 + ...a02cd1140179a9ce60f62c85fccfef_icgraph.md5 | 1 + ...a02cd1140179a9ce60f62c85fccfef_icgraph.svg | 39 + ...d934568897433fa73f9cc182ac4a3e_icgraph.md5 | 1 + ...d934568897433fa73f9cc182ac4a3e_icgraph.svg | 178 +++ ...2cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 | 1 + ...2cdb4de7c679ce8b29c3e9116c4776_icgraph.svg | 87 ++ ...7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 | 1 + ...7340d0fc60fb80f17514d60bf45f1d_icgraph.svg | 77 + ...f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 | 1 + ...f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg | 39 + ...0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 | 1 + ...0acd7dd91abfe67d0807803bc3b65f_icgraph.svg | 162 +++ ...11f0adf6e9bf71510c379b6fa155e44_cgraph.md5 | 1 + ...11f0adf6e9bf71510c379b6fa155e44_cgraph.svg | 37 + ...1f0adf6e9bf71510c379b6fa155e44_icgraph.md5 | 1 + ...1f0adf6e9bf71510c379b6fa155e44_icgraph.svg | 274 ++++ ...c3e466d1912058167be2eacf85b9f6_icgraph.md5 | 1 + ...c3e466d1912058167be2eacf85b9f6_icgraph.svg | 343 +++++ ...e684c00e26199440137a87ed9b195c_icgraph.md5 | 1 + ...e684c00e26199440137a87ed9b195c_icgraph.svg | 55 + ...fcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 | 1 + ...fcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg | 39 + ...cbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 | 1 + ...cbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg | 39 + ...441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 | 1 + ...441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg | 72 + .../namespacepenify__hook_1_1utils.xml | 80 + ...5c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 | 1 + ...5c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg | 29 + ...c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 | 1 + ...c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg | 727 ++++++++++ docs345/docbook/namespacesetup.xml | 104 ++ docs345/docbook/namespacetests.xml | 20 + .../docbook/namespacetests_1_1conftest.xml | 5 + ...mespacetests_1_1test__commit__commands.xml | 12 + ...mespacetests_1_1test__config__commands.xml | 12 + .../namespacetests_1_1test__doc__commands.xml | 339 +++++ ...e74c920f258f442914771164fe26b45_cgraph.md5 | 1 + ...e74c920f258f442914771164fe26b45_cgraph.svg | 39 + ...f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 | 1 + ...f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg | 39 + ...458af9ad0128c3ca1263b552fd5e482_cgraph.md5 | 1 + ...458af9ad0128c3ca1263b552fd5e482_cgraph.svg | 186 +++ ...35e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 | 1 + ...35e7fd4912192c7276cf31bbebc6eb0_cgraph.svg | 39 + ...bb75610e40d94d42bc169b25403c186_cgraph.md5 | 1 + ...bb75610e40d94d42bc169b25403c186_cgraph.svg | 39 + ...4165ddfdb3071a88422f080f0e529a3_cgraph.md5 | 1 + ...4165ddfdb3071a88422f080f0e529a3_cgraph.svg | 40 + ...06110833eb0aad547156faf014b31d8_cgraph.md5 | 1 + ...06110833eb0aad547156faf014b31d8_cgraph.svg | 39 + ...158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 | 1 + ...158ffa48469b6c097a7a55fcb20c21a_cgraph.svg | 186 +++ ...74688baa8c9b5ba302c2877a9789d05_cgraph.md5 | 1 + ...74688baa8c9b5ba302c2877a9789d05_cgraph.svg | 186 +++ ...c76cc25c23476794234cdadbcaef0c0_cgraph.md5 | 1 + ...c76cc25c23476794234cdadbcaef0c0_cgraph.svg | 39 + ...9b01e5fc89255cac96747fa081c442c_cgraph.md5 | 1 + ...9b01e5fc89255cac96747fa081c442c_cgraph.svg | 186 +++ .../namespacetests_1_1test__web__config.xml | 12 + .../docbook/penify-cli-documentation_8md.xml | 5 + .../penify__hook_2____init_____8py.xml | 5 + ...nify__hook_2commands_2____init_____8py.xml | 14 + docs345/docbook/setup_8py.xml | 43 + .../docbook/test__commit__commands_8py.xml | 21 + .../docbook/test__config__commands_8py.xml | 21 + docs345/docbook/test__doc__commands_8py.xml | 41 + docs345/docbook/test__web__config_8py.xml | 21 + docs345/docbook/tests_2____init_____8py.xml | 12 + docs345/docbook/ui__utils_8py.xml | 76 + docs345/docbook/utils_8py.xml | 39 + docs345/xml/Doxyfile.xml | 391 +++++ docs345/xml/README_8md.xml | 179 +++ docs345/xml/api__client_8py.xml | 183 +++ docs345/xml/auth__commands_8py.xml | 196 +++ docs345/xml/base__analyzer_8py.xml | 36 + docs345/xml/classException.xml | 32 + ...nify__hook_1_1api__client_1_1APIClient.xml | 346 +++++ ...hook_1_1base__analyzer_1_1BaseAnalyzer.xml | 211 +++ ..._1commit__analyzer_1_1CommitDocGenHook.xml | 288 ++++ ...1file__analyzer_1_1FileAnalyzerGenHook.xml | 184 +++ ...der__analyzer_1_1FolderAnalyzerGenHook.xml | 158 ++ ...hook_1_1git__analyzer_1_1GitDocGenHook.xml | 228 +++ ...fy__hook_1_1jira__client_1_1JiraClient.xml | 559 +++++++ ...nify__hook_1_1llm__client_1_1LLMClient.xml | 190 +++ ..._hook_1_1utils_1_1GitRepoNotFoundError.xml | 38 + ...commit__commands_1_1TestCommitCommands.xml | 551 +++++++ ...config__commands_1_1TestConfigCommands.xml | 578 ++++++++ ..._1_1test__web__config_1_1TestWebConfig.xml | 112 ++ docs345/xml/combine.xslt | 15 + docs345/xml/commit-commands_8md.xml | 174 +++ docs345/xml/commit__analyzer_8py.xml | 198 +++ docs345/xml/commit__commands_8py.xml | 184 +++ docs345/xml/compound.xsd | 1290 +++++++++++++++++ docs345/xml/config-commands_8md.xml | 179 +++ docs345/xml/config__command_8py.xml | 112 ++ docs345/xml/config__commands_8py.xml | 597 ++++++++ docs345/xml/conftest_8py.xml | 23 + docs345/xml/constants_8py.xml | 17 + docs345/xml/detailed-usage_8md.xml | 173 +++ .../dir_063e2d5fe58a131099a7fe4200cca78c.xml | 17 + .../dir_1648a057408aae8db85b8e3797335623.xml | 11 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.xml | 17 + .../dir_b3b22d2ab7966b65f6b237e3231b41be.xml | 15 + .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml | 27 + docs345/xml/doc__commands_8md.xml | 340 +++++ docs345/xml/doc__commands_8py.xml | 173 +++ docs345/xml/doxyfile.xsd | 45 + docs345/xml/example-workflows_8md.xml | 156 ++ docs345/xml/file__analyzer_8py.xml | 159 ++ docs345/xml/folder__analyzer_8py.xml | 82 ++ docs345/xml/git__analyzer_8py.xml | 212 +++ docs345/xml/hook__commands_8py.xml | 69 + docs345/xml/index.xml | 351 +++++ docs345/xml/index.xsd | 71 + docs345/xml/jira__client_8py.xml | 472 ++++++ docs345/xml/llm__client_8py.xml | 192 +++ docs345/xml/login__command_8py.xml | 40 + docs345/xml/main_8py.xml | 104 ++ ...enContext_Penify_dev_penify_cli_README.xml | 163 +++ ...fy_dev_penify_cli_docs_commit_commands.xml | 172 +++ ...fy_dev_penify_cli_docs_config_commands.xml | 205 +++ ...ify_dev_penify_cli_docs_detailed_usage.xml | 197 +++ ...enify_dev_penify_cli_docs_doc_commands.xml | 317 ++++ ..._dev_penify_cli_docs_example_workflows.xml | 161 ++ docs345/xml/namespacepenify__hook.xml | 26 + .../namespacepenify__hook_1_1api__client.xml | 12 + ...amespacepenify__hook_1_1base__analyzer.xml | 12 + .../xml/namespacepenify__hook_1_1commands.xml | 16 + ...fy__hook_1_1commands_1_1auth__commands.xml | 82 ++ ...__hook_1_1commands_1_1commit__commands.xml | 176 +++ ...__hook_1_1commands_1_1config__commands.xml | 349 +++++ ...ify__hook_1_1commands_1_1doc__commands.xml | 155 ++ ...fy__hook_1_1commands_1_1hook__commands.xml | 111 ++ ...espacepenify__hook_1_1commit__analyzer.xml | 12 + ...mespacepenify__hook_1_1config__command.xml | 78 + .../namespacepenify__hook_1_1constants.xml | 43 + ...amespacepenify__hook_1_1file__analyzer.xml | 29 + ...espacepenify__hook_1_1folder__analyzer.xml | 12 + ...namespacepenify__hook_1_1git__analyzer.xml | 29 + .../namespacepenify__hook_1_1jira__client.xml | 29 + .../namespacepenify__hook_1_1llm__client.xml | 12 + ...amespacepenify__hook_1_1login__command.xml | 65 + docs345/xml/namespacepenify__hook_1_1main.xml | 50 + .../namespacepenify__hook_1_1ui__utils.xml | 667 +++++++++ .../xml/namespacepenify__hook_1_1utils.xml | 96 ++ docs345/xml/namespacesetup.xml | 195 +++ docs345/xml/namespacestd.xml | 110 ++ docs345/xml/namespacetests.xml | 16 + docs345/xml/namespacetests_1_1conftest.xml | 11 + ...mespacetests_1_1test__commit__commands.xml | 12 + ...mespacetests_1_1test__config__commands.xml | 12 + .../namespacetests_1_1test__doc__commands.xml | 461 ++++++ .../namespacetests_1_1test__web__config.xml | 12 + docs345/xml/penify-cli-documentation_8md.xml | 220 +++ .../xml/penify__hook_2____init_____8py.xml | 13 + ...nify__hook_2commands_2____init_____8py.xml | 16 + docs345/xml/setup_8py.xml | 46 + docs345/xml/test__commit__commands_8py.xml | 450 ++++++ docs345/xml/test__config__commands_8py.xml | 465 ++++++ docs345/xml/test__doc__commands_8py.xml | 372 +++++ docs345/xml/test__web__config_8py.xml | 110 ++ docs345/xml/tests_2____init_____8py.xml | 15 + docs345/xml/ui__utils_8py.xml | 263 ++++ docs345/xml/utils_8py.xml | 99 ++ docs345/xml/xml.xsd | 23 + 506 files changed, 39286 insertions(+) create mode 100644 docs345/docbook/README_8md.xml create mode 100644 docs345/docbook/annotated.xml create mode 100644 docs345/docbook/api__client_8py.xml create mode 100644 docs345/docbook/auth__commands_8py.xml create mode 100644 docs345/docbook/base__analyzer_8py.xml create mode 100644 docs345/docbook/classException.xml create mode 100644 docs345/docbook/classException__coll__graph.md5 create mode 100644 docs345/docbook/classException__coll__graph.svg create mode 100644 docs345/docbook/classException__inherit__graph.md5 create mode 100644 docs345/docbook/classException__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient.xml create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml create mode 100644 docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient.xml create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient.xml create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml create mode 100644 docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg create mode 100644 docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 create mode 100644 docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands.xml create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig.xml create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5 create mode 100644 docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg create mode 100644 docs345/docbook/commit-commands_8md.xml create mode 100644 docs345/docbook/commit__analyzer_8py.xml create mode 100644 docs345/docbook/commit__commands_8py.xml create mode 100644 docs345/docbook/config-commands_8md.xml create mode 100644 docs345/docbook/config__command_8py.xml create mode 100644 docs345/docbook/config__commands_8py.xml create mode 100644 docs345/docbook/conftest_8py.xml create mode 100644 docs345/docbook/constants_8py.xml create mode 100644 docs345/docbook/detailed-usage_8md.xml create mode 100644 docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c.xml create mode 100644 docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 create mode 100644 docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg create mode 100644 docs345/docbook/dir_1648a057408aae8db85b8e3797335623.xml create mode 100644 docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.md5 create mode 100644 docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.svg create mode 100644 docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23.xml create mode 100644 docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 create mode 100644 docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg create mode 100644 docs345/docbook/dir_b3b22d2ab7966b65f6b237e3231b41be.xml create mode 100644 docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml create mode 100644 docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 create mode 100644 docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg create mode 100644 docs345/docbook/doc__commands_8md.xml create mode 100644 docs345/docbook/doc__commands_8py.xml create mode 100644 docs345/docbook/example-workflows_8md.xml create mode 100644 docs345/docbook/file__analyzer_8py.xml create mode 100644 docs345/docbook/folder__analyzer_8py.xml create mode 100644 docs345/docbook/git__analyzer_8py.xml create mode 100644 docs345/docbook/hook__commands_8py.xml create mode 100644 docs345/docbook/index.xml create mode 100644 docs345/docbook/jira__client_8py.xml create mode 100644 docs345/docbook/llm__client_8py.xml create mode 100644 docs345/docbook/login__command_8py.xml create mode 100644 docs345/docbook/main_8py.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml create mode 100644 docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml create mode 100644 docs345/docbook/namespacepenify__hook.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1api__client.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1base__analyzer.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1commit__analyzer.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1constants.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1file__analyzer.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1folder__analyzer.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1git__analyzer.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1jira__client.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1llm__client.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1main.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1utils.xml create mode 100644 docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg create mode 100644 docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 create mode 100644 docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg create mode 100644 docs345/docbook/namespacesetup.xml create mode 100644 docs345/docbook/namespacetests.xml create mode 100644 docs345/docbook/namespacetests_1_1conftest.xml create mode 100644 docs345/docbook/namespacetests_1_1test__commit__commands.xml create mode 100644 docs345/docbook/namespacetests_1_1test__config__commands.xml create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands.xml create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5 create mode 100644 docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg create mode 100644 docs345/docbook/namespacetests_1_1test__web__config.xml create mode 100644 docs345/docbook/penify-cli-documentation_8md.xml create mode 100644 docs345/docbook/penify__hook_2____init_____8py.xml create mode 100644 docs345/docbook/penify__hook_2commands_2____init_____8py.xml create mode 100644 docs345/docbook/setup_8py.xml create mode 100644 docs345/docbook/test__commit__commands_8py.xml create mode 100644 docs345/docbook/test__config__commands_8py.xml create mode 100644 docs345/docbook/test__doc__commands_8py.xml create mode 100644 docs345/docbook/test__web__config_8py.xml create mode 100644 docs345/docbook/tests_2____init_____8py.xml create mode 100644 docs345/docbook/ui__utils_8py.xml create mode 100644 docs345/docbook/utils_8py.xml create mode 100644 docs345/xml/Doxyfile.xml create mode 100644 docs345/xml/README_8md.xml create mode 100644 docs345/xml/api__client_8py.xml create mode 100644 docs345/xml/auth__commands_8py.xml create mode 100644 docs345/xml/base__analyzer_8py.xml create mode 100644 docs345/xml/classException.xml create mode 100644 docs345/xml/classpenify__hook_1_1api__client_1_1APIClient.xml create mode 100644 docs345/xml/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml create mode 100644 docs345/xml/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml create mode 100644 docs345/xml/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml create mode 100644 docs345/xml/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml create mode 100644 docs345/xml/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml create mode 100644 docs345/xml/classpenify__hook_1_1jira__client_1_1JiraClient.xml create mode 100644 docs345/xml/classpenify__hook_1_1llm__client_1_1LLMClient.xml create mode 100644 docs345/xml/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml create mode 100644 docs345/xml/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml create mode 100644 docs345/xml/classtests_1_1test__config__commands_1_1TestConfigCommands.xml create mode 100644 docs345/xml/classtests_1_1test__web__config_1_1TestWebConfig.xml create mode 100644 docs345/xml/combine.xslt create mode 100644 docs345/xml/commit-commands_8md.xml create mode 100644 docs345/xml/commit__analyzer_8py.xml create mode 100644 docs345/xml/commit__commands_8py.xml create mode 100644 docs345/xml/compound.xsd create mode 100644 docs345/xml/config-commands_8md.xml create mode 100644 docs345/xml/config__command_8py.xml create mode 100644 docs345/xml/config__commands_8py.xml create mode 100644 docs345/xml/conftest_8py.xml create mode 100644 docs345/xml/constants_8py.xml create mode 100644 docs345/xml/detailed-usage_8md.xml create mode 100644 docs345/xml/dir_063e2d5fe58a131099a7fe4200cca78c.xml create mode 100644 docs345/xml/dir_1648a057408aae8db85b8e3797335623.xml create mode 100644 docs345/xml/dir_624fa2a8bce97f0444ac5cca335d4e23.xml create mode 100644 docs345/xml/dir_b3b22d2ab7966b65f6b237e3231b41be.xml create mode 100644 docs345/xml/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml create mode 100644 docs345/xml/doc__commands_8md.xml create mode 100644 docs345/xml/doc__commands_8py.xml create mode 100644 docs345/xml/doxyfile.xsd create mode 100644 docs345/xml/example-workflows_8md.xml create mode 100644 docs345/xml/file__analyzer_8py.xml create mode 100644 docs345/xml/folder__analyzer_8py.xml create mode 100644 docs345/xml/git__analyzer_8py.xml create mode 100644 docs345/xml/hook__commands_8py.xml create mode 100644 docs345/xml/index.xml create mode 100644 docs345/xml/index.xsd create mode 100644 docs345/xml/jira__client_8py.xml create mode 100644 docs345/xml/llm__client_8py.xml create mode 100644 docs345/xml/login__command_8py.xml create mode 100644 docs345/xml/main_8py.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml create mode 100644 docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml create mode 100644 docs345/xml/namespacepenify__hook.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1api__client.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1base__analyzer.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands_1_1auth__commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands_1_1commit__commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands_1_1config__commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands_1_1doc__commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commands_1_1hook__commands.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1commit__analyzer.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1config__command.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1constants.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1file__analyzer.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1folder__analyzer.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1git__analyzer.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1jira__client.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1llm__client.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1login__command.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1main.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1ui__utils.xml create mode 100644 docs345/xml/namespacepenify__hook_1_1utils.xml create mode 100644 docs345/xml/namespacesetup.xml create mode 100644 docs345/xml/namespacestd.xml create mode 100644 docs345/xml/namespacetests.xml create mode 100644 docs345/xml/namespacetests_1_1conftest.xml create mode 100644 docs345/xml/namespacetests_1_1test__commit__commands.xml create mode 100644 docs345/xml/namespacetests_1_1test__config__commands.xml create mode 100644 docs345/xml/namespacetests_1_1test__doc__commands.xml create mode 100644 docs345/xml/namespacetests_1_1test__web__config.xml create mode 100644 docs345/xml/penify-cli-documentation_8md.xml create mode 100644 docs345/xml/penify__hook_2____init_____8py.xml create mode 100644 docs345/xml/penify__hook_2commands_2____init_____8py.xml create mode 100644 docs345/xml/setup_8py.xml create mode 100644 docs345/xml/test__commit__commands_8py.xml create mode 100644 docs345/xml/test__config__commands_8py.xml create mode 100644 docs345/xml/test__doc__commands_8py.xml create mode 100644 docs345/xml/test__web__config_8py.xml create mode 100644 docs345/xml/tests_2____init_____8py.xml create mode 100644 docs345/xml/ui__utils_8py.xml create mode 100644 docs345/xml/utils_8py.xml create mode 100644 docs345/xml/xml.xsd diff --git a/docs345/docbook/README_8md.xml b/docs345/docbook/README_8md.xml new file mode 100644 index 0000000..bb4fe43 --- /dev/null +++ b/docs345/docbook/README_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md +
diff --git a/docs345/docbook/annotated.xml b/docs345/docbook/annotated.xml new file mode 100644 index 0000000..4e3ba8d --- /dev/null +++ b/docs345/docbook/annotated.xml @@ -0,0 +1,4 @@ + +
+Class List +Here are the classes, structs, unions and interfaces with brief descriptions:penify_hook.api_client.APIClientpenify_hook.base_analyzer.BaseAnalyzerpenify_hook.commit_analyzer.CommitDocGenHookExceptionpenify_hook.file_analyzer.FileAnalyzerGenHookpenify_hook.folder_analyzer.FolderAnalyzerGenHookpenify_hook.git_analyzer.GitDocGenHookpenify_hook.utils.GitRepoNotFoundErrorpenify_hook.jira_client.JiraClientpenify_hook.llm_client.LLMClienttests.test_commit_commands.TestCommitCommandstests.test_config_commands.TestConfigCommandstests.test_web_config.TestWebConfig
diff --git a/docs345/docbook/api__client_8py.xml b/docs345/docbook/api__client_8py.xml new file mode 100644 index 0000000..53ad284 --- /dev/null +++ b/docs345/docbook/api__client_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py + + Classes + + class penify_hook.api_client.APIClient + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.api_client + + + +
diff --git a/docs345/docbook/auth__commands_8py.xml b/docs345/docbook/auth__commands_8py.xml new file mode 100644 index 0000000..61590bb --- /dev/null +++ b/docs345/docbook/auth__commands_8py.xml @@ -0,0 +1,25 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + namespace penify_hook.commands.auth_commands + + + + + Functions + + def penify_hook.commands.auth_commands.save_credentials (api_key) + + def penify_hook.commands.auth_commands.login (api_url, dashboard_url) + + + +
diff --git a/docs345/docbook/base__analyzer_8py.xml b/docs345/docbook/base__analyzer_8py.xml new file mode 100644 index 0000000..0edf9d0 --- /dev/null +++ b/docs345/docbook/base__analyzer_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py + + Classes + + class penify_hook.base_analyzer.BaseAnalyzer + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.base_analyzer + + + +
diff --git a/docs345/docbook/classException.xml b/docs345/docbook/classException.xml new file mode 100644 index 0000000..36d3b3f --- /dev/null +++ b/docs345/docbook/classException.xml @@ -0,0 +1,25 @@ + +
+Exception Class Reference +Exception +Inheritance diagram for Exception: + + + + + + + + +Collaboration diagram for Exception: + + + + + + + + + +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py
diff --git a/docs345/docbook/classException__coll__graph.md5 b/docs345/docbook/classException__coll__graph.md5 new file mode 100644 index 0000000..38ed226 --- /dev/null +++ b/docs345/docbook/classException__coll__graph.md5 @@ -0,0 +1 @@ +8bfc7cbaf3c53c3b1288446104b2c7ee \ No newline at end of file diff --git a/docs345/docbook/classException__coll__graph.svg b/docs345/docbook/classException__coll__graph.svg new file mode 100644 index 0000000..d2d4076 --- /dev/null +++ b/docs345/docbook/classException__coll__graph.svg @@ -0,0 +1,26 @@ + + + + + + +Exception + + + +Node1 + + +Exception + + + + + + + + + diff --git a/docs345/docbook/classException__inherit__graph.md5 b/docs345/docbook/classException__inherit__graph.md5 new file mode 100644 index 0000000..f7c5b12 --- /dev/null +++ b/docs345/docbook/classException__inherit__graph.md5 @@ -0,0 +1 @@ +02df0cdd064aa2dca59b7424cdd2be62 \ No newline at end of file diff --git a/docs345/docbook/classException__inherit__graph.svg b/docs345/docbook/classException__inherit__graph.svg new file mode 100644 index 0000000..c8fc6d6 --- /dev/null +++ b/docs345/docbook/classException__inherit__graph.svg @@ -0,0 +1,46 @@ + + + + + + +Exception + + + +Node1 + + +Exception + + + + + + + + + +Node2 + + +penify_hook.utils.GitRepo +NotFoundError + + + + + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient.xml b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient.xml new file mode 100644 index 0000000..72fd732 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient.xml @@ -0,0 +1,206 @@ + +
+penify_hook.api_client.APIClient Class Reference +penify_hook.api_client.APIClient +Collaboration diagram for penify_hook.api_client.APIClient: + + + + + + + + + + Public Member Functions + + def __init__ (self, api_url, str api_token=None, str bearer_token=None) + + def send_file_for_docstring_generation (self, file_name, content, line_numbers, repo_details=None) + + def generate_commit_summary (self, git_diff, str instruction="", repo_details=None, dict jira_context=None) + + list[str] get_supported_file_types (self) + + def generate_commit_summary_with_llm (self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None) + + def get_api_key (self) + + + + + Public Attributes + + api_url + + AUTH_TOKEN + + BEARER_TOKEN + + + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.api_client.APIClient +penify_hook.api_client.APIClient__init__ +def penify_hook.api_client.APIClient.__init__ ( self, api_url, str api_token = None +, str bearer_token = None +)
+
+
+Member Function Documentation +
+ generate_commit_summary() +generate_commit_summarypenify_hook.api_client.APIClient +penify_hook.api_client.APIClientgenerate_commit_summary +def penify_hook.api_client.APIClient.generate_commit_summary ( self, git_diff, str instruction = "" +, repo_details = None +, dict jira_context = None +) +Generate a commit summary by sending a POST request to the API endpoint. + +This function constructs a payload containing the git diff and any +additional instructions provided. It then sends this payload to a +specified API endpoint to generate a summary of the commit. If the +request is successful, it returns the response from the API; otherwise, +it returns None. + +Args: + git_diff (str): The git diff of the commit. + instruction (str??): Additional instruction for the commit. Defaults to "". + repo_details (dict??): Details of the git repository. Defaults to None. + jira_context (dict??): JIRA issue details to enhance the commit summary. Defaults to None. + +Returns: + dict: The response from the API if the request is successful, None otherwise. + +Raises: + Exception: If there is an error during the API request. + +Here is the caller graph for this function: + + + + + + + + +
+
+ generate_commit_summary_with_llm() +generate_commit_summary_with_llmpenify_hook.api_client.APIClient +penify_hook.api_client.APIClientgenerate_commit_summary_with_llm +def penify_hook.api_client.APIClient.generate_commit_summary_with_llm ( self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context = None +) +Generates a commit summary using a local LLM client. If an error occurs +during the generation process, +it falls back to using the API. + +Args: + diff (str): The Git diff of changes. + message (str): User-provided commit message or instructions. + generate_description (bool): Flag indicating whether to generate a description for the commit. + repo_details (dict): Details about the repository. + llm_client (LLMClient): An instance of LLMClient used to generate the summary. + jira_context (JIRAContext?): Optional JIRA issue context to enhance the summary. + +Returns: + dict: A dictionary containing the title and description for the commit. + +Here is the call graph for this function: + + + + + + + + +
+
+ get_api_key() +get_api_keypenify_hook.api_client.APIClient +penify_hook.api_client.APIClientget_api_key +def penify_hook.api_client.APIClient.get_api_key ( self) +Fetch an API key from a specified URL. + +This function sends a GET request to retrieve an API token using a +Bearer token in the headers. It handles the response and returns the API +key if the request is successful, or `None` otherwise. + +Returns: + str: The API key if the request is successful, `None` otherwise. + +
+
+ get_supported_file_types() +get_supported_file_typespenify_hook.api_client.APIClient +penify_hook.api_client.APIClientget_supported_file_types + list[str] penify_hook.api_client.APIClient.get_supported_file_types ( self) +Retrieve the supported file types from the API. + +This function sends a request to the API endpoint +`/v1/file/supported_languages` to obtain a list of supported file types. +If the API call is successful (status code 200), it parses the JSON +response and returns the list of supported file types. If the API call +fails, it returns a default list of common file types. + +Returns: + list[str]: A list of supported file types, either from the API or a default set. + +
+
+ send_file_for_docstring_generation() +send_file_for_docstring_generationpenify_hook.api_client.APIClient +penify_hook.api_client.APIClientsend_file_for_docstring_generation +def penify_hook.api_client.APIClient.send_file_for_docstring_generation ( self, file_name, content, line_numbers, repo_details = None +) +Send file content and modified lines to the API and return modified +content. + +This function constructs a payload containing the file path, content, +and modified line numbers, and sends it to a specified API endpoint for +processing. It handles the response from the API, returning the modified +content if the request is successful. If the request fails, it logs the +error details and returns the original content. + +Args: + file_name (str): The path to the file being sent. + content (str): The content of the file to be processed. + line_numbers (list): A list of line numbers that have been modified. + repo_details (str?): Additional repository details if applicable. Defaults to None. + +Returns: + str: The modified content returned by the API, or the original content if the + request fails. + +Raises: + Exception: If there is an error in processing the file and no specific error + message is provided. + +
+
+
+Member Data Documentation +
+ api_url +api_urlpenify_hook.api_client.APIClient +penify_hook.api_client.APIClientapi_url +penify_hook.api_client.APIClient.api_url
+
+ AUTH_TOKEN +AUTH_TOKENpenify_hook.api_client.APIClient +penify_hook.api_client.APIClientAUTH_TOKEN +penify_hook.api_client.APIClient.AUTH_TOKEN
+
+ BEARER_TOKEN +BEARER_TOKENpenify_hook.api_client.APIClient +penify_hook.api_client.APIClientBEARER_TOKEN +penify_hook.api_client.APIClient.BEARER_TOKEN
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 new file mode 100644 index 0000000..2c7b583 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 @@ -0,0 +1 @@ +92a3e9cee2cd5e4975e6a42b548f0d62 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg new file mode 100644 index 0000000..fe24d95 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg @@ -0,0 +1,36 @@ + + + + + + +penify_hook.api_client.APIClient + + + +Node1 + + +penify_hook.api_client.APIClient + ++ api_url ++ AUTH_TOKEN ++ BEARER_TOKEN + ++ __init__() ++ send_file_for_docstring +_generation() ++ generate_commit_summary() ++ get_supported_file +_types() ++ generate_commit_summary +_with_llm() ++ get_api_key() + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5 new file mode 100644 index 0000000..b12cf91 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.md5 @@ -0,0 +1 @@ +ea70dd7bbb840c4828c970ec1a8f5446 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg new file mode 100644 index 0000000..54dce22 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_a7ff74798e7d428b4e2f20095287eb2ce_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary + + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 new file mode 100644 index 0000000..186981a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.md5 @@ -0,0 +1 @@ +6b1ca4842de706fb2f00719bcb509a8b \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg new file mode 100644 index 0000000..a04a292 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1api__client_1_1APIClient_ac0ada470b897935f9fb372cd0e7e51e3_cgraph.svg @@ -0,0 +1,70 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node3->Node4 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml new file mode 100644 index 0000000..719a287 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml @@ -0,0 +1,99 @@ + +
+penify_hook.base_analyzer.BaseAnalyzer Class Reference +penify_hook.base_analyzer.BaseAnalyzer +Inheritance diagram for penify_hook.base_analyzer.BaseAnalyzer: + + + + + + + + +Collaboration diagram for penify_hook.base_analyzer.BaseAnalyzer: + + + + + + + + + + Public Member Functions + + def __init__ (self, str folder_path, APIClient api_client) + + + + + Public Attributes + + folder_path + + repo_path + + repo + + repo_details + + relative_file_path + + api_client + + supported_file_types + + + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzer__init__ +def penify_hook.base_analyzer.BaseAnalyzer.__init__ ( self, str folder_path, APIClient api_client) +Reimplemented in penify_hook.folder_analyzer.FolderAnalyzerGenHook, penify_hook.file_analyzer.FileAnalyzerGenHook, penify_hook.git_analyzer.GitDocGenHook, and penify_hook.commit_analyzer.CommitDocGenHook. +
+
+
+Member Data Documentation +
+ api_client +api_clientpenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerapi_client +penify_hook.base_analyzer.BaseAnalyzer.api_client
+
+ folder_path +folder_pathpenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerfolder_path +penify_hook.base_analyzer.BaseAnalyzer.folder_path
+
+ relative_file_path +relative_file_pathpenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerrelative_file_path +penify_hook.base_analyzer.BaseAnalyzer.relative_file_path
+
+ repo +repopenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerrepo +penify_hook.base_analyzer.BaseAnalyzer.repo
+
+ repo_details +repo_detailspenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerrepo_details +penify_hook.base_analyzer.BaseAnalyzer.repo_details
+
+ repo_path +repo_pathpenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzerrepo_path +penify_hook.base_analyzer.BaseAnalyzer.repo_path
+
+ supported_file_types +supported_file_typespenify_hook.base_analyzer.BaseAnalyzer +penify_hook.base_analyzer.BaseAnalyzersupported_file_types +penify_hook.base_analyzer.BaseAnalyzer.supported_file_types
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 new file mode 100644 index 0000000..8f67765 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 @@ -0,0 +1 @@ +ba0c3a1d5b95dea65df70168e43976e0 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg new file mode 100644 index 0000000..c7b4e4a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg @@ -0,0 +1,33 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 new file mode 100644 index 0000000..cb38209 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 @@ -0,0 +1 @@ +63e8393eea1557a855929943cd8aca92 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg new file mode 100644 index 0000000..285efa6 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg @@ -0,0 +1,127 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook + ++ llm_client + ++ __init__() ++ get_summary() ++ run() ++ process_jira_integration() +- _amend_commit() + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook + ++ file_path + ++ __init__() ++ process_file() ++ print_processing() ++ run() + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook + ++ dir_path + ++ __init__() ++ list_all_files_in_dir() ++ run() + + + + + +Node1->Node4 + + + + + +Node5 + + +penify_hook.git_analyzer. +GitDocGenHook + + + ++ __init__() ++ get_modified_files +_in_last_commit() ++ get_modified_lines() ++ process_file() ++ run() + + + + + +Node1->Node5 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml new file mode 100644 index 0000000..4209280 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml @@ -0,0 +1,229 @@ + +
+penify_hook.commit_analyzer.CommitDocGenHook Class Reference +penify_hook.commit_analyzer.CommitDocGenHook +Inheritance diagram for penify_hook.commit_analyzer.CommitDocGenHook: + + + + + + + + +Collaboration diagram for penify_hook.commit_analyzer.CommitDocGenHook: + + + + + + + + + + Public Member Functions + + def __init__ (self, str repo_path, APIClient api_client, llm_client=None, jira_client=None) + + dict get_summary (self, str instruction, bool generate_description) + + def run (self, Optional[str] msg, bool edit_commit_message, bool generate_description) + + tuple process_jira_integration (self, str title, str description, str msg) + + + + + Public Attributes + + llm_client + + + + + Private Member Functions + + def _amend_commit (self) + + + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHook__init__ +def penify_hook.commit_analyzer.CommitDocGenHook.__init__ ( self, str repo_path, APIClient api_client, llm_client = None +, jira_client = None +) +Reimplemented from penify_hook.base_analyzer.BaseAnalyzer. +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Member Function Documentation +
+ _amend_commit() +_amend_commitpenify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHook_amend_commit +def penify_hook.commit_analyzer.CommitDocGenHook._amend_commit ( self)[private] +Open the default git editor for editing the commit message. + +This function changes the current working directory to the repository +path, runs the git command to amend the last commit, and opens the +default editor for the user to modify the commit message. After the +operation, it returns to the original directory. + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_summary() +get_summarypenify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHookget_summary + dict penify_hook.commit_analyzer.CommitDocGenHook.get_summary ( self, str instruction, bool generate_description) +Generate a summary for the commit based on the staged changes. + +This function retrieves the differences of the staged changes in the +repository and generates a commit summary using the provided +instruction. If there are no changes staged for commit, an exception is +raised. If a JIRA client is connected, it will attempt to extract issue +keys from the current branch and use them to fetch context. The summary +can be generated either with a Language Model (LLM) client or through +the API client. + +Args: + instruction (str): A string containing instructions for generating the commit summary. + generate_description (bool): Whether to include detailed descriptions in the summary. + +Returns: + dict: The generated commit summary based on the staged changes, provided + instruction, and any relevant JIRA context. The dictionary contains keys + such as 'summary', 'description', etc., depending on whether a + description was requested. + +Raises: + ValueError: If there are no changes staged for commit. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ process_jira_integration() +process_jira_integrationpenify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHookprocess_jira_integration + tuple penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration ( self, str title, str description, str msg) +Process JIRA integration for the commit message. + +Args: + title (str): Generated commit title. + description (str): Generated commit description. + msg (str): Original user message that might contain JIRA references. + +Returns: + tuple: A tuple containing the updated commit title and description with + included JIRA information. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ run() +runpenify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHookrun +def penify_hook.commit_analyzer.CommitDocGenHook.run ( self, Optional[str] msg, bool edit_commit_message, bool generate_description) +Run the post-commit hook. + +This method processes the modified files from the last commit, stages +them, and creates an auto-commit with an optional message. It also +handles JIRA integration if available. If there is an error generating +the commit summary, an exception is raised. + +Args: + msg (Optional[str]): An optional message to include in the commit. + edit_commit_message (bool): A flag indicating whether to open the git commit edit terminal after + committing. + generate_description (bool): A flag indicating whether to include a description in the commit + message. + +Raises: + Exception: If there is an error generating the commit summary. + +Here is the call graph for this function: + + + + + + + + +
+
+
+Member Data Documentation +
+ llm_client +llm_clientpenify_hook.commit_analyzer.CommitDocGenHook +penify_hook.commit_analyzer.CommitDocGenHookllm_client +penify_hook.commit_analyzer.CommitDocGenHook.llm_client
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..4d6e419 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +7b0dd63703399513e2ba32399fe691fd \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..ebcb060 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg @@ -0,0 +1,57 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook + ++ llm_client + ++ __init__() ++ get_summary() ++ run() ++ process_jira_integration() +- _amend_commit() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..4d6e419 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +7b0dd63703399513e2ba32399fe691fd \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..ebcb060 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg @@ -0,0 +1,57 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook + ++ llm_client + ++ __init__() ++ get_summary() ++ run() ++ process_jira_integration() +- _amend_commit() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 new file mode 100644 index 0000000..d530502 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.md5 @@ -0,0 +1 @@ +503804b19fd6263bc4d634da365fcb38 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg new file mode 100644 index 0000000..e69c2c7 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a6370a03f7ed9175ef6f81e931a105ea9_cgraph.svg @@ -0,0 +1,180 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.run + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node6 + + + + + +Node8 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node8 + + + + + +Node3->Node4 + + + + + +Node5 + + +penify_hook.ui_utils.format_info + + + + + +Node4->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.format +_success + + + + + +Node6->Node7 + + + + + +Node8->Node4 + + + + + +Node9 + + +penify_hook.ui_utils.print +_warning + + + + + +Node8->Node9 + + + + + +Node10 + + +penify_hook.ui_utils.format +_warning + + + + + +Node9->Node10 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5 new file mode 100644 index 0000000..96b4195 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.md5 @@ -0,0 +1 @@ +ad1182651b0cfe9906faf8af31cf667d \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg new file mode 100644 index 0000000..3064361 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_cgraph.svg @@ -0,0 +1,54 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.format_info + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 new file mode 100644 index 0000000..fffc366 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 @@ -0,0 +1 @@ +086b563bbc1068f3e0325d4a68d5bd17 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg new file mode 100644 index 0000000..3b6972e --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 new file mode 100644 index 0000000..0536af9 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.md5 @@ -0,0 +1 @@ +fb0bae9cf2f7e07ac778eed1297c327b \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg new file mode 100644 index 0000000..dc56728 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_ac999c5cbc852a7ec3b412ccb43c274ca_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5 new file mode 100644 index 0000000..76d8830 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.md5 @@ -0,0 +1 @@ +4cfab920326b3a6b29c805803ac72558 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg new file mode 100644 index 0000000..8fe268a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_cgraph.svg @@ -0,0 +1,86 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.ui_utils.format_info + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.format +_warning + + + + + +Node4->Node5 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 new file mode 100644 index 0000000..cf1b6d3 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 @@ -0,0 +1 @@ +3cd15e6828a60d49cece5c87177581df \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg new file mode 100644 index 0000000..e5bf8f4 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5 new file mode 100644 index 0000000..5f2103d --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.md5 @@ -0,0 +1 @@ +95c682625e7209c65fce50a4bb060a81 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg new file mode 100644 index 0000000..d985a2a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_cgraph.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5 new file mode 100644 index 0000000..39adea9 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.md5 @@ -0,0 +1 @@ +534bd5898147e11eac4c0e46a39c7860 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg new file mode 100644 index 0000000..8cebb40 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_af127d86729e226d74dbeb095b008db3e_icgraph.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml new file mode 100644 index 0000000..c267af5 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml @@ -0,0 +1,129 @@ + +
+penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference +penify_hook.file_analyzer.FileAnalyzerGenHook +Inheritance diagram for penify_hook.file_analyzer.FileAnalyzerGenHook: + + + + + + + + +Collaboration diagram for penify_hook.file_analyzer.FileAnalyzerGenHook: + + + + + + + + + + Public Member Functions + + def __init__ (self, str file_path, APIClient api_client) + + def process_file (self, file_path, pbar, str new_param="") + + def print_processing (self, file_path) + + def run (self) + + + + + Public Attributes + + file_path + + + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.file_analyzer.FileAnalyzerGenHook +penify_hook.file_analyzer.FileAnalyzerGenHook__init__ +def penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ ( self, str file_path, APIClient api_client) +Reimplemented from penify_hook.base_analyzer.BaseAnalyzer. +
+
+
+Member Function Documentation +
+ print_processing() +print_processingpenify_hook.file_analyzer.FileAnalyzerGenHook +penify_hook.file_analyzer.FileAnalyzerGenHookprint_processing +def penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing ( self, file_path) +Prints a formatted message indicating that a file is being processed. +Here is the call graph for this function: + + + + + + + + +
+
+ process_file() +process_filepenify_hook.file_analyzer.FileAnalyzerGenHook +penify_hook.file_analyzer.FileAnalyzerGenHookprocess_file +def penify_hook.file_analyzer.FileAnalyzerGenHook.process_file ( self, file_path, pbar, str new_param = "" +) +Processes a file by validating its extension, reading content, generating documentation, +and writing changes back to the file. + +Args: + file_path (str): The path of the file to be processed. + pbar (tqdm.tqdm): A progress bar object to update the status of processing stages. +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ run() +runpenify_hook.file_analyzer.FileAnalyzerGenHook +penify_hook.file_analyzer.FileAnalyzerGenHookrun +def penify_hook.file_analyzer.FileAnalyzerGenHook.run ( self) +Runs the documentation process with a progress bar. +Here is the call graph for this function: + + + + + + + + +
+
+
+Member Data Documentation +
+ file_path +file_pathpenify_hook.file_analyzer.FileAnalyzerGenHook +penify_hook.file_analyzer.FileAnalyzerGenHookfile_path +penify_hook.file_analyzer.FileAnalyzerGenHook.file_path
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..b6c2c1c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +98c7ce96bb60ecdbb8c57ef7c2bc6d59 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..2c46dfc --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,56 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook + ++ file_path + ++ __init__() ++ process_file() ++ print_processing() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..b6c2c1c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +98c7ce96bb60ecdbb8c57ef7c2bc6d59 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..2c46dfc --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,56 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook + ++ file_path + ++ __init__() ++ process_file() ++ print_processing() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 new file mode 100644 index 0000000..416cd78 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.md5 @@ -0,0 +1 @@ +dd6dbfdde640f0bc6f1c0cc995a9b4fb \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg new file mode 100644 index 0000000..df60e23 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_cgraph.svg @@ -0,0 +1,71 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.ui_utils.update +_stage + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 new file mode 100644 index 0000000..8da8816 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.md5 @@ -0,0 +1 @@ +dce29e772ed93d06e90894791ddc50ca \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg new file mode 100644 index 0000000..c688580 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a2cc6c22ef588fccf3eed9bbc57fb6d6e_icgraph.svg @@ -0,0 +1,55 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 new file mode 100644 index 0000000..f40daaf --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.md5 @@ -0,0 +1 @@ +5c58a576c4056ea132d5a9cca6880cb6 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg new file mode 100644 index 0000000..c02effb --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a4f4dffbc432fac3e259d957dd1e187f1_cgraph.svg @@ -0,0 +1,204 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.run + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.ui_utils.print +_status + + + + + +Node1->Node4 + + + + + +Node5 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node5 + + + + + +Node7 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node7 + + + + + +Node9 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node9 + + + + + +Node12 + + +penify_hook.ui_utils.update +_stage + + + + + +Node1->Node12 + + + + + +Node3 + + +penify_hook.ui_utils.format_info + + + + + +Node2->Node3 + + + + + +Node6 + + +penify_hook.ui_utils.format +_success + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified_lines + + + + + +Node7->Node8 + + + + + +Node10 + + +penify_hook.ui_utils.print +_warning + + + + + +Node9->Node10 + + + + + +Node9->Node12 + + + + + +Node11 + + +penify_hook.ui_utils.format +_warning + + + + + +Node10->Node11 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 new file mode 100644 index 0000000..a24f9ee --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.md5 @@ -0,0 +1 @@ +e106885ca4b06113170f86da8447c21c \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg new file mode 100644 index 0000000..ac0606c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a6ab39391dfb7686f2a2d21a702dd3073_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing + + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml new file mode 100644 index 0000000..f149229 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml @@ -0,0 +1,120 @@ + +
+penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference +penify_hook.folder_analyzer.FolderAnalyzerGenHook +Inheritance diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook: + + + + + + + + +Collaboration diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook: + + + + + + + + + + Public Member Functions + + def __init__ (self, str dir_path, APIClient api_client) + + def list_all_files_in_dir (self, str dir_path) + + def run (self) + + + + + Public Attributes + + dir_path + + + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.folder_analyzer.FolderAnalyzerGenHook +penify_hook.folder_analyzer.FolderAnalyzerGenHook__init__ +def penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ ( self, str dir_path, APIClient api_client) +Reimplemented from penify_hook.base_analyzer.BaseAnalyzer. +
+
+
+Member Function Documentation +
+ list_all_files_in_dir() +list_all_files_in_dirpenify_hook.folder_analyzer.FolderAnalyzerGenHook +penify_hook.folder_analyzer.FolderAnalyzerGenHooklist_all_files_in_dir +def penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir ( self, str dir_path) +List all non-hidden files in a directory and its subdirectories. + +This function recursively traverses the specified directory and its +subdirectories, collecting paths of all non-hidden files. It filters out +hidden directories and files (those starting with a dot) to ensure only +visible files are returned. + +Args: + dir_path (str): The path to the directory whose files and subdirectory files need to be + listed. + +Returns: + list: A list containing the full paths of all non-hidden files within the + specified directory and its subdirectories. + +Here is the caller graph for this function: + + + + + + + + +
+
+ run() +runpenify_hook.folder_analyzer.FolderAnalyzerGenHook +penify_hook.folder_analyzer.FolderAnalyzerGenHookrun +def penify_hook.folder_analyzer.FolderAnalyzerGenHook.run ( self) +Run the post-commit hook. + +This function processes all files in a specified directory using a +progress bar. It lists all files, initializes a `FileAnalyzerGenHook` +for each file, and runs it. Errors during processing of individual files +are caught and logged, but do not stop the processing of other files. A +progress bar is displayed indicating the number of files processed. + +Args: + self (PostCommitHook): The instance of the post-commit hook class. + +Here is the call graph for this function: + + + + + + + + +
+
+
+Member Data Documentation +
+ dir_path +dir_pathpenify_hook.folder_analyzer.FolderAnalyzerGenHook +penify_hook.folder_analyzer.FolderAnalyzerGenHookdir_path +penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..320340b --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +2ce8b70614e0bc292a08fd5461334e23 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..f0b7c4a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,55 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook + ++ dir_path + ++ __init__() ++ list_all_files_in_dir() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..320340b --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +2ce8b70614e0bc292a08fd5461334e23 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..f0b7c4a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,55 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook + ++ dir_path + ++ __init__() ++ list_all_files_in_dir() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5 new file mode 100644 index 0000000..4aed41f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.md5 @@ -0,0 +1 @@ +e2a0ef57ef0713a63ba1c8ee5591e9f5 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg new file mode 100644 index 0000000..ba8e0cb --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a70b845318fc7ac3b607daf26378e19ec_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5 new file mode 100644 index 0000000..88516d8 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.md5 @@ -0,0 +1 @@ +a3c6817cbc08f61a1a5f2b81334ae3dc \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg new file mode 100644 index 0000000..47f7147 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_afd189d1b8c773bf710a899eb21fd76cc_cgraph.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml new file mode 100644 index 0000000..1cd5194 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml @@ -0,0 +1,197 @@ + +
+penify_hook.git_analyzer.GitDocGenHook Class Reference +penify_hook.git_analyzer.GitDocGenHook +Inheritance diagram for penify_hook.git_analyzer.GitDocGenHook: + + + + + + + + +Collaboration diagram for penify_hook.git_analyzer.GitDocGenHook: + + + + + + + + + + Public Member Functions + + def __init__ (self, str repo_path, APIClient api_client) + + def get_modified_files_in_last_commit (self) + + def get_modified_lines (self, diff_text) + + def process_file (self, file_path) + + def run (self) + + + + + Additional Inherited Members + +
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.git_analyzer.GitDocGenHook +penify_hook.git_analyzer.GitDocGenHook__init__ +def penify_hook.git_analyzer.GitDocGenHook.__init__ ( self, str repo_path, APIClient api_client) +Reimplemented from penify_hook.base_analyzer.BaseAnalyzer. +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Member Function Documentation +
+ get_modified_files_in_last_commit() +get_modified_files_in_last_commitpenify_hook.git_analyzer.GitDocGenHook +penify_hook.git_analyzer.GitDocGenHookget_modified_files_in_last_commit +def penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit ( self) +Get the list of files modified in the last commit. + +This function retrieves the files that were modified in the most recent +commit of the repository. It accesses the last commit and iterates +through the differences to compile a list of unique file paths that were +changed. The function returns this list for further processing or +analysis. + +Returns: + list: A list of file paths that were modified in the last commit. + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_modified_lines() +get_modified_linespenify_hook.git_analyzer.GitDocGenHook +penify_hook.git_analyzer.GitDocGenHookget_modified_lines +def penify_hook.git_analyzer.GitDocGenHook.get_modified_lines ( self, diff_text) +Extract modified line numbers from a diff text. + +This function processes a diff text to identify and extract the line +numbers that have been modified. It distinguishes between added and +deleted lines and keeps track of the current line number as it parses +through the diff. The function handles hunk headers and ensures that any +deletions at the end of the file are also captured. + +Args: + diff_text (str): A string containing the diff text to be processed. + +Returns: + list: A sorted list of unique line numbers that have been modified. + +Here is the caller graph for this function: + + + + + + + + +
+
+ process_file() +process_filepenify_hook.git_analyzer.GitDocGenHook +penify_hook.git_analyzer.GitDocGenHookprocess_file +def penify_hook.git_analyzer.GitDocGenHook.process_file ( self, file_path) +Process a file by checking its type, reading its content, and sending it +to an API. + +This method constructs the absolute path of the specified file and +verifies if the file has a valid extension. If the file type is +supported, it reads the content of the file and retrieves the +differences from the last commit in the repository. If changes are +detected, it sends the file content along with the modified lines to an +API for further processing. If the API response indicates no changes, +the original file will not be overwritten. + +Args: + file_path (str): The relative path to the file to be processed. + +Returns: + bool: True if the file was successfully processed and updated, False + otherwise. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ run() +runpenify_hook.git_analyzer.GitDocGenHook +penify_hook.git_analyzer.GitDocGenHookrun +def penify_hook.git_analyzer.GitDocGenHook.run ( self) +Run the post-commit hook. + +This method retrieves the list of modified files from the last commit +and processes each file. It stages any files that have been modified +during processing and creates an auto-commit if changes were made. A +progress bar is displayed to indicate the processing status of each +file. The method handles any exceptions that occur during file +processing, printing an error message for each file that fails to +process. If any modifications are made to the files, an auto-commit is +created to save those changes. + +Here is the call graph for this function: + + + + + + + + +
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..8b8aff5 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +d285fcb980d93312bfad049f92895ba8 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..0383f84 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg @@ -0,0 +1,58 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook + + + ++ __init__() ++ get_modified_files +_in_last_commit() ++ get_modified_lines() ++ process_file() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..8b8aff5 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +d285fcb980d93312bfad049f92895ba8 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..0383f84 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg @@ -0,0 +1,58 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook + + + ++ __init__() ++ get_modified_files +_in_last_commit() ++ get_modified_lines() ++ process_file() ++ run() + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer + ++ folder_path ++ repo_path ++ repo ++ repo_details ++ relative_file_path ++ api_client ++ supported_file_types + ++ __init__() + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5 new file mode 100644 index 0000000..bfda978 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.md5 @@ -0,0 +1 @@ +d30b2fe6c8ef2ddf32a8fa6ab13a25f2 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg new file mode 100644 index 0000000..a0f9a52 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified_lines + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5 new file mode 100644 index 0000000..519d9fc --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.md5 @@ -0,0 +1 @@ +4e6accfb0097a03bb56e2f390d46b980 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg new file mode 100644 index 0000000..d14f6c2 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a05313caa22b173ce75638f0db08eeb85_icgraph.svg @@ -0,0 +1,55 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5 new file mode 100644 index 0000000..e94ad2c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.md5 @@ -0,0 +1 @@ +c545389fcb803268668d7fa34c6d8fd9 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg new file mode 100644 index 0000000..8cb348b --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a17549766100e91eb94b5f1a1d34bf481_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5 new file mode 100644 index 0000000..cda212c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.md5 @@ -0,0 +1 @@ +4498c89a026edc471fa55e435c85053e \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg new file mode 100644 index 0000000..03cf8de --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a3beba14e92d717391a74bb70b1fab0ae_cgraph.svg @@ -0,0 +1,268 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.run + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node1->Node4 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node5 + + + + + +Node6 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.print +_status + + + + + +Node1->Node8 + + + + + +Node9 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node9 + + + + + +Node11 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node11 + + + + + +Node13 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node13 + + + + + +Node3 + + +penify_hook.ui_utils.format_info + + + + + +Node2->Node3 + + + + + +Node5->Node3 + + + + + +Node7 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node6->Node7 + + + + + +Node10 + + +penify_hook.ui_utils.format +_success + + + + + +Node9->Node10 + + + + + +Node12 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified_lines + + + + + +Node11->Node12 + + + + + +Node14 + + +penify_hook.ui_utils.print +_warning + + + + + +Node13->Node14 + + + + + +Node16 + + +penify_hook.ui_utils.update +_stage + + + + + +Node13->Node16 + + + + + +Node15 + + +penify_hook.ui_utils.format +_warning + + + + + +Node14->Node15 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 new file mode 100644 index 0000000..4c4eb97 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.md5 @@ -0,0 +1 @@ +eb87828bf186415180fe0c4a9a69bffa \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg new file mode 100644 index 0000000..cec3173 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_cgraph.svg @@ -0,0 +1,29 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 new file mode 100644 index 0000000..756ea69 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.md5 @@ -0,0 +1 @@ +3a80069fcc09aa58b795925a04c3a1a9 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg new file mode 100644 index 0000000..caf1235 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a92275fddb43dbef6dfdb6c1ed6e96d0c_icgraph.svg @@ -0,0 +1,29 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 new file mode 100644 index 0000000..5dc8e1b --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.md5 @@ -0,0 +1 @@ +1071229abc0a24fe1359fe7763b4c8d0 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg new file mode 100644 index 0000000..f0cc7fa --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a974d2f51315ed6a1965a7fd7e2ced0cd_icgraph.svg @@ -0,0 +1,71 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_lines + + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified_lines + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2->Node4 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient.xml b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient.xml new file mode 100644 index 0000000..1680784 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient.xml @@ -0,0 +1,447 @@ + +
+penify_hook.jira_client.JiraClient Class Reference +penify_hook.jira_client.JiraClient +Collaboration diagram for penify_hook.jira_client.JiraClient: + + + + + + + + + + Public Member Functions + + def __init__ (self, str jira_url=None, str jira_user=None, str jira_api_token=None) + + bool is_connected (self) + + List[str] extract_issue_keys_from_branch (self, str branch_name) + + List[str] extract_issue_keys (self, str text) + + Optional[Dict[str, Any]] get_issue_details (self, str issue_key) + + bool add_comment (self, str issue_key, str comment) + + bool update_issue_status (self, str issue_key, str transition_name) + + tuple format_commit_message_with_jira_info (self, str commit_title, str commit_description, List[str] issue_keys=None) + + Dict[str, Any] get_detailed_issue_context (self, str issue_key) + + Dict[str, Any] get_commit_context_from_issues (self, List[str] issue_keys) + + tuple enhance_commit_message (self, str title, str description, List[str] issue_keys) + + + + + Public Attributes + + jira_url + + jira_user + + jira_api_token + + jira_client + + + +
+Detailed Description + +Client for interacting with JIRA API + +
+
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClient__init__ +def penify_hook.jira_client.JiraClient.__init__ ( self, str jira_url = None +, str jira_user = None +, str jira_api_token = None +) +Initialize the JIRA client. + +Args: + jira_url: Base URL for JIRA instance (e.g., "https://your-domain.atlassian.net") + jira_user: JIRA username or email + jira_api_token: JIRA API token + +
+
+
+Member Function Documentation +
+ add_comment() +add_commentpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientadd_comment + bool penify_hook.jira_client.JiraClient.add_comment ( self, str issue_key, str comment) +Add a comment to a JIRA issue. + +Args: + issue_key (str): JIRA issue key (e.g., "PROJECT-123") + comment (str): Comment text to add + +Returns: + bool: True if the comment was added successfully, False otherwise + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ enhance_commit_message() +enhance_commit_messagepenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientenhance_commit_message + tuple penify_hook.jira_client.JiraClient.enhance_commit_message ( self, str title, str description, List[str] issue_keys) +Enhance a commit message with business and technical context from JIRA +issues. + +Args: + title (str): Original commit title. + description (str): Original commit description. + issue_keys (List[str]): List of JIRA issue keys to include in the enhanced commit message. + +Returns: + tuple: A tuple containing the enhanced commit title and description with added + context from JIRA issues. + +Here is the call graph for this function: + + + + + + + + +
+
+ extract_issue_keys() +extract_issue_keyspenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientextract_issue_keys + List[str] penify_hook.jira_client.JiraClient.extract_issue_keys ( self, str text) +Extract JIRA issue keys from a given text. + +This function searches through the provided text to find and return all +unique JIRA issue keys. A JIRA issue key typically follows the pattern +of PROJECT-123, where PROJECT is alphanumeric and consists of at least +one uppercase letter followed by one or more alphanumeric characters, +and 123 is a numeric sequence. + +Args: + text (str): The text in which to search for JIRA issue keys. + +Returns: + List[str]: A list of unique JIRA issue keys found in the text. + +Here is the caller graph for this function: + + + + + + + + +
+
+ extract_issue_keys_from_branch() +extract_issue_keys_from_branchpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientextract_issue_keys_from_branch + List[str] penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch ( self, str branch_name) +Extracts JIRA issue keys from a branch name. + +This function searches through a given git branch name to find and +return any JIRA issue keys that match the pattern. Common conventions +for JIRA issue keys in branch names include: - +feature/PROJECT-123-description - bugfix/PROJECT-123-fix-something - +hotfix/PROJECT-123/short-desc + +Args: + branch_name (str): The name of the git branch to search for JIRA issue keys. + +Returns: + List[str]: A list of unique JIRA issue keys found in the branch name. + +Examples: + extract_issue_keys_from_branch("feature/PROJ-456-add-new-feature") + # Output: ['PROJ-456'] + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_commit_message_with_jira_info() +format_commit_message_with_jira_infopenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientformat_commit_message_with_jira_info + tuple penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info ( self, str commit_title, str commit_description, List[str] issue_keys = None +) +Format commit message with JIRA issue information. + +Args: + commit_title (str): The original commit title. + commit_description (str): The original commit description. + issue_keys (List[str]?): A list of JIRA issue keys to include in the commit message. If not + provided, issue keys will be extracted from both the title and the + description. + +Returns: + tuple: A tuple containing the updated commit title and description with JIRA + information included. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_commit_context_from_issues() +get_commit_context_from_issuespenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientget_commit_context_from_issues + Dict[str, Any] penify_hook.jira_client.JiraClient.get_commit_context_from_issues ( self, List[str] issue_keys) +Gather contextual information from JIRA issues to improve commit +messages. + +This function processes a list of JIRA issue keys, retrieves detailed +context for each issue, and aggregates it into a dictionary that can be +used to enhance commit messages. It first retrieves the primary issue +(the first key in the list) and then gathers basic details for any +related issues. The resulting context includes information from both the +primary and related issues, along with all issue keys. + +Args: + issue_keys: List of JIRA issue keys to gather information from + +Returns: + Dict containing business and technical context from the issues + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_detailed_issue_context() +get_detailed_issue_contextpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientget_detailed_issue_context + Dict[str, Any] penify_hook.jira_client.JiraClient.get_detailed_issue_context ( self, str issue_key) +Retrieve comprehensive details about a JIRA issue including context for +better commit messages. + +This function fetches detailed information from a specified JIRA issue +and constructs a dictionary containing various context fields such as +the issue summary, description, type, status, priority, comments, URL, +and additional custom fields like acceptance criteria and sprint +information. If any errors occur during the fetching process, +appropriate warnings or errors are logged. + +Args: + issue_key (str): The JIRA issue key (e.g., "PROJECT-123"). + +Returns: + Dict[str, Any]: A dictionary containing business and technical context from the issue. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_issue_details() +get_issue_detailspenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientget_issue_details + Optional[Dict[str, Any]] penify_hook.jira_client.JiraClient.get_issue_details ( self, str issue_key) +Retrieve details of a JIRA issue based on its key. + +This function fetches detailed information about a specified JIRA issue +using the provided issue key. It checks if the JIRA client is connected +before attempting to retrieve the issue. If the client is not connected, +it logs a warning and returns `None`. The function then attempts to +fetch the issue from the JIRA server and constructs a dictionary +containing various details about the issue such as its key, summary, +status, description, assignee, reporter, type, priority, and URL. If any +errors occur during this process, they are logged, and `None` is +returned. + +Args: + issue_key (str): The JIRA issue key (e.g., "PROJECT-123"). + +Returns: + Dict[str, Any] or None: A dictionary containing the details of the JIRA + issue if found, otherwise `None`. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ is_connected() +is_connectedpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientis_connected + bool penify_hook.jira_client.JiraClient.is_connected ( self) +Check if the JIRA client is connected. + +This function verifies whether the JIRA client has successfully +established a connection. It returns `True` if the client is connected, +and `False` otherwise. + +Returns: + bool: True if the JIRA client is connected, False otherwise + +Here is the caller graph for this function: + + + + + + + + +
+
+ update_issue_status() +update_issue_statuspenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientupdate_issue_status + bool penify_hook.jira_client.JiraClient.update_issue_status ( self, str issue_key, str transition_name) +Update the status of a JIRA issue. + +Args: + issue_key (str): The key of the JIRA issue to be updated. + transition_name (str): The name of the desired transition. + +Returns: + bool: True if the status was successfully updated, False otherwise. + +Here is the call graph for this function: + + + + + + + + +
+
+
+Member Data Documentation +
+ jira_api_token +jira_api_tokenpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientjira_api_token +penify_hook.jira_client.JiraClient.jira_api_token
+
+ jira_client +jira_clientpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientjira_client +penify_hook.jira_client.JiraClient.jira_client
+
+ jira_url +jira_urlpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientjira_url +penify_hook.jira_client.JiraClient.jira_url
+
+ jira_user +jira_userpenify_hook.jira_client.JiraClient +penify_hook.jira_client.JiraClientjira_user +penify_hook.jira_client.JiraClient.jira_user
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 new file mode 100644 index 0000000..fd79a8c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 @@ -0,0 +1 @@ +6c94c8bb54063a87c9a021e499d2535a \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg new file mode 100644 index 0000000..9d17916 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg @@ -0,0 +1,44 @@ + + + + + + +penify_hook.jira_client.JiraClient + + + +Node1 + + +penify_hook.jira_client. +JiraClient + ++ jira_url ++ jira_user ++ jira_api_token ++ jira_client + ++ __init__() ++ is_connected() ++ extract_issue_keys +_from_branch() ++ extract_issue_keys() ++ get_issue_details() ++ add_comment() ++ update_issue_status() ++ format_commit_message +_with_jira_info() ++ get_detailed_issue +_context() ++ get_commit_context +_from_issues() ++ enhance_commit_message() + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 new file mode 100644 index 0000000..15413c7 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 @@ -0,0 +1 @@ +e49f7a18c7f7394bc3ba168c4b7dfcbf \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg new file mode 100644 index 0000000..dbff1cc --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg @@ -0,0 +1,176 @@ + + + + + + +penify_hook.jira_client.JiraClient.is_connected + + + +Node1 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node4 + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node5 + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node6 + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node7 + + + + + +Node8 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node1->Node8 + + + + + +Node2->Node2 + + + + + +Node4->Node3 + + + + + +Node5->Node3 + + + + + +Node6->Node5 + + + + + +Node7->Node4 + + + + + +Node7->Node5 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5 new file mode 100644 index 0000000..fd5c11a --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.md5 @@ -0,0 +1 @@ +4392765f5b438ebce417142005418b29 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg new file mode 100644 index 0000000..97830d8 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_cgraph.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue +_keys_from_branch + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.format_info + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.md5 new file mode 100644 index 0000000..ee1ac0c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.md5 @@ -0,0 +1 @@ +f37cc20de5f54e34fabf270bdbd9a7bf \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.svg new file mode 100644 index 0000000..b9485a8 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a093d6456fe053ef7a7862d5d6851910c_icgraph.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue +_keys_from_branch + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 new file mode 100644 index 0000000..c70fc7f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 @@ -0,0 +1 @@ +3fdd0ff288b79c613c0ccbdde81f6b44 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg new file mode 100644 index 0000000..505f77c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg @@ -0,0 +1,78 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node4 + + + + + +Node3->Node4 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 new file mode 100644 index 0000000..58d4f7d --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 @@ -0,0 +1 @@ +e64b34f639342bc29f69697ff85b6115 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg new file mode 100644 index 0000000..4afaaf0 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 new file mode 100644 index 0000000..e84f7d7 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 @@ -0,0 +1 @@ +ce0d7d39675e66eb580380759195be0e \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg new file mode 100644 index 0000000..5494c0f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 new file mode 100644 index 0000000..584c012 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 @@ -0,0 +1 @@ +b4d0f6392752d140ca4858cea5527f74 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg new file mode 100644 index 0000000..28ed8fb --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg @@ -0,0 +1,80 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + +Node4->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 new file mode 100644 index 0000000..d953518 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 @@ -0,0 +1 @@ +9194291c6b536fb2aa39473066ce3d57 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg new file mode 100644 index 0000000..d1c93aa --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg @@ -0,0 +1,153 @@ + + + + + + +penify_hook.jira_client.JiraClient.enhance_commit_message + + + +Node1 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node5 + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node6 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2->Node4 + + + + + +Node2->Node5 + + + + + +Node4->Node5 + + + + + +Node6->Node4 + + + + + +Node6->Node5 + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node6->Node7 + + + + + +Node7->Node5 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 new file mode 100644 index 0000000..ea4f60f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 @@ -0,0 +1 @@ +01a09828002214953a0e4ce5a004f82b \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg new file mode 100644 index 0000000..9b98fd2 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 new file mode 100644 index 0000000..8cce519 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 @@ -0,0 +1 @@ +be0799c63ed63825acfa4aefd053a607 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg new file mode 100644 index 0000000..dcc9f2d --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg @@ -0,0 +1,29 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 new file mode 100644 index 0000000..562794f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 @@ -0,0 +1 @@ +de5b0ac337604f2c79dc74aaee0a1763 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg new file mode 100644 index 0000000..93d705f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 new file mode 100644 index 0000000..cc19180 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 @@ -0,0 +1 @@ +8ed68fcd41631bf9876f85ae6b4b3de2 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg new file mode 100644 index 0000000..4c91c11 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 new file mode 100644 index 0000000..b855a20 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 @@ -0,0 +1 @@ +2e42fe22a9070fc3f543991e99faf205 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg new file mode 100644 index 0000000..aff53e7 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.jira_client.JiraClient.update_issue_status + + + +Node1 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 new file mode 100644 index 0000000..f452c00 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 @@ -0,0 +1 @@ +f5fed9d6bb8f646e32b31343d031871d \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg new file mode 100644 index 0000000..f764e5c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys + + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 new file mode 100644 index 0000000..990f237 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 @@ -0,0 +1 @@ +e8676c5f3006c0807c1fe30ed75a7701 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg new file mode 100644 index 0000000..7230635 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg @@ -0,0 +1,85 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node4 + + + + + +Node2->Node3 + + + + + +Node4->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 new file mode 100644 index 0000000..3221326 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 @@ -0,0 +1 @@ +8e9085e7e96a72eae434ab3b9bb34f71 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg new file mode 100644 index 0000000..c8bea4f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient.xml b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient.xml new file mode 100644 index 0000000..487f50e --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient.xml @@ -0,0 +1,148 @@ + +
+penify_hook.llm_client.LLMClient Class Reference +penify_hook.llm_client.LLMClient +Collaboration diagram for penify_hook.llm_client.LLMClient: + + + + + + + + + + Public Member Functions + + def __init__ (self, str model=None, str api_base=None, str api_key=None) + + def litellm (self) + + Dict generate_commit_summary (self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None) + + + + + Public Attributes + + model + + + + + Private Attributes + + _litellm + + + +
+Detailed Description + +Client for interacting with LLM models using LiteLLM. + +
+
+Constructor & Destructor Documentation +
+ __init__() +__init__penify_hook.llm_client.LLMClient +penify_hook.llm_client.LLMClient__init__ +def penify_hook.llm_client.LLMClient.__init__ ( self, str model = None +, str api_base = None +, str api_key = None +) +Initialize the LLM client. + +Args: + model: LLM model to use (e.g., "gpt-4", "ollama/llama2", etc.) + api_base: Base URL for API requests (e.g., "http://localhost:11434" for Ollama) + api_key: API key for the LLM service + +
+
+
+Member Function Documentation +
+ generate_commit_summary() +generate_commit_summarypenify_hook.llm_client.LLMClient +penify_hook.llm_client.LLMClientgenerate_commit_summary + Dict penify_hook.llm_client.LLMClient.generate_commit_summary ( self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context = None +) +Generate a commit summary using the LLM. + +This function generates a concise and descriptive commit summary based +on the provided Git diff, user instructions, repository details, and +optional JIRA context. It constructs a prompt for the LLM to produce a +commit title and an optional detailed description, adhering to Semantic +Commit Messages guidelines. If the JIRA context is provided, it enriches +the prompt with relevant issue information. + +Args: + diff (str): Git diff of changes. + message (str): User-provided commit message or instructions. + generate_description (bool): Flag indicating whether to include a detailed description in the + summary. + repo_details (Dict): Details about the repository. + jira_context (Dict?): Optional JIRA issue context to enhance the summary. + +Returns: + Dict: A dictionary containing the title and description for the commit. If + generate_description is False, + the 'description' key may be absent. + +Raises: + ValueError: If the LLM model is not configured. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ litellm() +litellmpenify_hook.llm_client.LLMClient +penify_hook.llm_client.LLMClientlitellm +def penify_hook.llm_client.LLMClient.litellm ( self) +Lazy load litellm only when needed. +Here is the caller graph for this function: + + + + + + + + +
+
+
+Member Data Documentation +
+ _litellm +_litellmpenify_hook.llm_client.LLMClient +penify_hook.llm_client.LLMClient_litellm +penify_hook.llm_client.LLMClient._litellm[private]
+
+ model +modelpenify_hook.llm_client.LLMClient +penify_hook.llm_client.LLMClientmodel +penify_hook.llm_client.LLMClient.model
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py
+
diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 new file mode 100644 index 0000000..6db17d2 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 @@ -0,0 +1 @@ +98e4897c5b45a162671e50e760d299ce \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg new file mode 100644 index 0000000..40f016c --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg @@ -0,0 +1,29 @@ + + + + + + +penify_hook.llm_client.LLMClient + + + +Node1 + + +penify_hook.llm_client.LLMClient + ++ model +- _litellm + ++ __init__() ++ litellm() ++ generate_commit_summary() + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 new file mode 100644 index 0000000..5ae4b79 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.md5 @@ -0,0 +1 @@ +3a38b34ed8236aa424f3ba243fba3cf0 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg new file mode 100644 index 0000000..9c8fc75 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_cgraph.svg @@ -0,0 +1,38 @@ + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5 new file mode 100644 index 0000000..6c5244f --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.md5 @@ -0,0 +1 @@ +2232db7a39aade439b305a1e3373c005 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg new file mode 100644 index 0000000..f54f300 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_a2ad3014dac466ee1d8e00306d0cf2000_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5 b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5 new file mode 100644 index 0000000..22a2946 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.md5 @@ -0,0 +1 @@ +3dd9f4364bc4c50da31157ac03a3e97f \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg new file mode 100644 index 0000000..dd6e7a9 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1llm__client_1_1LLMClient_ad6f06658ca922793f879474f2234518e_icgraph.svg @@ -0,0 +1,54 @@ + + + + + + +penify_hook.llm_client.LLMClient.litellm + + + +Node1 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml new file mode 100644 index 0000000..665b3f0 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml @@ -0,0 +1,25 @@ + +
+penify_hook.utils.GitRepoNotFoundError Class Reference +penify_hook.utils.GitRepoNotFoundError +Inheritance diagram for penify_hook.utils.GitRepoNotFoundError: + + + + + + + + +Collaboration diagram for penify_hook.utils.GitRepoNotFoundError: + + + + + + + + + +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py
diff --git a/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 new file mode 100644 index 0000000..2e3ae13 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 @@ -0,0 +1 @@ +ae33ddd5f5a4f2a38ac959e4302206a1 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg new file mode 100644 index 0000000..ab658ad --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg @@ -0,0 +1,46 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError + + + + + + + + + +Node2 + + +Exception + + + + + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 new file mode 100644 index 0000000..2e3ae13 --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 @@ -0,0 +1 @@ +ae33ddd5f5a4f2a38ac959e4302206a1 \ No newline at end of file diff --git a/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg new file mode 100644 index 0000000..ab658ad --- /dev/null +++ b/docs345/docbook/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg @@ -0,0 +1,46 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError + + + + + + + + + +Node2 + + +Exception + + + + + + + + + +Node2->Node1 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml new file mode 100644 index 0000000..23a2c41 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml @@ -0,0 +1,342 @@ + +
+tests.test_commit_commands.TestCommitCommands Class Reference +tests.test_commit_commands.TestCommitCommands +Collaboration diagram for tests.test_commit_commands.TestCommitCommands: + + + + + + + + + + Public Member Functions + + def mock_api_client (self) + + def mock_llm_client (self) + + def mock_jira_client (self) + + def mock_commit_doc_gen (self) + + def mock_git_folder_search (self) + + def mock_print_functions (self) + + def test_commit_code_with_llm_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client) + + def test_commit_code_with_jira_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client) + + def test_commit_code_with_jira_connection_failure (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client) + + def test_commit_code_error_handling (self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client) + + def test_setup_commit_parser (self) + + def test_handle_commit (self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config) + + + +
+Member Function Documentation +
+ mock_api_client() +mock_api_clienttests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_api_client +def tests.test_commit_commands.TestCommitCommands.mock_api_client ( self) +Mocks an instance of APIClient using unittest.mock. + +This function creates a mock object for APIClient and yields it along +with the mocked instance. It is useful for testing purposes where real +API calls should be avoided. + +Yields: + tuple: A tuple containing the mock of APIClient and the mocked instance of + APIClient. + +
+
+ mock_commit_doc_gen() +mock_commit_doc_gentests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_commit_doc_gen +def tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen ( self) +Mocks the CommitDocGenHook class and returns a MagicMock instance. + +This function uses the `patch` decorator from the `unittest.mock` module +to create a mock of the `CommitDocGenHook` class. It then sets up this +mock to return a new `MagicMock` instance when invoked. The function +yields both the mock object and the mocked instance, allowing for easy +testing of functions that rely on `CommitDocGenHook`. + +Returns: + tuple: A tuple containing two elements: + - mock (patch): The patch object used to mock the `CommitDocGenHook` + class. + - doc_gen_instance (MagicMock): The mocked instance of + `CommitDocGenHook`. + +
+
+ mock_git_folder_search() +mock_git_folder_searchtests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_git_folder_search +def tests.test_commit_commands.TestCommitCommands.mock_git_folder_search ( self) +Mock the `recursive_search_git_folder` function to return a predefined +git folder path. + +This function uses the `patch` decorator from the `unittest.mock` module +to intercept calls to `penify_hook.utils.recursive_search_git_folder`. +When called, it will return '/mock/git/folder' instead of performing an +actual search. This is useful for testing purposes where you need a +consistent response without interacting with the file system. + +Yields: + MagicMock: A mock object that simulates the `recursive_search_git_folder` function. + +
+
+ mock_jira_client() +mock_jira_clienttests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_jira_client +def tests.test_commit_commands.TestCommitCommands.mock_jira_client ( self) +Create a mock JIRA client for testing purposes. + +This function yields a tuple containing a mock JIRA client instance and +its `is_connected` method. The mock client is configured to simulate an +active connection. This is useful for unit tests that require +interaction with a JIRA client without making actual network calls. + +Yields: + tuple: A tuple containing the mocked JIRA client instance and its + `is_connected` method. + +
+
+ mock_llm_client() +mock_llm_clienttests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_llm_client +def tests.test_commit_commands.TestCommitCommands.mock_llm_client ( self) +Mock an instance of LLMClient for testing purposes. + +This function yields a mock object representing an instance of +LLMClient, which can be used to simulate interactions with a language +model during testing. The mock is patched to replace the actual +LLMClient class from the penify_hook module. + +Yields: + tuple: A tuple containing two elements: + - mock (MagicMock): The mock object for LLMClient. + - llm_client_instance (MagicMock): An instance of the mocked LLMClient. + +
+
+ mock_print_functions() +mock_print_functionstests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandsmock_print_functions +def tests.test_commit_commands.TestCommitCommands.mock_print_functions ( self) +Mocks the print functions from `penify_hook.ui_utils` for testing +purposes. + +This function uses Python's `unittest.mock.patch` to replace the actual +print functions (`print`, `print_warning`, and `print_error`) with mock +objects. These mock objects can be used in tests to capture calls made +to these print functions without actually printing anything. + +Yields: + tuple: A tuple containing three mock objects corresponding to `print_info`, + `print_warning`, + and `print_error`. + +
+
+ test_commit_code_error_handling() +test_commit_code_error_handlingtests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_commit_code_error_handling +def tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling ( self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client) +Test the error handling in the test_commit_code function. + +This function sets up mocks to simulate exceptions and test the error +handling of the commit_code function. It verifies that the function +correctly prints an error message and exits with a status code of 1 when +an exception occurs during documentation generation. + +Args: + mock_print (MagicMock): Mock for the print function, used to verify error message output. + mock_exit (MagicMock): Mock for the sys.exit function, used to verify exit behavior. + mock_git_folder_search (MagicMock): Mock for the git_folder_search function, returning a mock Git folder + path. + mock_doc_gen (MagicMock): Mock for the doc_gen function, simulating an exception during + documentation generation. + mock_api_client (MagicMock): Mock for the API client class, not directly used but referenced in the + function signature. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_commit_code_with_jira_client() +test_commit_code_with_jira_clienttests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_commit_code_with_jira_client +def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client ( self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client) +Test committing code using a JIRA client. + +This function tests the commit_code function with various parameters, +including API and JIRA credentials. It sets up mock objects for +dependencies such as the JIRA client, LLM client, and doc generator to +simulate the behavior of the real classes. The function then calls +commit_code and verifies that the JIRA client and doc generator are +called with the correct parameters. + +Args: + mock_error (MagicMock): A MagicMock object for simulating error logging. + mock_warning (MagicMock): A MagicMock object for simulating warning logging. + mock_info (MagicMock): A MagicMock object for simulating info logging. + mock_git_folder_search (MagicMock): A MagicMock object for simulating the git folder search function. + mock_doc_gen (MagicMock): A MagicMock object for simulating the doc generator function. + mock_jira_client (MagicMock): A MagicMock object for simulating the JIRA client class. + mock_llm_client (MagicMock): A MagicMock object for simulating the LLM client class. + mock_api_client (MagicMock): A MagicMock object for simulating the API client class. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_commit_code_with_jira_connection_failure() +test_commit_code_with_jira_connection_failuretests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_commit_code_with_jira_connection_failure +def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure ( self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client) +Test the commit_code function when JIRA connection fails. + +This function tests the scenario where the JIRA connection fails during +a code commit. It sets up various mocks to simulate different components +of the system and then calls the `commit_code` function with specific +parameters. The function is expected to handle the JIRA connection +failure gracefully by logging an appropriate warning. + +Args: + mock_error (MagicMock): Mock for error logging. + mock_warning (MagicMock): Mock for warning logging. + mock_info (MagicMock): Mock for info logging. + mock_git_folder_search (MagicMock): Mock for searching the Git folder. + mock_doc_gen (MagicMock): Mock for generating documentation. + mock_jira_client (MagicMock): Mock for creating a JIRA client. + mock_api_client (MagicMock): Mock for creating an API client. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_commit_code_with_llm_client() +test_commit_code_with_llm_clienttests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_commit_code_with_llm_client +def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client ( self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client) +Test committing code using an LLM client. + +This function sets up mock objects for various components and then calls +the `commit_code` function with specified parameters. It verifies that +the correct mocks are created and called with the appropriate arguments. + +Args: + mock_error (MagicMock): Mock object for error handling. + mock_warning (MagicMock): Mock object for warning logging. + mock_info (MagicMock): Mock object for info logging. + mock_git_folder_search (MagicMock): Mock object to simulate git folder search. + mock_doc_gen (MagicMock): Mock object for document generation. + mock_llm_client (MagicMock): Mock object for LLM client interaction. + mock_api_client (MagicMock): Mock object for API client interaction. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_handle_commit() +test_handle_committests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_handle_commit +def tests.test_commit_commands.TestCommitCommands.test_handle_commit ( self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config) +Test the handle_commit function with various mock objects. + +This function sets up mocks for retrieving LLM configuration, JIRA +configuration, and commit code. It then creates an argument object and +calls the handle_commit function. Finally, it verifies that the mock +functions were called with the expected arguments. + +Args: + mock_print_info (MagicMock): Mock object for printing information. + mock_commit_code (MagicMock): Mock object for committing code. + mock_get_token (MagicMock): Mock object for retrieving API token. + mock_get_llm_config (MagicMock): Mock object for retrieving LLM configuration. + mock_get_jira_config (MagicMock): Mock object for retrieving JIRA configuration. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_setup_commit_parser() +test_setup_commit_parsertests.test_commit_commands.TestCommitCommands +tests.test_commit_commands.TestCommitCommandstest_setup_commit_parser +def tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser ( self) +Set up the argument parser for the commit command. + +This function configures an argument parser to handle various options +for committing changes. It adds three arguments: - '-m' or '--message': +An optional argument to specify a contextual commit message with a +default value of "N/A". - '-e' or '--terminal': A boolean flag to open +an edit terminal before committing. - '-d' or '--description': A boolean +flag that, when set to False, indicates the generation of a commit +message with title and description. + +Args: + parser (MagicMock): The argument parser to be configured. + +Here is the call graph for this function: + + + + + + + + +
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py
+
diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 new file mode 100644 index 0000000..9d383d8 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 @@ -0,0 +1 @@ +01c384c51b9b9d20ecd5af3519740055 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg new file mode 100644 index 0000000..71f1b91 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg @@ -0,0 +1,42 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands + + + ++ mock_api_client() ++ mock_llm_client() ++ mock_jira_client() ++ mock_commit_doc_gen() ++ mock_git_folder_search() ++ mock_print_functions() ++ test_commit_code_with +_llm_client() ++ test_commit_code_with +_jira_client() ++ test_commit_code_with +_jira_connection_failure() ++ test_commit_code_error +_handling() ++ test_setup_commit_parser() ++ test_handle_commit() + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5 new file mode 100644 index 0000000..f317412 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.md5 @@ -0,0 +1 @@ +fac6736890d3e6569a3e562221e2e80c \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg new file mode 100644 index 0000000..b9d2a82 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a43c2ff3707124aa48e8eb581106b8691_cgraph.svg @@ -0,0 +1,156 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.print +_error + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node2->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2->Node7 + + + + + +Node9 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.ui_utils.format +_error + + + + + +Node3->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.format_info + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.format +_warning + + + + + +Node7->Node8 + + + + + +Node9->Node9 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5 new file mode 100644 index 0000000..6ec9086 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.md5 @@ -0,0 +1 @@ +cae6ed50d17895098d586359b58517cc \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg new file mode 100644 index 0000000..7f0ecd2 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_a4d04b125e102190a768f65f1948f15bc_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_setup_commit_parser + + + + + +Node2 + + +penify_hook.commands.commit +_commands.setup_commit_parser + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5 new file mode 100644 index 0000000..332ac4f --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.md5 @@ -0,0 +1 @@ +ef8182faf1bcd63d3487614530947b10 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg new file mode 100644 index 0000000..f1760ee --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_ac13e368262340af98b30fd8ebdac6597_cgraph.svg @@ -0,0 +1,317 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_handle_commit + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2->Node3 + + + + + +Node6 + + +penify_hook.ui_utils.print_info + + + + + +Node2->Node6 + + + + + +Node11 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2->Node11 + + + + + +Node14 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2->Node14 + + + + + +Node15 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node15 + + + + + +Node4 + + +penify_hook.ui_utils.print +_error + + + + + +Node3->Node4 + + + + + +Node3->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.print +_warning + + + + + +Node3->Node8 + + + + + +Node10 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node10 + + + + + +Node5 + + +penify_hook.ui_utils.format +_error + + + + + +Node4->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.format_info + + + + + +Node6->Node7 + + + + + +Node9 + + +penify_hook.ui_utils.format +_warning + + + + + +Node8->Node9 + + + + + +Node10->Node10 + + + + + +Node12 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node11->Node12 + + + + + +Node13 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node11->Node13 + + + + + +Node13->Node10 + + + + + +Node13->Node13 + + + + + +Node14->Node12 + + + + + +Node14->Node13 + + + + + +Node15->Node12 + + + + + +Node15->Node13 + + + + + +Node16 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node15->Node16 + + + + + +Node16->Node10 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 new file mode 100644 index 0000000..9c174cc --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.md5 @@ -0,0 +1 @@ +acd28568eb3edcfc33ca2521297fd075 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg new file mode 100644 index 0000000..e81ff91 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acc4b1e4189792a3f7c11d2a745f479c0_cgraph.svg @@ -0,0 +1,156 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.print +_error + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node2->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2->Node7 + + + + + +Node9 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.ui_utils.format +_error + + + + + +Node3->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.format_info + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.format +_warning + + + + + +Node7->Node8 + + + + + +Node9->Node9 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 new file mode 100644 index 0000000..080d356 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.md5 @@ -0,0 +1 @@ +8bc1cc2849f225faaeab1719b6c0a3d6 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg new file mode 100644 index 0000000..60496ec --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_acea0d934ee0f2b914b0b893736e8fe4e_cgraph.svg @@ -0,0 +1,157 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.print +_error + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node2->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2->Node7 + + + + + +Node9 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.ui_utils.format +_error + + + + + +Node3->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.format_info + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.format +_warning + + + + + +Node7->Node8 + + + + + +Node9->Node9 + + + + + diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5 b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5 new file mode 100644 index 0000000..a77222b --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.md5 @@ -0,0 +1 @@ +2b4709da9a40be7a45efe895e73cc31f \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg new file mode 100644 index 0000000..6b812fa --- /dev/null +++ b/docs345/docbook/classtests_1_1test__commit__commands_1_1TestCommitCommands_af9c09013055ec39ddde86b487aefcf8b_cgraph.svg @@ -0,0 +1,156 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client + + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.ui_utils.print +_error + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node2->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2->Node7 + + + + + +Node9 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.ui_utils.format +_error + + + + + +Node3->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.format_info + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.format +_warning + + + + + +Node7->Node8 + + + + + +Node9->Node9 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands.xml b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands.xml new file mode 100644 index 0000000..877711c --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands.xml @@ -0,0 +1,397 @@ + +
+tests.test_config_commands.TestConfigCommands Class Reference +tests.test_config_commands.TestConfigCommands +Collaboration diagram for tests.test_config_commands.TestConfigCommands: + + + + + + + + + + Public Member Functions + + def test_get_penify_config_existing_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) + + def test_get_penify_config_new_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) + + def test_get_llm_config_exists (self, mock_file_open, mock_get_config) + + def test_get_llm_config_empty (self, mock_file_open, mock_get_config) + + def test_get_llm_config_invalid_json (self, mock_print, mock_file_open, mock_get_config) + + def test_get_jira_config_exists (self, mock_file_open, mock_get_config) + + def test_save_llm_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_get_config) + + def test_save_llm_config_failure (self, mock_print, mock_file_open, mock_get_config) + + def test_save_jira_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_path) + + def test_get_token_from_env (self, mock_file_open, mock_path, mock_getenv) + + def test_get_token_from_config (self, mock_file_open, mock_path, mock_getenv) + + def test_get_token_not_found (self, mock_file_open, mock_path, mock_getenv) + + + +
+Member Function Documentation +
+ test_get_jira_config_exists() +test_get_jira_config_existstests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_jira_config_exists +def tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists ( self, mock_file_open, mock_get_config) +Test that get_jira_config returns the correct JIRA configuration when +the configuration file exists. + +It sets up a mock for the configuration file to simulate its existence +and verifies that the function reads from the correct file and returns +the expected JIRA configuration dictionary. Additionally, it checks that +the mock file open is called with the appropriate arguments. + +Args: + mock_file_open (MagicMock): A mock for the `open` function. + mock_get_config (MagicMock): A mock for the `get_config` function, which is expected to return a mock + configuration file object. + +Returns: + None: This test function does not explicitly return anything. Its assertions + serve as the verification of its correctness. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_llm_config_empty() +test_get_llm_config_emptytests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_llm_config_empty +def tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty ( self, mock_file_open, mock_get_config) +Test the behavior of get_llm_config when called with an empty +configuration file. + +This function sets up a mock configuration file that exists but returns +no content. It then calls the `get_llm_config` function and asserts that +it returns an empty dictionary and that the file open method was called +exactly once with the correct arguments. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the built-in open function. + mock_get_config (MagicMock): A MagicMock object simulating the get_config function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_llm_config_exists() +test_get_llm_config_existstests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_llm_config_exists +def tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists ( self, mock_file_open, mock_get_config) +Test the get_llm_config function when the configuration file exists. + +This function sets up a mock configuration file that exists and returns +it when called. It then calls the get_llm_config function and asserts +that it returns the correct configuration dictionary. Additionally, it +checks that the mock_file_open function was called with the correct +arguments. + +Args: + mock_file_open (MagicMock): A mock for the open() function. + mock_get_config (MagicMock): A mock for the get_config() function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_llm_config_invalid_json() +test_get_llm_config_invalid_jsontests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_llm_config_invalid_json +def tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json ( self, mock_print, mock_file_open, mock_get_config) +Test function to verify the behavior of get_llm_config when reading an +invalid JSON file. + +It sets up a mock configuration file that exists but contains invalid +JSON. The function is expected to handle this gracefully by printing an +error message and returning an empty dictionary. + +Args: + mock_print (MagicMock): Mock for the print function. + mock_file_open (MagicMock): Mock for the open function. + mock_get_config (MagicMock): Mock for the get_config function, which returns the mock configuration + file. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_penify_config_existing_dir() +test_get_penify_config_existing_dirtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_penify_config_existing_dir +def tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir ( self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) +Test the get_penify_config function when the .penify config directory +exists. + +It should not create a new directory and assert that all mocked +functions were called correctly. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the open() function. + mock_makedirs (MagicMock): A MagicMock object simulating the os.makedirs() function. + mock_path (MagicMock): A MagicMock object simulating the Path class from pathlib module. + mock_git_folder (MagicMock): A MagicMock object simulating the git_folder_search() function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_penify_config_new_dir() +test_get_penify_config_new_dirtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_penify_config_new_dir +def tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir ( self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) +Test the behavior of get_penify_config when the .penify directory does +not exist. + +This function mocks various system calls to simulate a scenario where +the .penify directory is not present. It then asserts that the +appropriate actions are taken to create the directory and write an empty +JSON file. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the `open` function. + mock_makedirs (MagicMock): A MagicMock object simulating the `os.makedirs` function. + mock_path (MagicMock): A MagicMock object simulating the `Path` class from `pathlib`. + mock_git_folder (MagicMock): A MagicMock object simulating a git folder search function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_token_from_config() +test_get_token_from_configtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_token_from_config +def tests.test_config_commands.TestConfigCommands.test_get_token_from_config ( self, mock_file_open, mock_path, mock_getenv) +Test retrieving a token from the configuration. + +This function sets up mocks for environment variables and configuration +files, calls the `get_token` function, and asserts its behavior. It +verifies that when the environment variable is not found, the function +reads a token from a configuration file located in the user's home +directory. + +Args: + mock_file_open (MagicMock): A mock for the `open` function. + mock_path (MagicMock): A mock for the `pathlib.Path` class. + mock_getenv (MagicMock): A mock for the `os.getenv` function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_token_from_env() +test_get_token_from_envtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_token_from_env +def tests.test_config_commands.TestConfigCommands.test_get_token_from_env ( self, mock_file_open, mock_path, mock_getenv) +Test retrieving a token from the environment variable. + +This function tests the behavior of `get_token` when an environment +variable is set. It verifies that if the 'PENIFY_API_TOKEN' environment +variable exists, the function returns its value without attempting to +read a file. + +Args: + mock_file_open (MagicMock): A MagicMock object for simulating file operations. + mock_path (MagicMock): A MagicMock object for simulating path operations. + mock_getenv (MagicMock): A MagicMock object for simulating environment variable retrieval. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_get_token_not_found() +test_get_token_not_foundtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_get_token_not_found +def tests.test_config_commands.TestConfigCommands.test_get_token_not_found ( self, mock_file_open, mock_path, mock_getenv) +Test the get_token function when the API token environment variable is +not found. + +This function tests the scenario where the `PENIFY_API_TOKEN` +environment variable is not set. It mocks the environment variable to +return `None`, and verifies that the function returns `None`. The test +also checks that the environment variable is accessed once and that a +file open operation is attempted on a configuration file located in the +user's home directory. + +Args: + mock_file_open (MagicMock): Mock for the built-in `open` function. + mock_path (MagicMock): Mock for the `pathlib.Path` module. + mock_getenv (MagicMock): Mock for the `os.getenv` function. + +Returns: + None: The function does not return anything; it asserts conditions to verify + correctness. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_save_jira_config_success() +test_save_jira_config_successtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_save_jira_config_success +def tests.test_config_commands.TestConfigCommands.test_save_jira_config_success ( self, mock_print, mock_json_dump, mock_file_open, mock_path) +Test the save_jira_config function to ensure it saves JIRA configuration +successfully. + +This function sets up mocks for various dependencies and tests the +functionality of saving a JIRA configuration. It asserts that the +function returns `True`, the JSON dump is called with the correct +configuration, and the print statement contains the expected message. + +Args: + mock_print (MagicMock): Mock for the print function. + mock_json_dump (MagicMock): Mock for the json.dump function. + mock_file_open (MagicMock): Mock for the open function. + mock_path (MagicMock): Mock for the path module. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_save_llm_config_failure() +test_save_llm_config_failuretests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_save_llm_config_failure +def tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure ( self, mock_print, mock_file_open, mock_get_config) +Test function to verify that the save_llm_config function returns False +and prints an error message when it fails to save the LLM configuration +due to a permission error. + +It sets up a mock configuration file that exists and calls the +save_llm_config function with valid parameters. The function is expected +to return False and print "Error saving LLM configuration: Permission +denied" in case of a failure. + +Args: + self (TestLLMConfig): An instance of the test class. + mock_print (MagicMock): A MagicMock object representing the print function, which will be used + to assert that it was called with the expected error message. + mock_file_open (MagicMock): A MagicMock object representing the open function, which is not used in + this test but is included as a parameter for completeness. + mock_get_config (MagicMock): A MagicMock object representing the get_config function, which will be + used to return the mock configuration file. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_save_llm_config_success() +test_save_llm_config_successtests.test_config_commands.TestConfigCommands +tests.test_config_commands.TestConfigCommandstest_save_llm_config_success +def tests.test_config_commands.TestConfigCommands.test_save_llm_config_success ( self, mock_print, mock_json_dump, mock_file_open, mock_get_config) +Test the save_llm_config function successfully. + +This function tests that the save_llm_config function correctly saves an +LLM configuration and handles various mock objects and side effects. It +ensures that the function returns True upon successful execution, writes +the expected configuration to a file, and prints a confirmation message. + +Args: + mock_print (MagicMock): A mock object for the print function. + mock_json_dump (MagicMock): A mock object for json.dump. + mock_file_open (MagicMock): A mock object for file opening. + mock_get_config (MagicMock): A mock object to return a configuration file mock. + +Here is the call graph for this function: + + + + + + + + +
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py
+
diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 new file mode 100644 index 0000000..eb46690 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 @@ -0,0 +1 @@ +2db6cf58d997b43a776fb21752d4aa29 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg new file mode 100644 index 0000000..9daa237 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg @@ -0,0 +1,50 @@ + + + + + + +tests.test_config_commands.TestConfigCommands + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands + + + ++ test_get_penify_config +_existing_dir() ++ test_get_penify_config +_new_dir() ++ test_get_llm_config +_exists() ++ test_get_llm_config +_empty() ++ test_get_llm_config +_invalid_json() ++ test_get_jira_config +_exists() ++ test_save_llm_config +_success() ++ test_save_llm_config +_failure() ++ test_save_jira_config +_success() ++ test_get_token_from +_env() ++ test_get_token_from +_config() ++ test_get_token_not +_found() + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 new file mode 100644 index 0000000..9e0bad2 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.md5 @@ -0,0 +1 @@ +fe055e22847261fb4e8e965247fa63e4 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg new file mode 100644 index 0000000..c43c56a --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a2e8162082bcdd5652bb37bdb14cf453a_cgraph.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_existing_dir + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5 new file mode 100644 index 0000000..9cef76a --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.md5 @@ -0,0 +1 @@ +28bc7f826bf5c37f1e543c6a2217c011 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg new file mode 100644 index 0000000..c8128c0 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a3355f7d313bebaa71694387cf2bc5232_cgraph.svg @@ -0,0 +1,123 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_token_from_env + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2->Node4 + + + + + +Node6 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node6 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node6->Node5 + + + + + +Node6->Node6 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5 new file mode 100644 index 0000000..179211c --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.md5 @@ -0,0 +1 @@ +66249d926cb6fd81bdf9ba46dc56d466 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg new file mode 100644 index 0000000..3eded28 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a33d4760eee3b67e1cde3aed755ebb948_cgraph.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_new_dir + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5 new file mode 100644 index 0000000..494b2db --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.md5 @@ -0,0 +1 @@ +fe3072609a9a0bf3d14e3143add0e6da \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg new file mode 100644 index 0000000..64b8b29 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a400ca5d9fcdc159714e8df54920f9436_cgraph.svg @@ -0,0 +1,123 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_token_not_found + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2->Node4 + + + + + +Node6 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node6 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node6->Node5 + + + + + +Node6->Node6 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5 new file mode 100644 index 0000000..bdddb02 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.md5 @@ -0,0 +1 @@ +6604e171883373f917ba1e50c7dcf2a8 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg new file mode 100644 index 0000000..d06ccaf --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a473984d31452b56acd6ce4011a1248bd_cgraph.svg @@ -0,0 +1,101 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_invalid_json + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + +Node4->Node4 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5 new file mode 100644 index 0000000..49db9b2 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.md5 @@ -0,0 +1 @@ +18a45266c6274df8d06c6771aea4d3ce \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg new file mode 100644 index 0000000..ac12bca --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a6c0207be563c3de59a6d16277805114c_cgraph.svg @@ -0,0 +1,123 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_token_from_config + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2->Node4 + + + + + +Node6 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node6 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node6->Node5 + + + + + +Node6->Node6 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5 new file mode 100644 index 0000000..d5a551d --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.md5 @@ -0,0 +1 @@ +2efae0628f3580e167ff4e2e9744ff76 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg new file mode 100644 index 0000000..c7427eb --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_a73a264dfb21e16003e095b79f6eab2ac_cgraph.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_failure + + + + + +Node2 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 new file mode 100644 index 0000000..b6d0832 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.md5 @@ -0,0 +1 @@ +ccb36b28b36810b7debb14198aa8c840 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg new file mode 100644 index 0000000..15e3aaa --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_abd12f028b89aa9cd1152c0b9ece5d3cd_cgraph.svg @@ -0,0 +1,101 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_empty + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + +Node4->Node4 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5 new file mode 100644 index 0000000..616400e --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.md5 @@ -0,0 +1 @@ +2dda560e911927ca62424d428f826e98 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg new file mode 100644 index 0000000..094e23c --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_acd8df8219441b9e9871b903a681400d9_cgraph.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_save_llm_config_success + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_success + + + + + +Node2 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 new file mode 100644 index 0000000..5292fed --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.md5 @@ -0,0 +1 @@ +8a521fb6ddaca64c6678d226bec595a0 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg new file mode 100644 index 0000000..6141687 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_adf9f2233a3f4cc5725b9d4f05758b167_cgraph.svg @@ -0,0 +1,101 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_exists + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + +Node4->Node4 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5 new file mode 100644 index 0000000..904ab8d --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.md5 @@ -0,0 +1 @@ +6fbf377ddd24e2b0afa956a95f55e6c5 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg new file mode 100644 index 0000000..57a064c --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_aee37b97432821d19758c6325d4c74bcf_cgraph.svg @@ -0,0 +1,101 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_get_jira_config_exists + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + +Node4->Node4 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5 b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5 new file mode 100644 index 0000000..68d6c1c --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.md5 @@ -0,0 +1 @@ +2e054bb79c0b6f45c4788678aac6e514 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg new file mode 100644 index 0000000..8bd749b --- /dev/null +++ b/docs345/docbook/classtests_1_1test__config__commands_1_1TestConfigCommands_af8d62310da2d768e21770f8f01ff5375_cgraph.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands.test_save_jira_config_success + + + +Node1 + + +tests.test_config_commands. +TestConfigCommands.test +_save_jira_config_success + + + + + +Node2 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig.xml b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig.xml new file mode 100644 index 0000000..3c8f208 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig.xml @@ -0,0 +1,85 @@ + +
+tests.test_web_config.TestWebConfig Class Reference +tests.test_web_config.TestWebConfig +Collaboration diagram for tests.test_web_config.TestWebConfig: + + + + + + + + + + Public Member Functions + + def test_config_llm_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser) + + def test_config_jira_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser) + + + +
+Member Function Documentation +
+ test_config_jira_web_server_setup() +test_config_jira_web_server_setuptests.test_web_config.TestWebConfig +tests.test_web_config.TestWebConfigtest_config_jira_web_server_setup +def tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup ( self, mock_resource_filename, mock_server, mock_webbrowser) +Test the configuration and setup of a JIRA web server. + +This function tests the entire process of setting up a JIRA web server, +including mocking necessary resources, configuring the server to shut +down after handling one request, and verifying that the web browser is +opened with the correct URL. The function uses several mocks to simulate +external dependencies such as resource files, servers, and web browsers. + +Args: + mock_resource_filename (MagicMock): A MagicMock object for simulating the `resource_filename` function. + mock_server (MagicMock): A MagicMock object for simulating the server setup. + mock_webbrowser (MagicMock): A MagicMock object for simulating the web browser opening. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_config_llm_web_server_setup() +test_config_llm_web_server_setuptests.test_web_config.TestWebConfig +tests.test_web_config.TestWebConfigtest_config_llm_web_server_setup +def tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup ( self, mock_resource_filename, mock_server, mock_webbrowser) +Set up and test the web server configuration for an LLM (Large Language +Model) web interface. + +This function configures a mock web server for testing purposes, +including setting up resource filenames, mocking server behavior, and +verifying that the web browser is opened and the server starts +correctly. The function uses various mocks to simulate external +dependencies such as `resource_filename` and `server`. + +Args: + mock_resource_filename (MagicMock): A MagicMock object simulating the `resource_filename` function. + mock_server (MagicMock): A MagicMock object simulating the context manager for the web server. + mock_webbrowser (MagicMock): A MagicMock object simulating the `webbrowser` module. + +Here is the call graph for this function: + + + + + + + + +
+ +The documentation for this class was generated from the following file: +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py
+
diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 new file mode 100644 index 0000000..f0a528b --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 @@ -0,0 +1 @@ +ab8cbd57a4ebb302c58c19a4efbc1c6e \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg new file mode 100644 index 0000000..acbac22 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg @@ -0,0 +1,30 @@ + + + + + + +tests.test_web_config.TestWebConfig + + + +Node1 + + +tests.test_web_config.Test +WebConfig + + + ++ test_config_llm_web +_server_setup() ++ test_config_jira_web +_server_setup() + + + + + diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5 b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5 new file mode 100644 index 0000000..064b512 --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.md5 @@ -0,0 +1 @@ +40be6a2b68a00531af40fd3546a6f158 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg new file mode 100644 index 0000000..bf31fdb --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_a06e600222e426b003850509cb1d3190a_cgraph.svg @@ -0,0 +1,139 @@ + + + + + + +tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup + + + +Node1 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2->Node3 + + + + + +Node7 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2->Node7 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node3->Node4 + + + + + +Node5 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node3->Node5 + + + + + +Node5->Node5 + + + + + +Node6 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node5->Node6 + + + + + +Node6->Node6 + + + + + +Node7->Node6 + + + + + diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5 b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5 new file mode 100644 index 0000000..2632d9a --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.md5 @@ -0,0 +1 @@ +5ca25c9e4be6eb96370b0328e2a5e679 \ No newline at end of file diff --git a/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg new file mode 100644 index 0000000..1f3a16f --- /dev/null +++ b/docs345/docbook/classtests_1_1test__web__config_1_1TestWebConfig_afc6440352201d207ea8b4d26f8ccfa35_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup + + + +Node1 + + +tests.test_web_config.Test +WebConfig.test_config_llm +_web_server_setup + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_llm_web + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/commit-commands_8md.xml b/docs345/docbook/commit-commands_8md.xml new file mode 100644 index 0000000..e646ddb --- /dev/null +++ b/docs345/docbook/commit-commands_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md +
diff --git a/docs345/docbook/commit__analyzer_8py.xml b/docs345/docbook/commit__analyzer_8py.xml new file mode 100644 index 0000000..441f172 --- /dev/null +++ b/docs345/docbook/commit__analyzer_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py + + Classes + + class penify_hook.commit_analyzer.CommitDocGenHook + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.commit_analyzer + + + +
diff --git a/docs345/docbook/commit__commands_8py.xml b/docs345/docbook/commit__commands_8py.xml new file mode 100644 index 0000000..e5ce1b8 --- /dev/null +++ b/docs345/docbook/commit__commands_8py.xml @@ -0,0 +1,27 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + namespace penify_hook.commands.commit_commands + + + + + Functions + + def penify_hook.commands.commit_commands.commit_code (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None) + + def penify_hook.commands.commit_commands.setup_commit_parser (parser) + + def penify_hook.commands.commit_commands.handle_commit (args) + + + +
diff --git a/docs345/docbook/config-commands_8md.xml b/docs345/docbook/config-commands_8md.xml new file mode 100644 index 0000000..0aeb920 --- /dev/null +++ b/docs345/docbook/config-commands_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md +
diff --git a/docs345/docbook/config__command_8py.xml b/docs345/docbook/config__command_8py.xml new file mode 100644 index 0000000..8196895 --- /dev/null +++ b/docs345/docbook/config__command_8py.xml @@ -0,0 +1,23 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.config_command + + + + + Functions + + def penify_hook.config_command.setup_config_parser (parent_parser) + + def penify_hook.config_command.handle_config (args) + + + +
diff --git a/docs345/docbook/config__commands_8py.xml b/docs345/docbook/config__commands_8py.xml new file mode 100644 index 0000000..e587f56 --- /dev/null +++ b/docs345/docbook/config__commands_8py.xml @@ -0,0 +1,50 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + namespace penify_hook.commands.config_commands + + + + + Functions + + None penify_hook.commands.config_commands.load_env_files () + + Path penify_hook.commands.config_commands.get_penify_config () + + Any penify_hook.commands.config_commands.get_env_var_or_default (str env_var, Any default=None) + + def penify_hook.commands.config_commands.save_llm_config (model, api_base, api_key) + + def penify_hook.commands.config_commands.save_jira_config (url, username, api_token) + + Dict[str, str] penify_hook.commands.config_commands.get_llm_config () + + Dict[str, str] penify_hook.commands.config_commands.get_jira_config () + + def penify_hook.commands.config_commands.config_llm_web () + + def penify_hook.commands.config_commands.config_jira_web () + + Optional[str] penify_hook.commands.config_commands.get_token () + + + + + Variables + + bool penify_hook.commands.config_commands.DOTENV_AVAILABLE = True + + penify_hook.commands.config_commands.path + + + +
diff --git a/docs345/docbook/conftest_8py.xml b/docs345/docbook/conftest_8py.xml new file mode 100644 index 0000000..968b1e8 --- /dev/null +++ b/docs345/docbook/conftest_8py.xml @@ -0,0 +1,14 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py + + Namespaces + + namespace tests + + namespace tests.conftest + + + +
diff --git a/docs345/docbook/constants_8py.xml b/docs345/docbook/constants_8py.xml new file mode 100644 index 0000000..795ae17 --- /dev/null +++ b/docs345/docbook/constants_8py.xml @@ -0,0 +1,23 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.constants + + + + + Variables + + string penify_hook.constants.API_URL = 'http://localhost:8000/api' + + string penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login" + + + +
diff --git a/docs345/docbook/detailed-usage_8md.xml b/docs345/docbook/detailed-usage_8md.xml new file mode 100644 index 0000000..e16d6f2 --- /dev/null +++ b/docs345/docbook/detailed-usage_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md +
diff --git a/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c.xml b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c.xml new file mode 100644 index 0000000..b7e4b62 --- /dev/null +++ b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c.xml @@ -0,0 +1,31 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference +Directory dependency graph for tests: + + + + + + + + + + Files + + file __init__.py + + file conftest.py + + file test_commit_commands.py + + file test_config_commands.py + + file test_doc_commands.py + + file test_web_config.py + + + +
diff --git a/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 new file mode 100644 index 0000000..afb9081 --- /dev/null +++ b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 @@ -0,0 +1 @@ +fdbdbdbe253c547a3b41063e5036418d \ No newline at end of file diff --git a/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg new file mode 100644 index 0000000..53f13f5 --- /dev/null +++ b/docs345/docbook/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg @@ -0,0 +1,30 @@ + + + + + + +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_063e2d5fe58a131099a7fe4200cca78c + + +tests + + + + + diff --git a/docs345/docbook/dir_1648a057408aae8db85b8e3797335623.xml b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623.xml new file mode 100644 index 0000000..105dd5c --- /dev/null +++ b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623.xml @@ -0,0 +1,14 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference +Directory dependency graph for docs: + + + + + + + + +
diff --git a/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.md5 b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.md5 new file mode 100644 index 0000000..2214ec5 --- /dev/null +++ b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.md5 @@ -0,0 +1 @@ +103c12b563793db32ed50b111f45bada \ No newline at end of file diff --git a/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.svg b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.svg new file mode 100644 index 0000000..b859cd6 --- /dev/null +++ b/docs345/docbook/dir_1648a057408aae8db85b8e3797335623_dep.svg @@ -0,0 +1,30 @@ + + + + + + +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_1648a057408aae8db85b8e3797335623 + + +docs + + + + + diff --git a/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23.xml b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23.xml new file mode 100644 index 0000000..4dfd363 --- /dev/null +++ b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23.xml @@ -0,0 +1,31 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference +Directory dependency graph for commands: + + + + + + + + + + Files + + file __init__.py + + file auth_commands.py + + file commit_commands.py + + file config_commands.py + + file doc_commands.py + + file hook_commands.py + + + +
diff --git a/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 new file mode 100644 index 0000000..597f466 --- /dev/null +++ b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 @@ -0,0 +1 @@ +1c8b9302d49050442030c2a1fe004137 \ No newline at end of file diff --git a/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg new file mode 100644 index 0000000..a17413c --- /dev/null +++ b/docs345/docbook/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg @@ -0,0 +1,30 @@ + + + + + + +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + +penify_hook + + + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs345/docbook/dir_b3b22d2ab7966b65f6b237e3231b41be.xml b/docs345/docbook/dir_b3b22d2ab7966b65f6b237e3231b41be.xml new file mode 100644 index 0000000..f7a6158 --- /dev/null +++ b/docs345/docbook/dir_b3b22d2ab7966b65f6b237e3231b41be.xml @@ -0,0 +1,23 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference + + Directories + + directory docs + + directory penify_hook + + directory tests + + + + + Files + + file setup.py + + + +
diff --git a/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml new file mode 100644 index 0000000..320ced6 --- /dev/null +++ b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml @@ -0,0 +1,56 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference +Directory dependency graph for penify_hook: + + + + + + + + + + Directories + + directory commands + + + + + Files + + file __init__.py + + file api_client.py + + file base_analyzer.py + + file commit_analyzer.py + + file config_command.py + + file constants.py + + file file_analyzer.py + + file folder_analyzer.py + + file git_analyzer.py + + file jira_client.py + + file llm_client.py + + file login_command.py + + file main.py + + file ui_utils.py + + file utils.py + + + +
diff --git a/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 new file mode 100644 index 0000000..577134d --- /dev/null +++ b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 @@ -0,0 +1 @@ +81055f3442546e3f091686cb9eef1bc5 \ No newline at end of file diff --git a/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg new file mode 100644 index 0000000..5b913db --- /dev/null +++ b/docs345/docbook/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg @@ -0,0 +1,42 @@ + + + + + + +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + + + + + + +dir_f88c3381c1861b3f7ca1f3d63cf244b5 +penify_hook + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs345/docbook/doc__commands_8md.xml b/docs345/docbook/doc__commands_8md.xml new file mode 100644 index 0000000..02bf56a --- /dev/null +++ b/docs345/docbook/doc__commands_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md +
diff --git a/docs345/docbook/doc__commands_8py.xml b/docs345/docbook/doc__commands_8py.xml new file mode 100644 index 0000000..63e7889 --- /dev/null +++ b/docs345/docbook/doc__commands_8py.xml @@ -0,0 +1,34 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + namespace penify_hook.commands.doc_commands + + + + + Functions + + def penify_hook.commands.doc_commands.generate_doc (api_url, token, location=None) + + def penify_hook.commands.doc_commands.setup_docgen_parser (parser) + + def penify_hook.commands.doc_commands.handle_docgen (args) + + + + + Variables + + string penify_hook.commands.doc_commands.docgen_description + + + +
diff --git a/docs345/docbook/example-workflows_8md.xml b/docs345/docbook/example-workflows_8md.xml new file mode 100644 index 0000000..c2047f8 --- /dev/null +++ b/docs345/docbook/example-workflows_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md +
diff --git a/docs345/docbook/file__analyzer_8py.xml b/docs345/docbook/file__analyzer_8py.xml new file mode 100644 index 0000000..74b3fef --- /dev/null +++ b/docs345/docbook/file__analyzer_8py.xml @@ -0,0 +1,28 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py + + Classes + + class penify_hook.file_analyzer.FileAnalyzerGenHook + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.file_analyzer + + + + + Variables + + penify_hook.file_analyzer.logger = logging.getLogger(__name__) + + + +
diff --git a/docs345/docbook/folder__analyzer_8py.xml b/docs345/docbook/folder__analyzer_8py.xml new file mode 100644 index 0000000..1568b2c --- /dev/null +++ b/docs345/docbook/folder__analyzer_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py + + Classes + + class penify_hook.folder_analyzer.FolderAnalyzerGenHook + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.folder_analyzer + + + +
diff --git a/docs345/docbook/git__analyzer_8py.xml b/docs345/docbook/git__analyzer_8py.xml new file mode 100644 index 0000000..c8d9358 --- /dev/null +++ b/docs345/docbook/git__analyzer_8py.xml @@ -0,0 +1,28 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py + + Classes + + class penify_hook.git_analyzer.GitDocGenHook + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.git_analyzer + + + + + Variables + + penify_hook.git_analyzer.logger = logging.getLogger(__name__) + + + +
diff --git a/docs345/docbook/hook__commands_8py.xml b/docs345/docbook/hook__commands_8py.xml new file mode 100644 index 0000000..a8474ab --- /dev/null +++ b/docs345/docbook/hook__commands_8py.xml @@ -0,0 +1,34 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + namespace penify_hook.commands.hook_commands + + + + + Functions + + def penify_hook.commands.hook_commands.install_git_hook (location, token) + + def penify_hook.commands.hook_commands.uninstall_git_hook (location) + + + + + Variables + + string penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit" + + string penify_hook.commands.hook_commands.HOOK_TEMPLATE + + + +
diff --git a/docs345/docbook/index.xml b/docs345/docbook/index.xml new file mode 100644 index 0000000..7678958 --- /dev/null +++ b/docs345/docbook/index.xml @@ -0,0 +1,116 @@ + + + + penify-cli + + + Penify CLI - Commit Commands + + + + Penify CLI - Configuration Commands + + + + Penify CLI - Detailed Usage Guide + + + + Penify CLI - Documentation Generation Commands + + + + Penify CLI Example Workflows + + + + Penify CLI Tool + + + + Namespace Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Class Documentation + + + + + + + + + + + + + + + + File Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/docbook/jira__client_8py.xml b/docs345/docbook/jira__client_8py.xml new file mode 100644 index 0000000..5e567c3 --- /dev/null +++ b/docs345/docbook/jira__client_8py.xml @@ -0,0 +1,28 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py + + Classes + + class penify_hook.jira_client.JiraClient + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.jira_client + + + + + Variables + + bool penify_hook.jira_client.JIRA_AVAILABLE = True + + + +
diff --git a/docs345/docbook/llm__client_8py.xml b/docs345/docbook/llm__client_8py.xml new file mode 100644 index 0000000..4462405 --- /dev/null +++ b/docs345/docbook/llm__client_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py + + Classes + + class penify_hook.llm_client.LLMClient + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.llm_client + + + +
diff --git a/docs345/docbook/login__command_8py.xml b/docs345/docbook/login__command_8py.xml new file mode 100644 index 0000000..43b6e89 --- /dev/null +++ b/docs345/docbook/login__command_8py.xml @@ -0,0 +1,23 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.login_command + + + + + Functions + + def penify_hook.login_command.setup_login_parser (parser) + + def penify_hook.login_command.handle_login (args) + + + +
diff --git a/docs345/docbook/main_8py.xml b/docs345/docbook/main_8py.xml new file mode 100644 index 0000000..9a1179a --- /dev/null +++ b/docs345/docbook/main_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.main + + + + + Functions + + def penify_hook.main.main () + + + +
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml new file mode 100644 index 0000000..d56dbcd --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml @@ -0,0 +1,200 @@ + +
+ + + +A CLI tool to generate smart commit messages, code documentation, and more. +
+Features + + + +Automatically generate documentation for your code + +Support for multiple programming languages + +Git hook integration for automatic documentation on commits + +Folder and file analysis + + +
+
+Installation + +Install from PyPI: + +pip install penify + +
+
+Usage + +Penify CLI provides several subcommands for different functionalities, organized into basic commands (no login required) and advanced commands (login required). +
+
+Basic Commands (No login required) +
+Commit + +Generate smart commit messages using local LLM: + +penify commit [-m "Optional message"] [-e] [-d] + + +Options: + +-m, --message: Optional custom commit message + +-e, --terminal: Open editor to modify commit message before committing + +-d, --description: Generate commit message with both title and description (without this flag, only title is generated) + + +
+
+Config + +Configure local LLM and JIRA settings: + +# Configure LLM settings +penify config llm --model MODEL_NAME [--api-base API_URL] [--api-key API_KEY] + +# Configure LLM settings through web interface +penify config llm-web + +# Configure JIRA settings +penify config jira --url JIRA_URL --username USERNAME --api-token TOKEN [--verify] + +# Configure JIRA settings through web interface +penify config jira-web + +
+
+
+Advanced Commands (Login required) +
+Login + +To log in and obtain an API token: + +penify login + + +This command will open a browser window for authentication. After successful login, the API key will be saved locally for future use. +
+
+Documentation Generation + +Generate documentation for Git diff, files or folders: + +# Generate documentation for latest Git commit diff +penify docgen + +# Generate documentation for specific file or folder +penify docgen -l /path/to/file/or/folder + + +Options: + +-l, --location: Path to specific file or folder for documentation generation (defaults to current directory) + + +
+
+Git Hook Management + +Install or uninstall Git post-commit hooks: + +# Install Git hook +penify docgen install-hook [-l /path/to/repo] + +# Uninstall Git hook +penify docgen uninstall-hook [-l /path/to/repo] + + +Options: + +-l, --location: Path to the Git repository (defaults to current directory) + + +
+
+
+Authentication + +Penify CLI uses an API token for authentication with advanced features. + +If no token is available and you try to access an advanced feature, you'll be prompted to log in. +
+
+Local LLM Configuration + +For commit message generation, Penify can use a local LLM. Configure it using: + +penify config llm --model MODEL_NAME --api-base API_URL --api-key API_KEY + + +Common configurations: + +OpenAI: --model gpt-3.5-turbo --api-base https://api.openai.com/v1 --api-key YOUR_KEY + +Anthropic: --model claude-2 --api-base https://api.anthropic.com --api-key YOUR_KEY + + +
+
+JIRA Integration + +Configure JIRA integration to enhance commit messages with issue details: + +penify config jira --url https://your-domain.atlassian.net --username your-email@example.com --api-token YOUR_API_TOKEN + +
+
+Development + +To set up the development environment: + + + +Clone the repository: git clone https://github.com/SingularityX-ai/penify-cli.git + + +Install the package in editable mode: pip install -e . + + + +
+Running Tests + +pytest + +
+
+
+License + +This project is licensed under the MIT License. +
+
+Author + +Suman Saurabh (ss.sumansaurabh92@gmail.com) +
+
+Contributing + +Contributions are welcome! Please feel free to submit a Pull Request. +
+
+Issues + +If you encounter any problems or have suggestions, please file an issue on the GitHub repository. +
+
+Support + +For automated API Documentation, Architecture Documentation, Code Documentation, Pull Request Documentation, or if you need a demo, please join our Discord support channel. +
+
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml new file mode 100644 index 0000000..17b8b89 --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml @@ -0,0 +1,215 @@ + +
+ +The commit command allows you to generate smart, AI-powered commit messages for your Git changes. This document explains all available options and combinations. +
+Basic Usage + +penify commit + + +By default, this command: + +Analyzes your staged Git changes + +Generates a concise commit title only + +Uses local LLM if configured, or falls back to Penify API + + +
+
+Command Options +
+<tt>-m, --message</tt> + +Provide context for the commit message generation: + +penify commit -m "Fix login flow" + + +This hint helps the AI understand your intention and improves the quality of the generated message. +
+
+<tt>-e, --terminal</tt> + +Open an editor to review and edit the generated commit message before committing: + +penify commit -e + + +This opens your default Git editor with the generated message for review. +
+
+<tt>-d, --description</tt> + +Generate a detailed commit message with both title and description: + +penify commit -d + + +Without this flag, only the commit title is generated. +
+
+
+Option Combinations + +You can combine these options for different workflows: +
+Generate Title Only with Context + +penify commit -m "Update login UI" + +
+
+Generate Title and Description with Context + +penify commit -m "Update login UI" -d + +
+
+Generate and Edit Full Commit Message + +penify commit -d -e + +
+
+Generate, Edit, and Provide Context + +penify commit -m "Refactor authentication" -d -e + +
+
+
+LLM and JIRA Integration +
+Using Local LLM + +If you've configured a local LLM using penify config llm, the commit command will automatically use it for message generation. + +Benefits: + +Privacy: your code changes don't leave your machine + +Speed: no network latency + +Works offline + + +
+
+JIRA Enhancement + +If you've configured JIRA integration using penify config jira, the commit command will: + + + +Detect JIRA issue references in your changes + +Fetch issue details from your JIRA instance + +Include issue information in the commit message + +Format the commit message according to JIRA's smart commit format + + + +Example output: PROJ-123: Fix authentication bug in login flow + +- Updated OAuth token validation +- Fixed session timeout handling +- Added unit tests for edge cases + +[PROJ-123] + +
+
+
+Configuration Requirements + +For the commit command to work: + + + +You must have configured either: + +Local LLM via penify config llm, OR + +Logged in via penify login + + + +For JIRA enhancement (optional): + +Configure JIRA via penify config jira + + + + +
+
+Examples +
+Basic Commit with Default Settings + +# Stage your changes +git add . + +# Generate commit message +penify commit + +# Commit with the generated message +git commit -m "Generated message here" + +
+
+Full Workflow with All Features + +# Stage your changes +git add . + +# Generate detailed commit message with JIRA integration, +# provide context, and open editor for review +penify commit -m "Fix login issue" -d -e + +# The commit is automatically completed after you save and exit the editor + +
+
+
+Troubleshooting +
+Common Issues + + + +**"No LLM model or API token provided"** + +Run penify config llm to configure a local LLM, or + +Run penify login to authenticate with Penify + + + +**"Failed to connect to JIRA"** + +Check your JIRA configuration with cat ~/.penify + +Verify your network connection + +Ensure your JIRA credentials are valid + + + +**"Error initializing LLM client"** + +Verify your LLM configuration settings + +Ensure the LLM API is accessible + + + + +
+
+
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml new file mode 100644 index 0000000..802b3db --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml @@ -0,0 +1,273 @@ + +
+ +The config command allows you to set up and manage configuration settings for Penify CLI. This document explains all available configuration options and how to use them. +
+Configuration Overview + +Penify CLI stores configuration in a JSON file at ~/.penify/config.json. The configuration includes: + + + +LLM (Large Language Model) settings for local commit message generation + +JIRA integration settings for enhanced commit messages + +API tokens and other credentials + + +
+
+Basic Usage + +# Configure LLM settings +penify config llm + +# Configure JIRA integration +penify config jira + +
+
+LLM Configuration +
+Web Interface + +Running penify config llm opens a web interface in your browser where you can configure: + + + +Model: The LLM model to use (e.g., gpt-3.5-turbo) + +API Base URL: The endpoint URL for your LLM API (e.g., https://api.openai.com/v1) + +API Key: Your authentication key for the LLM API + + +
+
+Supported LLMs + +Penify CLI supports various LLM providers: +
+OpenAI + + + +Model: gpt-3.5-turbo or gpt-4 + +API Base: https://api.openai.com/v1 + +API Key: Your OpenAI API key + + +
+
+Anthropic + + + +Model: claude-instant-1 or claude-2 + +API Base: https://api.anthropic.com/v1 + +API Key: Your Anthropic API key + + +
+
+Ollama (Local) + + + +Model: llama2 or any model you have installed + +API Base: http://localhost:11434 + +API Key: (leave blank) + + +
+
+Azure OpenAI + + + +Model: Your deployed model name + +API Base: Your Azure endpoint + +API Key: Your Azure API key + + +
+
+
+Configuration File Structure + +After configuration, your ~/.penify/config.json will contain: + +{ + "llm": { + "model": "gpt-3.5-turbo", + "api_base": "https://api.openai.com/v1", + "api_key": "sk-..." + } +} + +
+
+
+JIRA Configuration +
+Web Interface + +Running penify config jira opens a web interface where you can configure: + + + +JIRA URL: Your JIRA instance URL (e.g., https://yourcompany.atlassian.net) + +Username: Your JIRA username (typically your email) + +API Token: Your JIRA API token + + +
+
+Creating a JIRA API Token + + + +Log in to https://id.atlassian.com/manage-profile/security/api-tokens + +Click "Create API token" + +Give it a name (e.g., "Penify CLI") + +Copy the generated token and paste it into the configuration + + +
+
+Configuration File Structure + +After configuration, your ~/.penify/config.json will contain: + +{ + "jira": { + "url": "https://yourcompany.atlassian.net", + "username": "your.email@example.com", + "api_token": "your-jira-api-token" + } +} + +
+
+
+Configuration Locations + +Penify CLI looks for configuration in multiple locations: + + + +Project-specific: .penify/config.json in the Git repository root + +User-specific: ~/.penify/config.json in your home directory + + + +The project-specific configuration takes precedence if both exist. +
+
+Environment Variables + +You can override configuration settings using environment variables: + + + +PENIFY_API_TOKEN: Override the stored API token + +PENIFY_LLM_MODEL: Override the configured LLM model + +PENIFY_LLM_API_BASE: Override the configured LLM API base URL + +PENIFY_LLM_API_KEY: Override the configured LLM API key + +PENIFY_JIRA_URL: Override the configured JIRA URL + +PENIFY_JIRA_USER: Override the configured JIRA username + +PENIFY_JIRA_TOKEN: Override the configured JIRA API token + + + +Example: export PENIFY_LLM_MODEL="gpt-4" +penify commit + +
+
+Command-Line Configuration + +For advanced users or scripting, you can directly edit the configuration file: + +# View current configuration +cat ~/.penify/config.json + +# Edit configuration with your preferred editor +nano ~/.penify/config.json + +
+
+Sharing Configuration + +You can share configuration between machines by copying the .penify/config.json file. However, be cautious with API keys and credentials. + +For team settings, consider: + +Using a project-specific .penify/config.json with shared settings + +Excluding API keys from shared configuration + +Using environment variables for sensitive credentials + + +
+
+Troubleshooting +
+Common Issues + + + +**"Error reading configuration file"** + +Check if the file exists: ls -la ~/.penify + +Ensure it contains valid JSON: cat ~/.penify/config.json + + + +**"Failed to connect to LLM API"** + +Verify API base URL and API key + +Check network connectivity to the API endpoint + +Ensure your account has access to the specified model + + + +**"Failed to connect to JIRA"** + +Check JIRA URL format (should include https://) + +Verify username and API token + +Ensure your JIRA account has API access permissions + + + + +
+
+
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml new file mode 100644 index 0000000..dca0026 --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml @@ -0,0 +1,261 @@ + +
+ +This document provides in-depth information about all features and capabilities of the Penify CLI tool. +
+Table of Contents + + + +Penify CLI - Detailed Usage Guide + +Table of Contents + +Authentication + +Login Process + +API Token Storage + +Token Precedence + + + +Command Overview + +Commit Message Generation + +Code Documentation Generation + +Use Cases + +Authentication Requirement + + + +Configuration Settings + +Git Hooks + +Post-Commit Hook + +Custom Hook Location + + + +Advanced Use Cases + +CI/CD Integration + +Remote Repository Documentation + + + +Troubleshooting + +Common Issues + +Logs + +Support + + + + + + +
+
+Authentication +
+Login Process + +When you run penify login, the tool: + + + +Opens your default web browser + +Redirects you to Penify's login page + +Captures the authentication token after successful login + +Saves the token in ~/.penify file + + +
+
+API Token Storage + +API tokens are stored in your home directory in the .penify file. This JSON file contains: + +{ + "api_keys": "your-api-token", + "llm": { "model": "...", "api_base": "...", "api_key": "..." }, + "jira": { "url": "...", "username": "...", "api_token": "..." } +} + +
+
+Token Precedence + + + +Environment variable PENIFY_API_TOKEN (highest priority) + +Token in ~/.penify file + + +
+
+
+Command Overview + +penify +├── commit Generate smart commit messages +├── config Configure local LLM and JIRA +│ ├── llm Configure local LLM settings +│ └── jira Configure JIRA integration +├── login Log in to Penify account +└── docgen Generate code documentation + ├── install-hook Install Git post-commit hook + └── uninstall-hook Remove Git post-commit hook + +
+
+Commit Message Generation + +The commit command analyzes your staged changes and generates meaningful commit messages. It can: + + + +Use a local LLM if configured + +Enhance messages with JIRA issue details + +Provide both title and description + + + +For specific options and examples, see docs/commit-commands.md. +
+
+Code Documentation Generation + +The docgen command generates documentation for your code: +
+Use Cases + + + +Current Git Diff: Default behavior, documents only changed files + +Specific File: Pass a file path with -l path/to/file.py + +Entire Folder: Pass a folder path with -l path/to/folder + + +
+
+Authentication Requirement + +This feature requires authentication with a Penify account. Run penify login before using documentation features. +
+
+
+Configuration Settings + +Configure local settings using the config command: + + + +LLM Settings: Configure a local LLM for commit message generation + +JIRA Settings: Set up JIRA integration for enhanced commit messages + + + +For detailed configuration options, see docs/config-commands.md. +
+
+Git Hooks + +Penify can install Git hooks to automate documentation generation: +
+Post-Commit Hook + + + +Install: penify docgen install-hook + +What it does: Automatically generates documentation for changed files after each commit + +Uninstall: penify docgen uninstall-hook + + +
+
+Custom Hook Location + +You can specify a custom location for Git hooks: + +penify docgen install-hook -l /path/to/git/repo + +
+
+
+Advanced Use Cases +
+CI/CD Integration + +For CI/CD pipelines: + + + +Set PENIFY_API_TOKEN as an environment variable + +Run commands without requiring interactive login + + +
+
+Remote Repository Documentation + +Generate documentation for an entire repository: + +git clone https://github.com/user/repo +cd repo +penify docgen -l . + +
+
+
+Troubleshooting +
+Common Issues + + + +API Key Errors: Ensure you've run penify login or set PENIFY_API_TOKEN + +LLM Configuration: Check your LLM settings with cat ~/.penify + +JIRA Integration: Verify JIRA credentials in your configuration + + +
+
+Logs + +For more detailed logs, you can set the environment variable: + +export PENIFY_DEBUG=1 + +
+
+Support + +For additional help, visit https://docs.penify.dev/ or contact support@penify.dev +
+
+
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml new file mode 100644 index 0000000..a3547da --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml @@ -0,0 +1,402 @@ + +
+ +This document provides a detailed guide to all permutations and combinations of the docgen command, including extensive information about Git hook commands for automating documentation generation. +
+Table of Contents + + + +Basic Usage + +Command Options + +Option Combinations + +Git Hook Commands + +Hook Installation + +Hook Customization + +Hook Uninstallation + + + +Advanced Use Cases + +Troubleshooting + + +
+
+Basic Usage + +penify docgen + + +By default, this command: + +Analyzes the current Git diff (changes since last commit) + +Generates documentation for changed files only + +Requires authentication via penify login + + +
+
+Command Options +
+<tt>-l, --location</tt> + +Specify a target for documentation generation: + +# Generate documentation for a specific file +penify docgen -l path/to/file.py + +# Generate documentation for a specific folder +penify docgen -l path/to/folder + + +Without this flag, Penify analyzes only Git-tracked modified files. +
+
+Subcommands +
+<tt>install-hook</tt> + +Install a Git post-commit hook to automatically generate documentation: + +penify docgen install-hook + +
+
+<tt>uninstall-hook</tt> + +Remove the Git post-commit hook: + +penify docgen uninstall-hook + +
+
+
+
+Option Combinations +
+Generate Documentation for Current Git Diff + +# Basic usage - current Git diff +penify docgen + +
+
+Generate Documentation for a Specific File + +# Single file documentation +penify docgen -l src/main.py + +
+
+Generate Documentation for a Folder + +# Folder documentation +penify docgen -l src/models/ + +
+
+Install Hook in Current Repository + +# Install hook in current Git repository +penify docgen install-hook + +
+
+Install Hook in Specific Repository + +# Install hook in a specific Git repository +penify docgen install-hook -l /path/to/repo + +
+
+Uninstall Hook from Current Repository + +# Uninstall hook from current Git repository +penify docgen uninstall-hook + +
+
+Uninstall Hook from Specific Repository + +# Uninstall hook from a specific Git repository +penify docgen uninstall-hook -l /path/to/repo + +
+
+
+Git Hook Commands + +Penify provides Git hook commands to automate documentation generation as part of your Git workflow. +
+Hook Installation +
+How Hooks Work + +When you install a Git hook with penify docgen install-hook, Penify: + + + +Creates a post-commit hook script in the .git/hooks directory + +Makes the script executable + +Configures the hook to run penify docgen after each commit + + +
+
+Hook Script Content + +The generated post-commit hook contains: + +#!/bin/sh +# This is a post-commit hook generated by penify. +# Automatically generates documentation for changed files after each commit. + +penify docgen -gf /path/to/git/repository -t your_api_token + +
+
+Installation Location + +By default, hooks are installed in the current Git repository. You can specify a different location: + +penify docgen install-hook -l /path/to/repo + +
+
+Installation Requirements + +To install hooks, you need: + +A valid Penify API token (login first with penify login) + +Write permissions to the .git/hooks directory + + +
+
+Verifying Installation + +After installation, you can verify that the hook is installed: + +cat .git/hooks/post-commit + +
+
+
+Hook Customization + +You can customize the post-commit hook after installation: +
+Modifying Hook Behavior + + + +Edit the .git/hooks/post-commit file + +Add additional options to the penify docgen command + +Add other commands to run after commit + + + +Example of a customized hook: + +#!/bin/sh +# This is a post-commit hook generated by penify. +# Automatically generates documentation for changed files after each commit. + +# Generate documentation +penify docgen -gf /path/to/git/repository -t your_api_token + +# Additional custom commands +echo "Documentation generation complete!" + +
+
+Advanced Hook Scenarios + +Conditional Documentation Generation: + +#!/bin/sh +# Only generate documentation for commits to the main branch +BRANCH=$(git rev-parse --abbrev-ref HEAD) +if [ "$BRANCH" = "main" ]; then + penify docgen -gf /path/to/git/repository -t your_api_token +fi + + +Documenting Specific Files/Folders: + +#!/bin/sh +# Only document Python files in the src directory +penify docgen -l src/ -gf /path/to/git/repository -t your_api_token + +
+
+
+Hook Uninstallation +
+Standard Uninstallation + +To remove a hook from the current repository: + +penify docgen uninstall-hook + +
+
+Specific Repository Uninstallation + +To remove a hook from a specific repository: + +penify docgen uninstall-hook -l /path/to/repo + +
+
+Manual Hook Removal + +If needed, you can manually remove the hook: + +rm .git/hooks/post-commit + +
+
+Verifying Uninstallation + +Check that the hook was successfully removed: + +ls -la .git/hooks/post-commit # Should return "No such file or directory" + +
+
+
+
+Advanced Use Cases +
+Continuous Integration + +Run documentation generation in CI pipelines: + +# In your CI script +export PENIFY_API_TOKEN=your_api_token +penify docgen -l src/ + +
+
+Batch Documentation + +Generate documentation for multiple repositories: + +# Bash script for batch documentation +for repo in repo1 repo2 repo3; do + cd /path/to/$repo + penify docgen -l . +done + +
+
+Custom Git Hook Integration + +Integrate with other Git hooks: + +# In .git/hooks/pre-push +penify docgen -l src/ + +
+
+Documenting Release Tags + +Generate documentation when creating a release tag: + +# Document everything when creating a tag +git tag -a v1.0.0 +penify docgen -l . # Document entire codebase +git commit --amend -m "Release v1.0.0 with updated documentation" + +
+
+
+Troubleshooting +
+Common Issues + + + +**"Authentication required"** + +Run penify login before using documentation features + +Check your API token with cat ~/.penify + + + +**"Permission denied when installing hook"** + +Check Git repository permissions + +Try running with sudo (if appropriate for your environment) + +Ensure the .git/hooks directory exists + + + +**"Hook installed but not running"** + +Check if the hook is executable: ls -la .git/hooks/post-commit + +Make it executable if needed: chmod +x .git/hooks/post-commit + +Check for syntax errors in the hook script + + + +**"File or directory not found"** + +Verify the path provided to the -l option + +Ensure you're running the command from the correct directory + + + +**"Hook uninstallation failed"** + +Check permissions on the .git/hooks directory + +Try manual removal: rm .git/hooks/post-commit + + + + +
+
+Debugging + +For detailed output when running documentation commands: + +export PENIFY_DEBUG=1 +penify docgen -l src/ + +
+
+Getting Help + +For command-specific help: + +penify docgen --help +penify docgen install-hook --help +penify docgen uninstall-hook --help + +
+
+
diff --git a/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml new file mode 100644 index 0000000..5b1d157 --- /dev/null +++ b/docs345/docbook/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml @@ -0,0 +1,209 @@ + +
+ +This document demonstrates how to use Penify CLI in real-world development workflows to improve your productivity. +
+Workflow 1: Efficient Git Commits with AI +
+Setup + +First, configure your local LLM for offline operation: + +penify config llm + + +Configure your JIRA integration for enhanced commit messages: + +penify config jira + +
+
+Daily Workflow + + + +Make your code changes as usual + +When ready to commit, use Penify to generate a smart commit message: + + + +penify commit + + + + +Review and confirm the generated commit message + +Git commit and push as usual + + +
+
+Benefits + + + +Consistent and descriptive commit messages + +Automatic inclusion of relevant JIRA ticket information + +Time saved from writing detailed commit messages + + +
+
+
+Workflow 2: Documentation Generation Pipeline +
+Setup + +Login to Penify to access advanced documentation features: + +penify login + + +Install the Git hook for automatic documentation generation: + +penify docgen install-hook + +
+
+Daily Workflow + + + +Make your code changes as usual + +Commit your changes + +Documentation is automatically generated for changed files + +Review the generated documentation + + +
+
+Manual Documentation + +For specific files or folders: + +penify docgen -l src/components/authentication + +
+
+Benefits + + + +Always up-to-date documentation + +Consistent documentation style + +Time saved from writing detailed documentation + + +
+
+
+Workflow 3: Code Review Enhancement +
+Setup + +Ensure you're logged into Penify: + +penify login + +
+
+Workflow + + + +Before submitting a PR, generate documentation for changed files: + + + +penify docgen + + + + +Include the generated documentation in your PR + +Reviewers can better understand your changes with the AI-generated explanations + + +
+
+Benefits + + + +Improved PR quality + +Faster code reviews + +Better team understanding of code changes + + +
+
+
+Workflow 4: Onboarding New Team Members +
+For Team Leads + +Generate comprehensive documentation for the entire codebase: + +penify docgen -l . + +
+
+For New Team Members + +Generate focused documentation for components you're working on: + +penify docgen -l src/components/my-feature + +
+
+Benefits + + + +Faster onboarding + +Better understanding of code structure + +Reduced questions to senior team members + + +
+
+
+Workflow 5: Legacy Code Understanding + +When working with unfamiliar legacy code: + +# Document a specific complex file +penify docgen -l src/legacy/complex_module.py + +# Document an entire legacy component +penify docgen -l src/legacy/old_component + +
+Benefits + + + +Quickly understand complex legacy systems + +Reduce time spent deciphering undocumented code + +Make safer changes to legacy systems + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook.xml b/docs345/docbook/namespacepenify__hook.xml new file mode 100644 index 0000000..69e0b8e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook.xml @@ -0,0 +1,40 @@ + +
+penify_hook Namespace Reference +penify_hook + + Namespaces + + namespace api_client + + namespace base_analyzer + + namespace commands + + namespace commit_analyzer + + namespace config_command + + namespace constants + + namespace file_analyzer + + namespace folder_analyzer + + namespace git_analyzer + + namespace jira_client + + namespace llm_client + + namespace login_command + + namespace main + + namespace ui_utils + + namespace utils + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1api__client.xml b/docs345/docbook/namespacepenify__hook_1_1api__client.xml new file mode 100644 index 0000000..dcc79df --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1api__client.xml @@ -0,0 +1,12 @@ + +
+penify_hook.api_client Namespace Reference +penify_hook.api_client + + Classes + + class APIClient + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1base__analyzer.xml b/docs345/docbook/namespacepenify__hook_1_1base__analyzer.xml new file mode 100644 index 0000000..890dfdc --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1base__analyzer.xml @@ -0,0 +1,12 @@ + +
+penify_hook.base_analyzer Namespace Reference +penify_hook.base_analyzer + + Classes + + class BaseAnalyzer + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands.xml new file mode 100644 index 0000000..8724992 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands.xml @@ -0,0 +1,20 @@ + +
+penify_hook.commands Namespace Reference +penify_hook.commands + + Namespaces + + namespace auth_commands + + namespace commit_commands + + namespace config_commands + + namespace doc_commands + + namespace hook_commands + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands.xml new file mode 100644 index 0000000..f868f3d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands.xml @@ -0,0 +1,90 @@ + +
+penify_hook.commands.auth_commands Namespace Reference +penify_hook.commands.auth_commands + + Functions + + def save_credentials (api_key) + + def login (api_url, dashboard_url) + + + +
+Function Documentation +
+ login() +loginpenify_hook.commands.auth_commands +penify_hook.commands.auth_commandslogin +def penify_hook.commands.auth_commands.login ( api_url, dashboard_url) +Open the login page in a web browser and listen for the redirect URL to +capture the token. + +This function generates a random redirect port, constructs the full +login URL with the provided dashboard URL, opens the login page in the +default web browser, and sets up a simple HTTP server to listen for the +redirect. Upon receiving the redirect, it extracts the token from the +query parameters, fetches API keys using the token, saves them if +successful, and handles login failures by notifying the user. + +Args: + api_url (str): The URL of the API service to fetch API keys. + dashboard_url (str): The URL of the dashboard where the user will be redirected after logging + in. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ save_credentials() +save_credentialspenify_hook.commands.auth_commands +penify_hook.commands.auth_commandssave_credentials +def penify_hook.commands.auth_commands.save_credentials ( api_key) +Save the token and API keys based on priority: +1. .env file in Git repo root (if in a git repo) +2. .penify file in home directory (global fallback) + +Args: + api_key: The API key to save + +Returns: + bool: True if saved successfully, False otherwise + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5 new file mode 100644 index 0000000..3843ca4 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.md5 @@ -0,0 +1 @@ +8ad325585e8efe43cb16f6c7070d7d0a \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg new file mode 100644 index 0000000..7efc66a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_cgraph.svg @@ -0,0 +1,61 @@ + + + + + + +penify_hook.commands.auth_commands.login + + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5 new file mode 100644 index 0000000..a7db012 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.md5 @@ -0,0 +1 @@ +65e495614449516908c997067ca3d2d2 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg new file mode 100644 index 0000000..42af25d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_a78f375c58bb6f69f98675e6a9ac84655_icgraph.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.commands.auth_commands.login + + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.login_command.handle +_login + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 new file mode 100644 index 0000000..17fadc1 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.md5 @@ -0,0 +1 @@ +31a51591f0a8f9ef897c4a08daac5829 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg new file mode 100644 index 0000000..c94169d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_cgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.commands.auth_commands.save_credentials + + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 new file mode 100644 index 0000000..051c10c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.md5 @@ -0,0 +1 @@ +ec7d7c899a70e1c68057353448e9a6d9 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg new file mode 100644 index 0000000..9b6688c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1auth__commands_aa3956ca1749d4218ea1dc6e5b6218b24_icgraph.svg @@ -0,0 +1,76 @@ + + + + + + +penify_hook.commands.auth_commands.save_credentials + + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.login_command.handle +_login + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands.xml new file mode 100644 index 0000000..ae59eb4 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands.xml @@ -0,0 +1,133 @@ + +
+penify_hook.commands.commit_commands Namespace Reference +penify_hook.commands.commit_commands + + Functions + + def commit_code (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None) + + def setup_commit_parser (parser) + + def handle_commit (args) + + + +
+Function Documentation +
+ commit_code() +commit_codepenify_hook.commands.commit_commands +penify_hook.commands.commit_commandscommit_code +def penify_hook.commands.commit_commands.commit_code ( api_url, token, message, open_terminal, generate_description, llm_model = None +, llm_api_base = None +, llm_api_key = None +, jira_url = None +, jira_user = None +, jira_api_token = None +) +Enhance Git commits with AI-powered commit messages. + +This function allows for the generation of enhanced commit messages +using natural language processing models and optionally integrates with +JIRA for additional context. It processes the current Git folder to find +relevant files and generates a detailed commit message based on the +provided parameters. + +Args: + api_url (str): URL of the API endpoint. + token (str): Authentication token for the API. + message (str): Initial commit message provided by the user. + open_terminal (bool): Whether to open the terminal after committing. + generate_description (bool): Whether to generate a detailed description in the commit message. + llm_model (str?): The language model to use for generating the commit message. Defaults to + None. + llm_api_base (str?): Base URL of the LLM API. Defaults to None. + llm_api_key (str?): API key for accessing the LLM service. Defaults to None. + jira_url (str?): URL of the JIRA instance. Defaults to None. + jira_user (str?): Username for authenticating with JIRA. Defaults to None. + jira_api_token (str?): API token for accessing JIRA. Defaults to None. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ handle_commit() +handle_commitpenify_hook.commands.commit_commands +penify_hook.commands.commit_commandshandle_commit +def penify_hook.commands.commit_commands.handle_commit ( args) +Handle the commit functionality by processing arguments and invoking the +appropriate commands. + +This function processes the provided command-line arguments to configure +settings for commit operations, including LLM (Language Model) and Jira +configurations. It then calls the `commit_code` function with these +configurations to perform the actual commit operation. + +Args: + args (argparse.Namespace): The parsed command-line arguments containing options like terminal, + description, message, etc. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ setup_commit_parser() +setup_commit_parserpenify_hook.commands.commit_commands +penify_hook.commands.commit_commandssetup_commit_parser +def penify_hook.commands.commit_commands.setup_commit_parser ( parser) +Generates a parser for setting up a command to generate smart commit +messages. + +This function sets up an argument parser that can be used to generate +commit messages with contextual information. It allows users to specify +options such as including a message, opening an edit terminal before +committing, and generating a detailed commit message. + +Args: + parser (argparse.ArgumentParser): The ArgumentParser object to be configured. + +Here is the caller graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 new file mode 100644 index 0000000..f0df322 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.md5 @@ -0,0 +1 @@ +ebbb356587ab923660dadd713f529935 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg new file mode 100644 index 0000000..a8d9791 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_cgraph.svg @@ -0,0 +1,139 @@ + + + + + + +penify_hook.commands.commit_commands.commit_code + + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node6 + + + + + +Node8 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node8 + + + + + +Node3 + + +penify_hook.ui_utils.format +_error + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.ui_utils.format_info + + + + + +Node4->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.format +_warning + + + + + +Node6->Node7 + + + + + +Node8->Node8 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 new file mode 100644 index 0000000..30b2f36 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.md5 @@ -0,0 +1 @@ +b42af33551c96c0ccabd26bf5dac7901 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg new file mode 100644 index 0000000..35f0b28 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a62564c4e8ad59fc46d56cb0f9122a71a_icgraph.svg @@ -0,0 +1,146 @@ + + + + + + +penify_hook.commands.commit_commands.commit_code + + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node1->Node5 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node1->Node6 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node1->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node1->Node8 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node2->Node4 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5 new file mode 100644 index 0000000..c49ca59 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.md5 @@ -0,0 +1 @@ +9d31c6bce57180d0019639c06f0a64c6 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg new file mode 100644 index 0000000..fd13edd --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_a8627583116eb78e31a4d3cdc16d2f15c_icgraph.svg @@ -0,0 +1,61 @@ + + + + + + +penify_hook.commands.commit_commands.setup_commit_parser + + + +Node1 + + +penify_hook.commands.commit +_commands.setup_commit_parser + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node3 + + +tests.test_commit_commands. +TestCommitCommands.test +_setup_commit_parser + + + + + +Node1->Node3 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5 new file mode 100644 index 0000000..9c1af92 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.md5 @@ -0,0 +1 @@ +76b990698c4e374b742a1a611bfd524b \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg new file mode 100644 index 0000000..9299eb7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_cgraph.svg @@ -0,0 +1,300 @@ + + + + + + +penify_hook.commands.commit_commands.handle_commit + + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node5 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node5 + + + + + +Node10 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node10 + + + + + +Node13 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node13 + + + + + +Node14 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node14 + + + + + +Node3 + + +penify_hook.ui_utils.print +_error + + + + + +Node2->Node3 + + + + + +Node2->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2->Node7 + + + + + +Node9 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.ui_utils.format +_error + + + + + +Node3->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.format_info + + + + + +Node5->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.format +_warning + + + + + +Node7->Node8 + + + + + +Node9->Node9 + + + + + +Node11 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node10->Node11 + + + + + +Node12 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node10->Node12 + + + + + +Node12->Node9 + + + + + +Node12->Node12 + + + + + +Node13->Node11 + + + + + +Node13->Node12 + + + + + +Node14->Node11 + + + + + +Node14->Node12 + + + + + +Node15 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node14->Node15 + + + + + +Node15->Node9 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5 new file mode 100644 index 0000000..47a6cde --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.md5 @@ -0,0 +1 @@ +a8800179f1f560b476cc721ea33d08f7 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg new file mode 100644 index 0000000..a93e9a1 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1commit__commands_af4f739f524c38b437e4e47673d683e23_icgraph.svg @@ -0,0 +1,61 @@ + + + + + + +penify_hook.commands.commit_commands.handle_commit + + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node3 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node1->Node3 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands.xml new file mode 100644 index 0000000..1acfef1 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands.xml @@ -0,0 +1,364 @@ + +
+penify_hook.commands.config_commands Namespace Reference +penify_hook.commands.config_commands + + Functions + + None load_env_files () + + Path get_penify_config () + + Any get_env_var_or_default (str env_var, Any default=None) + + def save_llm_config (model, api_base, api_key) + + def save_jira_config (url, username, api_token) + + Dict[str, str] get_llm_config () + + Dict[str, str] get_jira_config () + + def config_llm_web () + + def config_jira_web () + + Optional[str] get_token () + + + + + Variables + + bool DOTENV_AVAILABLE = True + + path + + + +
+Function Documentation +
+ config_jira_web() +config_jira_webpenify_hook.commands.config_commands +penify_hook.commands.config_commandsconfig_jira_web +def penify_hook.commands.config_commands.config_jira_web ( ) +Open a web browser interface for configuring JIRA settings. + +This function sets up a simple HTTP server using Python's built-in +`http.server` module to handle GET and POST requests. The server serves +an HTML page for configuration and handles saving the JIRA configuration +details through API tokens and URLs. Upon successful configuration, it +shuts down the server gracefully. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ config_llm_web() +config_llm_webpenify_hook.commands.config_commands +penify_hook.commands.config_commandsconfig_llm_web +def penify_hook.commands.config_commands.config_llm_web ( ) +Open a web browser interface for configuring LLM settings. + +This function starts a temporary HTTP server that serves an HTML +template for configuring Large Language Model (LLM) settings. It handles +GET and POST requests to retrieve the current configuration, save new +configurations, and suppress log messages. The server runs on a random +port between 30000 and 50000, and it is accessible via a URL like +http://localhost:<redirect_port>. The function opens this URL in the +default web browser for configuration. Once configured, the server shuts +down. + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_env_var_or_default() +get_env_var_or_defaultpenify_hook.commands.config_commands +penify_hook.commands.config_commandsget_env_var_or_default + Any penify_hook.commands.config_commands.get_env_var_or_default (str env_var, Any default = None +) +Get environment variable or return default value. + +Args: + env_var: The environment variable name + default: Default value if environment variable is not set + +Returns: + Value of the environment variable or default + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_jira_config() +get_jira_configpenify_hook.commands.config_commands +penify_hook.commands.config_commandsget_jira_config + Dict[str, str] penify_hook.commands.config_commands.get_jira_config ( ) +Get JIRA configuration from environment variables. + +Environment variables: +- PENIFY_JIRA_URL: JIRA URL +- PENIFY_JIRA_USER: JIRA username +- PENIFY_JIRA_TOKEN: JIRA API token + +Returns: + dict: Configuration dictionary with url, username, and api_token + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_llm_config() +get_llm_configpenify_hook.commands.config_commands +penify_hook.commands.config_commandsget_llm_config + Dict[str, str] penify_hook.commands.config_commands.get_llm_config ( ) +Get LLM configuration from environment variables. + +Environment variables: +- PENIFY_LLM_MODEL: Model name +- PENIFY_LLM_API_BASE: API base URL +- PENIFY_LLM_API_KEY: API key + +Returns: + dict: Configuration dictionary with model, api_base, and api_key + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_penify_config() +get_penify_configpenify_hook.commands.config_commands +penify_hook.commands.config_commandsget_penify_config + Path penify_hook.commands.config_commands.get_penify_config ( ) +Get the home directory for the .penify configuration file. + +This function searches for the `.penify` file in the current directory +and its parent directories until it finds it or reaches the home +directory. If not found, it creates the `.penify` directory and an empty +`config.json` file. + +Returns: + Path: The path to the `config.json` file within the `.penify` directory. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ get_token() +get_tokenpenify_hook.commands.config_commands +penify_hook.commands.config_commandsget_token + Optional[str] penify_hook.commands.config_commands.get_token ( ) +Get the API token based on priority: +1. Environment variable PENIFY_API_TOKEN from any .env file +2. Config file 'api_keys' value + +Returns: + str or None: API token if found, None otherwise + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ load_env_files() +load_env_filespenify_hook.commands.config_commands +penify_hook.commands.config_commandsload_env_files + None penify_hook.commands.config_commands.load_env_files ( ) +Load environment variables from .env files in various locations, +with proper priority (later files override earlier ones): +1. User home directory .env (lowest priority) +2. Git repo root directory .env (if in a git repo) +3. Current directory .env (highest priority) + +This function is called when the module is imported, ensuring env variables +are available throughout the application lifecycle. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ save_jira_config() +save_jira_configpenify_hook.commands.config_commands +penify_hook.commands.config_commandssave_jira_config +def penify_hook.commands.config_commands.save_jira_config ( url, username, api_token) +Save JIRA configuration settings to .env file. + +This function saves JIRA configuration in the following priority: +1. Git repo root .env (if inside a git repo) +2. User home directory .env + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ save_llm_config() +save_llm_configpenify_hook.commands.config_commands +penify_hook.commands.config_commandssave_llm_config +def penify_hook.commands.config_commands.save_llm_config ( model, api_base, api_key) +Save LLM configuration settings to .env file. + +This function saves LLM configuration in the following priority: +1. Git repo root .env (if inside a git repo) +2. User home directory .env + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Variable Documentation +
+ DOTENV_AVAILABLE +DOTENV_AVAILABLEpenify_hook.commands.config_commands +penify_hook.commands.config_commandsDOTENV_AVAILABLE +bool penify_hook.commands.config_commands.DOTENV_AVAILABLE = True
+
+ path +pathpenify_hook.commands.config_commands +penify_hook.commands.config_commandspath +penify_hook.commands.config_commands.path
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 new file mode 100644 index 0000000..8a855e7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 @@ -0,0 +1 @@ +168858f3e9d4759f99db4c52c229e797 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg new file mode 100644 index 0000000..cb6e77a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg @@ -0,0 +1,84 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + +Node3->Node3 + + + + + +Node4 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 new file mode 100644 index 0000000..3595ee0 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 @@ -0,0 +1 @@ +543187d5c63c1c460ff6dd5d57c6a646 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg new file mode 100644 index 0000000..1f7e932 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg @@ -0,0 +1,149 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + +Node6 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node6 + + + + + +Node8 + + +tests.test_config_commands. +TestConfigCommands.test +_get_jira_config_exists + + + + + +Node1->Node8 + + + + + +Node3 + + +penify_hook.config +_command.handle_config + + + + + +Node2->Node3 + + + + + +Node5 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node2->Node5 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + +Node6->Node4 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node6->Node7 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 new file mode 100644 index 0000000..fd6eb21 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.md5 @@ -0,0 +1 @@ +91a6c2c6a25f3c8c1d38cd6f5f5c3f25 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg new file mode 100644 index 0000000..15152bf --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a185dfc34a655ed80e6c95939b6f3c35c_icgraph.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.commands.config_commands.config_llm_web + + + +Node1 + + +penify_hook.commands.config +_commands.config_llm_web + + + + + +Node2 + + +penify_hook.config +_command.handle_config + + + + + +Node1->Node2 + + + + + +Node4 + + +tests.test_web_config.Test +WebConfig.test_config_llm +_web_server_setup + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 new file mode 100644 index 0000000..f9c067a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 @@ -0,0 +1 @@ +78a315f2a9f5ef12496dc5b4a1f2f578 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg new file mode 100644 index 0000000..2575f6a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg @@ -0,0 +1,398 @@ + + + + + + +penify_hook.commands.config_commands.get_env_var_or_default + + + +Node1 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + +Node10 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node10 + + + + + +Node14 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node14 + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + +Node7 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node7 + + + + + +Node9 + + +tests.test_config_commands. +TestConfigCommands.test +_get_jira_config_exists + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.config +_command.handle_config + + + + + +Node3->Node4 + + + + + +Node6 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node3->Node6 + + + + + +Node5 + + +penify_hook.main.main + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node7->Node5 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node7->Node8 + + + + + +Node10->Node7 + + + + + +Node11 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_empty + + + + + +Node10->Node11 + + + + + +Node12 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_exists + + + + + +Node10->Node12 + + + + + +Node13 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_invalid_json + + + + + +Node10->Node13 + + + + + +Node14->Node7 + + + + + +Node15 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node14->Node15 + + + + + +Node20 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node14->Node20 + + + + + +Node21 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node14->Node21 + + + + + +Node22 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node14->Node22 + + + + + +Node15->Node5 + + + + + +Node16 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node15->Node16 + + + + + +Node17 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node15->Node17 + + + + + +Node18 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node15->Node18 + + + + + +Node19 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node15->Node19 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5 new file mode 100644 index 0000000..1d6bd9c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.md5 @@ -0,0 +1 @@ +1312bc7ffa0a3c4b3d914591e46647ea \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg new file mode 100644 index 0000000..b5caeb1 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_cgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.commands.config_commands.save_llm_config + + + +Node1 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node2 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5 new file mode 100644 index 0000000..4427799 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.md5 @@ -0,0 +1 @@ +64e3e5d1614b987e9beaa7b1002e49e6 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg new file mode 100644 index 0000000..a6fab0f --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a4617bc5956e502c9555dc0dda0376df4_icgraph.svg @@ -0,0 +1,94 @@ + + + + + + +penify_hook.commands.config_commands.save_llm_config + + + +Node1 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node2 + + +penify_hook.config +_command.handle_config + + + + + +Node1->Node2 + + + + + +Node4 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_failure + + + + + +Node1->Node4 + + + + + +Node5 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_success + + + + + +Node1->Node5 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 new file mode 100644 index 0000000..47f24a6 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 @@ -0,0 +1 @@ +e227b3587529f3c7fa14501fb496ccc8 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg new file mode 100644 index 0000000..036847e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg @@ -0,0 +1,106 @@ + + + + + + +penify_hook.commands.config_commands.get_token + + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node3 + + + + + +Node5 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node5 + + + + + +Node4 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + +Node5->Node4 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5 new file mode 100644 index 0000000..5a5a866 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.md5 @@ -0,0 +1 @@ +9c6b048bd5412b617ea890b1f88c2104 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg new file mode 100644 index 0000000..0a189a5 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_icgraph.svg @@ -0,0 +1,214 @@ + + + + + + +penify_hook.commands.config_commands.get_token + + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + +Node5 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node5 + + + + + +Node10 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node1->Node10 + + + + + +Node11 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node1->Node11 + + + + + +Node12 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node1->Node12 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node2->Node4 + + + + + +Node3->Node3 + + + + + +Node5->Node3 + + + + + +Node6 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node5->Node6 + + + + + +Node7 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node5->Node7 + + + + + +Node8 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node5->Node8 + + + + + +Node9 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node5->Node9 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 new file mode 100644 index 0000000..c4b9ce2 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 @@ -0,0 +1 @@ +67c138c843a1f5d8ab7592c326643328 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg new file mode 100644 index 0000000..4cb30cf --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg @@ -0,0 +1,84 @@ + + + + + + +penify_hook.commands.config_commands.get_llm_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + +Node3->Node3 + + + + + +Node4 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 new file mode 100644 index 0000000..280df61 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.md5 @@ -0,0 +1 @@ +32e055c0ae757bbecf2b86db164d29df \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg new file mode 100644 index 0000000..89ccd03 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_icgraph.svg @@ -0,0 +1,128 @@ + + + + + + +penify_hook.commands.config_commands.get_llm_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + +Node5 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_empty + + + + + +Node1->Node5 + + + + + +Node6 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_exists + + + + + +Node1->Node6 + + + + + +Node7 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_invalid_json + + + + + +Node1->Node7 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node2->Node4 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5 new file mode 100644 index 0000000..6643612 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.md5 @@ -0,0 +1 @@ +69777adad7caeabd935b90d3f0ca21e8 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg new file mode 100644 index 0000000..c7e939c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_cgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.commands.config_commands.get_penify_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 new file mode 100644 index 0000000..3e643ef --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 @@ -0,0 +1 @@ +4f8f2c5d878438fd8fa2e1f0ca1dbc52 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg new file mode 100644 index 0000000..150e9b7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg @@ -0,0 +1,264 @@ + + + + + + +penify_hook.commands.config_commands.get_penify_config + + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + +Node14 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_existing_dir + + + + + +Node1->Node14 + + + + + +Node15 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_new_dir + + + + + +Node1->Node15 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node3 + + + + + +Node6 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2->Node6 + + + + + +Node11 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node2->Node11 + + + + + +Node12 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node2->Node12 + + + + + +Node13 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node2->Node13 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node3->Node5 + + + + + +Node4->Node4 + + + + + +Node6->Node4 + + + + + +Node7 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node6->Node7 + + + + + +Node8 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node6->Node8 + + + + + +Node9 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node6->Node9 + + + + + +Node10 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node6->Node10 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 new file mode 100644 index 0000000..26009b0 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 @@ -0,0 +1 @@ +91b1c0b60f8171163e43b782cfdc5e4b \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg new file mode 100644 index 0000000..1c3e84e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg @@ -0,0 +1,51 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 new file mode 100644 index 0000000..a2245b9 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 @@ -0,0 +1 @@ +e208c1be2bea05a2824626f2971c2bf3 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg new file mode 100644 index 0000000..5f08f28 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg @@ -0,0 +1,403 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + +Node10 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node10 + + + + + +Node14 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node14 + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + +Node7 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node7 + + + + + +Node9 + + +tests.test_config_commands. +TestConfigCommands.test +_get_jira_config_exists + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.config +_command.handle_config + + + + + +Node3->Node4 + + + + + +Node6 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node3->Node6 + + + + + +Node5 + + +penify_hook.main.main + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node7->Node5 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node7->Node8 + + + + + +Node10->Node7 + + + + + +Node11 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_empty + + + + + +Node10->Node11 + + + + + +Node12 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_exists + + + + + +Node10->Node12 + + + + + +Node13 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_invalid_json + + + + + +Node10->Node13 + + + + + +Node14->Node7 + + + + + +Node15 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node14->Node15 + + + + + +Node20 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node14->Node20 + + + + + +Node21 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node14->Node21 + + + + + +Node22 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node14->Node22 + + + + + +Node15->Node5 + + + + + +Node16 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node15->Node16 + + + + + +Node17 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node15->Node17 + + + + + +Node18 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node15->Node18 + + + + + +Node19 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node15->Node19 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 new file mode 100644 index 0000000..9c2e575 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.md5 @@ -0,0 +1 @@ +68e4fb55d25659f523e8547c8cb01464 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg new file mode 100644 index 0000000..ce47665 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_cgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.commands.config_commands.save_jira_config + + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 new file mode 100644 index 0000000..1f53baa --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.md5 @@ -0,0 +1 @@ +d1ffd3debe0bd71ea914f1dd47c727ad \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg new file mode 100644 index 0000000..d4a9fb5 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_ab2486ac2bf16b4a671e49625bfa4f9b4_icgraph.svg @@ -0,0 +1,116 @@ + + + + + + +penify_hook.commands.config_commands.save_jira_config + + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.config +_command.handle_config + + + + + +Node1->Node3 + + + + + +Node6 + + +tests.test_config_commands. +TestConfigCommands.test +_save_jira_config_success + + + + + +Node1->Node6 + + + + + +Node2->Node3 + + + + + +Node5 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node2->Node5 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5 new file mode 100644 index 0000000..7795142 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.md5 @@ -0,0 +1 @@ +e83a80d18918d47faae41628fcd92c7a \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg new file mode 100644 index 0000000..ad6fa7d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_cgraph.svg @@ -0,0 +1,122 @@ + + + + + + +penify_hook.commands.config_commands.config_jira_web + + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + +Node6 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node6 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + +Node4->Node4 + + + + + +Node5 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node4->Node5 + + + + + +Node5->Node5 + + + + + +Node6->Node5 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5 new file mode 100644 index 0000000..166f9b7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.md5 @@ -0,0 +1 @@ +e627346d77982130e6685bfc2c553220 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg new file mode 100644 index 0000000..2e29aa1 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1config__commands_af115198ea5d6808ccb98733957f50b06_icgraph.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.commands.config_commands.config_jira_web + + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.config +_command.handle_config + + + + + +Node1->Node2 + + + + + +Node4 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands.xml new file mode 100644 index 0000000..681ce86 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands.xml @@ -0,0 +1,134 @@ + +
+penify_hook.commands.doc_commands Namespace Reference +penify_hook.commands.doc_commands + + Functions + + def generate_doc (api_url, token, location=None) + + def setup_docgen_parser (parser) + + def handle_docgen (args) + + + + + Variables + + string docgen_description + + + +
+Function Documentation +
+ generate_doc() +generate_docpenify_hook.commands.doc_commands +penify_hook.commands.doc_commandsgenerate_doc +def penify_hook.commands.doc_commands.generate_doc ( api_url, token, location = None +) +Generates documentation based on the given parameters. + +This function initializes an API client using the provided API URL and +token. It then generates documentation by analyzing the specified +location, which can be a folder, a file, or the current working +directory if no location is provided. The function handles different +types of analysis based on the input location and reports any errors +encountered during the process. + +Args: + api_url (str): The URL of the API to connect to for documentation generation. + token (str): The authentication token for accessing the API. + location (str?): The path to a specific file or folder to analyze. If not provided, the + current working directory is used. + +Here is the caller graph for this function: + + + + + + + + +
+
+ handle_docgen() +handle_docgenpenify_hook.commands.doc_commands +penify_hook.commands.doc_commandshandle_docgen +def penify_hook.commands.doc_commands.handle_docgen ( args) +Handle various subcommands related to document generation and hook +management. + +This function processes different subcommands such as installing or +uninstalling git hooks, and directly generating documentation based on +provided arguments. + +Args: + args (Namespace): Parsed command-line arguments containing the subcommand and location + details. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ setup_docgen_parser() +setup_docgen_parserpenify_hook.commands.doc_commands +penify_hook.commands.doc_commandssetup_docgen_parser +def penify_hook.commands.doc_commands.setup_docgen_parser ( parser) +Set up and configure a parser for documentation generation using Git +commands. + +This function configures a parser with various subcommands and arguments +necessary for generating documentation for Git diffs, files, or folders. +It also installs and uninstalls commit hooks to automate documentation +generation on commits. + +Args: + parser (argparse.ArgumentParser): The parser to configure. + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Variable Documentation +
+ docgen_description +docgen_descriptionpenify_hook.commands.doc_commands +penify_hook.commands.doc_commandsdocgen_description +string penify_hook.commands.doc_commands.docgen_descriptionInitial value:1 = """Generate code documentation using Penify. +2 +3 This command requires you to be logged in to your Penify account. +4 You can generate documentation for: +5 - Current Git diff (default) +6 - Specific file +7 - Specific folder +8 """ +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5 new file mode 100644 index 0000000..472a430 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.md5 @@ -0,0 +1 @@ +d7ee1e07127beb9f489b974a61acce5d \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg new file mode 100644 index 0000000..8fa410b --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_cgraph.svg @@ -0,0 +1,170 @@ + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node3 + + + + + +Node8 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node1->Node8 + + + + + +Node9 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node1->Node9 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node3->Node4 + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node3->Node5 + + + + + +Node7 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node3->Node7 + + + + + +Node6 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node5->Node6 + + + + + +Node6->Node6 + + + + + +Node7->Node6 + + + + + +Node7->Node7 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5 new file mode 100644 index 0000000..9d429ee --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.md5 @@ -0,0 +1 @@ +ed70390d069e80c493faf1a14a7c6fff \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg new file mode 100644 index 0000000..c8b3178 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a2006ab13bff718ef783868a910c0b704_icgraph.svg @@ -0,0 +1,108 @@ + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node3 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node1->Node3 + + + + + +Node4 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node1->Node4 + + + + + +Node5 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node1->Node5 + + + + + +Node6 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node1->Node6 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5 new file mode 100644 index 0000000..171b82e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.md5 @@ -0,0 +1 @@ +5e9faa5a79a60188abcf0c90efae69aa \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg new file mode 100644 index 0000000..0ae8a84 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_a4daac68bc563432bf25c85dc78081a25_icgraph.svg @@ -0,0 +1,221 @@ + + + + + + +penify_hook.commands.doc_commands.generate_doc + + + +Node1 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node8 + + +tests.test_doc_commands.test +_generate_doc_error_handling + + + + + +Node1->Node8 + + + + + +Node9 + + +tests.test_doc_commands.test +_generate_doc_file_location + + + + + +Node1->Node9 + + + + + +Node10 + + +tests.test_doc_commands.test +_generate_doc_folder_location + + + + + +Node1->Node10 + + + + + +Node11 + + +tests.test_doc_commands.test +_generate_doc_no_location + + + + + +Node1->Node11 + + + + + +Node12 + + +tests.test_doc_commands.test +_generate_doc_with_file_exception + + + + + +Node1->Node12 + + + + + +Node13 + + +tests.test_doc_commands.test +_generate_doc_with_folder +_exception + + + + + +Node1->Node13 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node2->Node4 + + + + + +Node5 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node2->Node5 + + + + + +Node6 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node2->Node7 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 new file mode 100644 index 0000000..0dc7e32 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.md5 @@ -0,0 +1 @@ +0fa78969e5f8672d0da52972dd124680 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg new file mode 100644 index 0000000..c570dfd --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1doc__commands_acc7f4ead1b11951d885fa5c151c2cbe0_icgraph.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.commands.doc_commands.setup_docgen_parser + + + +Node1 + + +penify_hook.commands.doc +_commands.setup_docgen_parser + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node3 + + +tests.test_doc_commands.test +_setup_docgen_parser + + + + + +Node1->Node3 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands.xml b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands.xml new file mode 100644 index 0000000..3402982 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands.xml @@ -0,0 +1,94 @@ + +
+penify_hook.commands.hook_commands Namespace Reference +penify_hook.commands.hook_commands + + Functions + + def install_git_hook (location, token) + + def uninstall_git_hook (location) + + + + + Variables + + string HOOK_FILENAME = "post-commit" + + string HOOK_TEMPLATE + + + +
+Function Documentation +
+ install_git_hook() +install_git_hookpenify_hook.commands.hook_commands +penify_hook.commands.hook_commandsinstall_git_hook +def penify_hook.commands.hook_commands.install_git_hook ( location, token) +Install a post-commit hook in the specified location that generates +documentation +for changed files after each commit. + +Args: + location (str): The path to the Git repository where the hook should be installed. + token (str): The authentication token required to access the documentation generation + service. + +Here is the caller graph for this function: + + + + + + + + +
+
+ uninstall_git_hook() +uninstall_git_hookpenify_hook.commands.hook_commands +penify_hook.commands.hook_commandsuninstall_git_hook +def penify_hook.commands.hook_commands.uninstall_git_hook ( location) +Uninstalls the post-commit hook from the specified location. + +This function attempts to remove a post-commit git hook located at the +given path. It constructs the path to the hook and checks if it exists. +If the hook is found, it is deleted, and a confirmation message is +printed. If no hook is found, a message indicating this is also printed. + +Args: + location (Path): The base directory where the .git/hooks directory is located. + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Variable Documentation +
+ HOOK_FILENAME +HOOK_FILENAMEpenify_hook.commands.hook_commands +penify_hook.commands.hook_commandsHOOK_FILENAME +string penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"
+
+ HOOK_TEMPLATE +HOOK_TEMPLATEpenify_hook.commands.hook_commands +penify_hook.commands.hook_commandsHOOK_TEMPLATE +string penify_hook.commands.hook_commands.HOOK_TEMPLATEInitial value:1 = """#!/bin/sh +2 # This is a post-commit hook generated by penify. +3 # Automatically generates documentation for changed files after each commit. +4 +5 penify docgen -gf {git_folder_path} -t {token} +6 """ +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5 new file mode 100644 index 0000000..197f108 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.md5 @@ -0,0 +1 @@ +25f36344702d0e8ec428aac2f670078e \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg new file mode 100644 index 0000000..12ed4ff --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_a81543eb5fa835fd1237f24e8bce6201d_icgraph.svg @@ -0,0 +1,124 @@ + + + + + + +penify_hook.commands.hook_commands.uninstall_git_hook + + + +Node1 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node2->Node4 + + + + + +Node5 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node2->Node5 + + + + + +Node6 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node2->Node7 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 new file mode 100644 index 0000000..333d2ec --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.md5 @@ -0,0 +1 @@ +3ec2e3ff4462cc865b4cb6fd3a62753d \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg new file mode 100644 index 0000000..712e836 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commands_1_1hook__commands_adff8f5d3bf1c3795974a391ee95b72b2_icgraph.svg @@ -0,0 +1,124 @@ + + + + + + +penify_hook.commands.hook_commands.install_git_hook + + + +Node1 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.main.main + + + + + +Node2->Node3 + + + + + +Node4 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node2->Node4 + + + + + +Node5 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node2->Node5 + + + + + +Node6 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node2->Node7 + + + + + +Node3->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1commit__analyzer.xml b/docs345/docbook/namespacepenify__hook_1_1commit__analyzer.xml new file mode 100644 index 0000000..f50a83d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1commit__analyzer.xml @@ -0,0 +1,12 @@ + +
+penify_hook.commit_analyzer Namespace Reference +penify_hook.commit_analyzer + + Classes + + class CommitDocGenHook + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command.xml b/docs345/docbook/namespacepenify__hook_1_1config__command.xml new file mode 100644 index 0000000..7583094 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command.xml @@ -0,0 +1,79 @@ + +
+penify_hook.config_command Namespace Reference +penify_hook.config_command + + Functions + + def setup_config_parser (parent_parser) + + def handle_config (args) + + + +
+Function Documentation +
+ handle_config() +handle_configpenify_hook.config_command +penify_hook.config_commandhandle_config +def penify_hook.config_command.handle_config ( args) +Handle configuration settings based on the specified config type. + +This function processes different types of configurations such as LLM +(Language Model) and JIRA. It saves configurations, sets up web-based +configurations, and verifies JIRA connections. + +Args: + args (argparse.Namespace): Command-line arguments containing the type of configuration to handle. + +Returns: + int: Exit code indicating success or failure. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ setup_config_parser() +setup_config_parserpenify_hook.config_command +penify_hook.config_commandsetup_config_parser +def penify_hook.config_command.setup_config_parser ( parent_parser) +Set up a configuration parser with subparsers for different types of +configurations. + +This function configures and adds subcommands to the parent parser. Each +subcommand corresponds to a specific type of configuration, such as LLM +(Language Model) or JIRA. It allows users to configure settings for +these systems through command-line arguments. + +Args: + parent_parser (argparse.ArgumentParser): The parent parser to which the config subparsers will be added. + +Here is the caller graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5 new file mode 100644 index 0000000..1e009e6 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.md5 @@ -0,0 +1 @@ +4f75720d323fed0e1cf98ec14ae8f6e9 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg new file mode 100644 index 0000000..ba2ae8f --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_cgraph.svg @@ -0,0 +1,182 @@ + + + + + + +penify_hook.config_command.handle_config + + + +Node1 + + +penify_hook.config +_command.handle_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + +Node7 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node7 + + + + + +Node8 + + +penify_hook.commands.config +_commands.config_llm_web + + + + + +Node1->Node8 + + + + + +Node9 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node1->Node9 + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2->Node3 + + + + + +Node2->Node7 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node3->Node4 + + + + + +Node5 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node3->Node5 + + + + + +Node5->Node5 + + + + + +Node6 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node5->Node6 + + + + + +Node6->Node6 + + + + + +Node7->Node6 + + + + + +Node9->Node6 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5 new file mode 100644 index 0000000..a09bdd4 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.md5 @@ -0,0 +1 @@ +f35e472a3767aa0a0b09219e96174cf9 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg new file mode 100644 index 0000000..9d7881e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a240e5331681eb574ac319d7458783bde_icgraph.svg @@ -0,0 +1,44 @@ + + + + + + +penify_hook.config_command.handle_config + + + +Node1 + + +penify_hook.config +_command.handle_config + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5 new file mode 100644 index 0000000..48311b5 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.md5 @@ -0,0 +1 @@ +a17b5eb406ca6a74de12d7201d9bcee7 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg new file mode 100644 index 0000000..89dc211 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1config__command_a4f3eb92164a69df1446d745f8a09285e_icgraph.svg @@ -0,0 +1,45 @@ + + + + + + +penify_hook.config_command.setup_config_parser + + + +Node1 + + +penify_hook.config +_command.setup_config +_parser + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1constants.xml b/docs345/docbook/namespacepenify__hook_1_1constants.xml new file mode 100644 index 0000000..50a4fa0 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1constants.xml @@ -0,0 +1,27 @@ + +
+penify_hook.constants Namespace Reference +penify_hook.constants + + Variables + + string API_URL = 'http://localhost:8000/api' + + string DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login" + + + +
+Variable Documentation +
+ API_URL +API_URLpenify_hook.constants +penify_hook.constantsAPI_URL +string penify_hook.constants.API_URL = 'http://localhost:8000/api'
+
+ DASHBOARD_URL +DASHBOARD_URLpenify_hook.constants +penify_hook.constantsDASHBOARD_URL +string penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1file__analyzer.xml b/docs345/docbook/namespacepenify__hook_1_1file__analyzer.xml new file mode 100644 index 0000000..85d4d1f --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1file__analyzer.xml @@ -0,0 +1,27 @@ + +
+penify_hook.file_analyzer Namespace Reference +penify_hook.file_analyzer + + Classes + + class FileAnalyzerGenHook + + + + + Variables + + logger = logging.getLogger(__name__) + + + +
+Variable Documentation +
+ logger +loggerpenify_hook.file_analyzer +penify_hook.file_analyzerlogger +penify_hook.file_analyzer.logger = logging.getLogger(__name__)
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1folder__analyzer.xml b/docs345/docbook/namespacepenify__hook_1_1folder__analyzer.xml new file mode 100644 index 0000000..afb471c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1folder__analyzer.xml @@ -0,0 +1,12 @@ + +
+penify_hook.folder_analyzer Namespace Reference +penify_hook.folder_analyzer + + Classes + + class FolderAnalyzerGenHook + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1git__analyzer.xml b/docs345/docbook/namespacepenify__hook_1_1git__analyzer.xml new file mode 100644 index 0000000..875b214 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1git__analyzer.xml @@ -0,0 +1,27 @@ + +
+penify_hook.git_analyzer Namespace Reference +penify_hook.git_analyzer + + Classes + + class GitDocGenHook + + + + + Variables + + logger = logging.getLogger(__name__) + + + +
+Variable Documentation +
+ logger +loggerpenify_hook.git_analyzer +penify_hook.git_analyzerlogger +penify_hook.git_analyzer.logger = logging.getLogger(__name__)
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1jira__client.xml b/docs345/docbook/namespacepenify__hook_1_1jira__client.xml new file mode 100644 index 0000000..1c5cdc4 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1jira__client.xml @@ -0,0 +1,27 @@ + +
+penify_hook.jira_client Namespace Reference +penify_hook.jira_client + + Classes + + class JiraClient + + + + + Variables + + bool JIRA_AVAILABLE = True + + + +
+Variable Documentation +
+ JIRA_AVAILABLE +JIRA_AVAILABLEpenify_hook.jira_client +penify_hook.jira_clientJIRA_AVAILABLE +bool penify_hook.jira_client.JIRA_AVAILABLE = True
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1llm__client.xml b/docs345/docbook/namespacepenify__hook_1_1llm__client.xml new file mode 100644 index 0000000..b5190b3 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1llm__client.xml @@ -0,0 +1,12 @@ + +
+penify_hook.llm_client Namespace Reference +penify_hook.llm_client + + Classes + + class LLMClient + + + +
diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command.xml b/docs345/docbook/namespacepenify__hook_1_1login__command.xml new file mode 100644 index 0000000..0d81b57 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command.xml @@ -0,0 +1,68 @@ + +
+penify_hook.login_command Namespace Reference +penify_hook.login_command + + Functions + + def setup_login_parser (parser) + + def handle_login (args) + + + +
+Function Documentation +
+ handle_login() +handle_loginpenify_hook.login_command +penify_hook.login_commandhandle_login +def penify_hook.login_command.handle_login ( args) +Handle the login command. + +Initiates a user login process by calling the `login` function from the +`penify_hook.commands.auth_commands` module using predefined constants +`API_URL` and `DASHBOARD_URL` from the `penify_hook.constants` module. + +Args: + args (argparse.Namespace): Parsed arguments containing necessary parameters for the login command. + +Returns: + None: This function does not return any value; it is expected to handle the + login process internally. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ setup_login_parser() +setup_login_parserpenify_hook.login_command +penify_hook.login_commandsetup_login_parser +def penify_hook.login_command.setup_login_parser ( parser)Here is the caller graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5 new file mode 100644 index 0000000..2daae41 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.md5 @@ -0,0 +1 @@ +34cbd1a77d726e3937d67455d405b0ba \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg new file mode 100644 index 0000000..7743579 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_aae63db4c484797bead34b7d874020c6a_icgraph.svg @@ -0,0 +1,44 @@ + + + + + + +penify_hook.login_command.setup_login_parser + + + +Node1 + + +penify_hook.login_command.setup +_login_parser + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 new file mode 100644 index 0000000..ad91965 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.md5 @@ -0,0 +1 @@ +6a1ceeef99a0101ba5882e9e71fa9bce \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg new file mode 100644 index 0000000..1ef455e --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_cgraph.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.login_command.handle_login + + + +Node1 + + +penify_hook.login_command.handle +_login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node4 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 new file mode 100644 index 0000000..7a114f5 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.md5 @@ -0,0 +1 @@ +1f6ec32e02e9919f90ba1a6a23743cb6 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg new file mode 100644 index 0000000..5ef77f9 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1login__command_ae4bf932fbafeff834b0a0c5a37f74ccd_icgraph.svg @@ -0,0 +1,44 @@ + + + + + + +penify_hook.login_command.handle_login + + + +Node1 + + +penify_hook.login_command.handle +_login + + + + + +Node2 + + +penify_hook.main.main + + + + + +Node1->Node2 + + + + + +Node2->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1main.xml b/docs345/docbook/namespacepenify__hook_1_1main.xml new file mode 100644 index 0000000..4a86a96 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1main.xml @@ -0,0 +1,51 @@ + +
+penify_hook.main Namespace Reference +penify_hook.main + + Functions + + def main () + + + +
+Function Documentation +
+ main() +mainpenify_hook.main +penify_hook.mainmain +def penify_hook.main.main ( ) +Main function to handle command-line interface (CLI) interactions with +Penify services. + +This tool provides a command-line interface for generating smart commit +messages, configuring local-LLM and JIRA, and generating code +documentation. It supports basic commands that do not require login and +advanced commands that require user authentication. The `--version` flag +can be used to display the version information. + +Returns: + int: Exit status of the program (0 for success, 1 for error). + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 new file mode 100644 index 0000000..304cb74 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.md5 @@ -0,0 +1 @@ +73631f13dbb5d5f90aafdead88d96c1c \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg new file mode 100644 index 0000000..06f8a9c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_cgraph.svg @@ -0,0 +1,620 @@ + + + + + + +penify_hook.main.main + + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + +Node6 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node6 + + + + + +Node17 + + +penify_hook.config +_command.handle_config + + + + + +Node1->Node17 + + + + + +Node22 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node22 + + + + + +Node26 + + +penify_hook.login_command.handle +_login + + + + + +Node1->Node26 + + + + + +Node29 + + +penify_hook.commands.commit +_commands.setup_commit_parser + + + + + +Node1->Node29 + + + + + +Node30 + + +penify_hook.config +_command.setup_config +_parser + + + + + +Node1->Node30 + + + + + +Node31 + + +penify_hook.commands.doc +_commands.setup_docgen_parser + + + + + +Node1->Node31 + + + + + +Node32 + + +penify_hook.login_command.setup +_login_parser + + + + + +Node1->Node32 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2->Node3 + + + + + +Node2->Node6 + + + + + +Node11 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2->Node11 + + + + + +Node14 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2->Node14 + + + + + +Node15 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node15 + + + + + +Node4 + + +penify_hook.ui_utils.print +_error + + + + + +Node3->Node4 + + + + + +Node3->Node6 + + + + + +Node8 + + +penify_hook.ui_utils.print +_warning + + + + + +Node3->Node8 + + + + + +Node10 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node3->Node10 + + + + + +Node5 + + +penify_hook.ui_utils.format +_error + + + + + +Node4->Node5 + + + + + +Node7 + + +penify_hook.ui_utils.format_info + + + + + +Node6->Node7 + + + + + +Node9 + + +penify_hook.ui_utils.format +_warning + + + + + +Node8->Node9 + + + + + +Node10->Node10 + + + + + +Node12 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node11->Node12 + + + + + +Node13 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node11->Node13 + + + + + +Node13->Node10 + + + + + +Node13->Node13 + + + + + +Node14->Node12 + + + + + +Node14->Node13 + + + + + +Node15->Node12 + + + + + +Node15->Node13 + + + + + +Node16 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node15->Node16 + + + + + +Node16->Node10 + + + + + +Node18 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node17->Node18 + + + + + +Node19 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node17->Node19 + + + + + +Node20 + + +penify_hook.commands.config +_commands.config_llm_web + + + + + +Node17->Node20 + + + + + +Node21 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node17->Node21 + + + + + +Node18->Node11 + + + + + +Node18->Node19 + + + + + +Node19->Node10 + + + + + +Node21->Node10 + + + + + +Node22->Node15 + + + + + +Node23 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node22->Node23 + + + + + +Node24 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node22->Node24 + + + + + +Node25 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node22->Node25 + + + + + +Node27 + + +penify_hook.commands.auth +_commands.login + + + + + +Node26->Node27 + + + + + +Node28 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node27->Node28 + + + + + +Node28->Node10 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 new file mode 100644 index 0000000..4bf17ac --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.md5 @@ -0,0 +1 @@ +3a9435159e82b3293bbcf47f41f2b41c \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg new file mode 100644 index 0000000..5001f6b --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1main_a16838b20df4bd14ee4b5e1dd2906738f_icgraph.svg @@ -0,0 +1,28 @@ + + + + + + +penify_hook.main.main + + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils.xml b/docs345/docbook/namespacepenify__hook_1_1ui__utils.xml new file mode 100644 index 0000000..c1e6e73 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils.xml @@ -0,0 +1,572 @@ + +
+penify_hook.ui_utils Namespace Reference +penify_hook.ui_utils + + Functions + + def format_info (message) + + def format_success (message) + + def format_warning (message) + + def format_error (message) + + def format_highlight (message) + + def format_file_path (file_path) + + def print_info (message) + + def print_success (message) + + def print_warning (message) + + def print_error (message) + + def print_processing (file_path) + + def print_status (status, message) + + def create_progress_bar (total, desc="Processing", unit="item") + + def create_stage_progress_bar (stages, desc="Processing") + + def update_stage (pbar, stage_name) + + + + + Variables + + autoreset + + INFO_COLOR = Fore.CYAN + + SUCCESS_COLOR = Fore.GREEN + + WARNING_COLOR = Fore.YELLOW + + ERROR_COLOR = Fore.RED + + HIGHLIGHT_COLOR = Fore.BLUE + + NEUTRAL_COLOR = Fore.WHITE + + string SUCCESS_SYMBOL = "✓" + + string WARNING_SYMBOL = "○" + + string ERROR_SYMBOL = "✗" + + string PROCESSING_SYMBOL = "⟳" + + + +
+Detailed Description + +UI utilities for Penify CLI. + +This module provides utility functions for consistent UI formatting, +colored output, and progress indicators across the Penify CLI application. + +
+
+Function Documentation +
+ create_progress_bar() +create_progress_barpenify_hook.ui_utils +penify_hook.ui_utilscreate_progress_bar +def penify_hook.ui_utils.create_progress_bar ( total, desc = "Processing" +, unit = "item" +) +Create a tqdm progress bar with consistent styling. + +Args: + total (int): Total number of items to process. + desc (str): Description for the progress bar. Defaults to "Processing". + unit (str): Unit label for the progress items. Defaults to "item". + +Returns: + tqdm: A configured tqdm progress bar instance. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ create_stage_progress_bar() +create_stage_progress_barpenify_hook.ui_utils +penify_hook.ui_utilscreate_stage_progress_bar +def penify_hook.ui_utils.create_stage_progress_bar ( stages, desc = "Processing" +) +Create a tqdm progress bar for processing stages with consistent +styling. + +This function initializes and returns a tqdm progress bar object for +tracking the progress through a series of stages. It also provides a +description for the progress bar to enhance its usability. + +Args: + stages (list): A list of strings representing individual stages in the process. + desc (str?): A description for the progress bar. Defaults to "Processing". + +Returns: + tuple: A tuple containing the tqdm progress bar object and the list of stages. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_error() +format_errorpenify_hook.ui_utils +penify_hook.ui_utilsformat_error +def penify_hook.ui_utils.format_error ( message) +Format an error message with appropriate color. + +This function takes a plain error message and wraps it in ANSI escape +codes to apply the specified error color, ensuring that the error +message is visually distinct when output. The function supports various +error colors defined by constants like `ERROR_COLOR`. + +Args: + message (str): The plain text error message to be formatted. + +Returns: + str: The formatted error message with the error color applied. + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_file_path() +format_file_pathpenify_hook.ui_utils +penify_hook.ui_utilsformat_file_path +def penify_hook.ui_utils.format_file_path ( file_path) +Format a file path with appropriate color. + +This function takes a file path as input and wraps it in ANSI escape +codes to apply a warning color. The original file path is then reset to +default style using Style.RESET_ALL. + +Args: + file_path (str): The file path to be formatted. + +Returns: + str: The formatted file path with the warning color applied. + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_highlight() +format_highlightpenify_hook.ui_utils +penify_hook.ui_utilsformat_highlight +def penify_hook.ui_utils.format_highlight ( message) +Format a highlighted message with appropriate color. + +Args: + message (str): The message to be formatted and highlighted. + +Returns: + str: The formatted message with applied highlight style. + +
+
+ format_info() +format_infopenify_hook.ui_utils +penify_hook.ui_utilsformat_info +def penify_hook.ui_utils.format_info ( message) +Format an informational message with appropriate color. + +Args: + message (str): The text of the informational message to be formatted. + +Returns: + str: The formatted informational message with the specified color. + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_success() +format_successpenify_hook.ui_utils +penify_hook.ui_utilsformat_success +def penify_hook.ui_utils.format_success ( message) +Format a success message with appropriate color. + +This function takes a message as input and wraps it in ANSI escape codes +to display it in green, indicating a successful operation. The +Style.RESET_ALL is applied at the end to ensure that any subsequent text +is displayed in the default style. + +Args: + message (str): The message to be formatted as a success message. + +Returns: + str: The formatted success message with green color and reset style. + +Here is the caller graph for this function: + + + + + + + + +
+
+ format_warning() +format_warningpenify_hook.ui_utils +penify_hook.ui_utilsformat_warning +def penify_hook.ui_utils.format_warning ( message) +Format a warning message with appropriate color. + +Args: + message (str): The warning message to be formatted. + +Returns: + str: The formatted warning message with the specified color. + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_error() +print_errorpenify_hook.ui_utils +penify_hook.ui_utilsprint_error +def penify_hook.ui_utils.print_error ( message) +Print an error message with appropriate formatting. + +This function takes a string message, formats it as an error message, +and then prints it. The formatting typically includes prefixing the +message with "Error: " to clearly indicate that it is an error. + +Args: + message (str): The error message to be printed. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_info() +print_infopenify_hook.ui_utils +penify_hook.ui_utilsprint_info +def penify_hook.ui_utils.print_info ( message) +Print an informational message with appropriate formatting. + +This function takes a string message as input and prints it in a +formatted manner. It utilizes the `format_info` function to apply any +necessary formatting before printing. + +Args: + message (str): The message to be printed. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_processing() +print_processingpenify_hook.ui_utils +penify_hook.ui_utilsprint_processing +def penify_hook.ui_utils.print_processing ( file_path) +Print a processing message for a specified file. + +This function takes a file path, formats it using `format_file_path`, +and then prints a formatted message indicating that the file is being +processed. The formatted path is highlighted using `format_highlight`. + +Args: + file_path (str): The path of the file to be processed. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_status() +print_statuspenify_hook.ui_utils +penify_hook.ui_utilsprint_status +def penify_hook.ui_utils.print_status ( status, message) +Print a status message with an appropriate symbol. + +This function takes a status and a message, then prints them with a +colored symbol that corresponds to the given status. The available +statuses are 'success', 'warning', 'error', and any other value will +default to a processing indicator. + +Args: + status (str): The status type ('success', 'warning', 'error') or another string. + message (str): The message to be displayed along with the symbol. + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_success() +print_successpenify_hook.ui_utils +penify_hook.ui_utilsprint_success +def penify_hook.ui_utils.print_success ( message) +Print a formatted success message. + +This function takes a string `message` and prints it as a formatted +success message. The formatting includes adding a prefix "Success: " to +the message and enclosing it within asterisks for emphasis. + +Args: + message (str): The message to be printed as a success message. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ print_warning() +print_warningpenify_hook.ui_utils +penify_hook.ui_utilsprint_warning +def penify_hook.ui_utils.print_warning ( message) +Print a warning message with appropriate formatting. + +This function takes a warning message as input and prints it with +formatted output. The formatting may include color, timestamp, or other +styles to emphasize that it is a warning. + +Args: + message (str): The warning message to be printed. + +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+ update_stage() +update_stagepenify_hook.ui_utils +penify_hook.ui_utilsupdate_stage +def penify_hook.ui_utils.update_stage ( pbar, stage_name) +Update the progress bar with a new stage name. + +This function updates the provided tqdm progress bar to reflect the +current stage of a process. It clears any existing postfix and sets a +new description based on the provided stage name. The display is then +refreshed to ensure that the update is visible immediately. + +Args: + pbar (tqdm): The progress bar object to be updated. + stage_name (str): A string representing the current stage of the process. + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Variable Documentation +
+ autoreset +autoresetpenify_hook.ui_utils +penify_hook.ui_utilsautoreset +penify_hook.ui_utils.autoreset
+
+ ERROR_COLOR +ERROR_COLORpenify_hook.ui_utils +penify_hook.ui_utilsERROR_COLOR +penify_hook.ui_utils.ERROR_COLOR = Fore.RED
+
+ ERROR_SYMBOL +ERROR_SYMBOLpenify_hook.ui_utils +penify_hook.ui_utilsERROR_SYMBOL +string penify_hook.ui_utils.ERROR_SYMBOL = "✗"
+
+ HIGHLIGHT_COLOR +HIGHLIGHT_COLORpenify_hook.ui_utils +penify_hook.ui_utilsHIGHLIGHT_COLOR +penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE
+
+ INFO_COLOR +INFO_COLORpenify_hook.ui_utils +penify_hook.ui_utilsINFO_COLOR +penify_hook.ui_utils.INFO_COLOR = Fore.CYAN
+
+ NEUTRAL_COLOR +NEUTRAL_COLORpenify_hook.ui_utils +penify_hook.ui_utilsNEUTRAL_COLOR +penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE
+
+ PROCESSING_SYMBOL +PROCESSING_SYMBOLpenify_hook.ui_utils +penify_hook.ui_utilsPROCESSING_SYMBOL +string penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳"
+
+ SUCCESS_COLOR +SUCCESS_COLORpenify_hook.ui_utils +penify_hook.ui_utilsSUCCESS_COLOR +penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN
+
+ SUCCESS_SYMBOL +SUCCESS_SYMBOLpenify_hook.ui_utils +penify_hook.ui_utilsSUCCESS_SYMBOL +string penify_hook.ui_utils.SUCCESS_SYMBOL = "✓"
+
+ WARNING_COLOR +WARNING_COLORpenify_hook.ui_utils +penify_hook.ui_utilsWARNING_COLOR +penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW
+
+ WARNING_SYMBOL +WARNING_SYMBOLpenify_hook.ui_utils +penify_hook.ui_utilsWARNING_SYMBOL +string penify_hook.ui_utils.WARNING_SYMBOL = "â—‹"
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 new file mode 100644 index 0000000..e8c2c22 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.md5 @@ -0,0 +1 @@ +e844738072248c6c64fdcc2330f4e553 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg new file mode 100644 index 0000000..54903a7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a0a6fd2613c6fe053b6e4356cd9e5cda2_icgraph.svg @@ -0,0 +1,259 @@ + + + + + + +penify_hook.ui_utils.format_warning + + + +Node1 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2->Node3 + + + + + +Node11 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2->Node11 + + + + + +Node14 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2->Node14 + + + + + +Node4 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node3->Node4 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node3->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node3->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node3->Node9 + + + + + +Node10 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node3->Node10 + + + + + +Node5 + + +penify_hook.main.main + + + + + +Node4->Node5 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node4->Node6 + + + + + +Node5->Node5 + + + + + +Node12 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node11->Node12 + + + + + +Node13 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node11->Node13 + + + + + +Node15 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node14->Node15 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5 new file mode 100644 index 0000000..61c5559 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.md5 @@ -0,0 +1 @@ +107c8ab941ac9fce368d49be27d3ad77 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg new file mode 100644 index 0000000..725dce6 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_cgraph.svg @@ -0,0 +1,38 @@ + + + + + + +penify_hook.ui_utils.create_progress_bar + + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5 new file mode 100644 index 0000000..28e733d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.md5 @@ -0,0 +1 @@ +31face48bece50b969dd777e2fc02655 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg new file mode 100644 index 0000000..5f29536 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a12b92532b1458af94f3649d411b5505c_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.create_progress_bar + + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 new file mode 100644 index 0000000..95113cf --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.md5 @@ -0,0 +1 @@ +dc9c89eee18a938f2f9191abf1d0c4e3 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg new file mode 100644 index 0000000..0913177 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_warning + + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.ui_utils.format +_warning + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5 new file mode 100644 index 0000000..cd55665 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.md5 @@ -0,0 +1 @@ +9fb882734b6d928eec5be79c1f8ddcfd \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg new file mode 100644 index 0000000..45e4d85 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a1ffbb9671dbe233770268e2dd66a67fa_icgraph.svg @@ -0,0 +1,243 @@ + + + + + + +penify_hook.ui_utils.print_warning + + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node10 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node10 + + + + + +Node13 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node13 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node3 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node2->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node2->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node3->Node5 + + + + + +Node4->Node4 + + + + + +Node11 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node10->Node11 + + + + + +Node12 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node10->Node12 + + + + + +Node14 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node13->Node14 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 new file mode 100644 index 0000000..2cb272d --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.md5 @@ -0,0 +1 @@ +86ecc3cd8eb77718a70cf2d0a033d81b \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg new file mode 100644 index 0000000..c5c8ad0 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_success + + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.ui_utils.format +_success + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 new file mode 100644 index 0000000..aeb43db --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.md5 @@ -0,0 +1 @@ +5a5f4e31cb2a03012aa538af45b7c2f7 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg new file mode 100644 index 0000000..1be6b94 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a2b16aa6b68a9edea5f29f84f1c4be79a_icgraph.svg @@ -0,0 +1,71 @@ + + + + + + +penify_hook.ui_utils.print_success + + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5 new file mode 100644 index 0000000..13a3f9b --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.md5 @@ -0,0 +1 @@ +07bb20aff57367351bd025b6bbac0225 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg new file mode 100644 index 0000000..344f55a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_cgraph.svg @@ -0,0 +1,38 @@ + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5 new file mode 100644 index 0000000..2972d31 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.md5 @@ -0,0 +1 @@ +c7fe8cba89008798c4a6df0ce478844e \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg new file mode 100644 index 0000000..9b30dd3 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a3da02cd1140179a9ce60f62c85fccfef_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5 new file mode 100644 index 0000000..69b06bc --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.md5 @@ -0,0 +1 @@ +e9b17f53f8eea3fa235635a840d97fb5 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg new file mode 100644 index 0000000..75f49e6 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a4dd934568897433fa73f9cc182ac4a3e_icgraph.svg @@ -0,0 +1,178 @@ + + + + + + +penify_hook.ui_utils.format_error + + + +Node1 + + +penify_hook.ui_utils.format +_error + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node3->Node4 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node3->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node3->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node3->Node9 + + + + + +Node10 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node3->Node10 + + + + + +Node5 + + +penify_hook.main.main + + + + + +Node4->Node5 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node4->Node6 + + + + + +Node5->Node5 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 new file mode 100644 index 0000000..5199573 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.md5 @@ -0,0 +1 @@ +e25efaa5775be3034819eb11f9cbeeb3 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg new file mode 100644 index 0000000..75e6afd --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a532cdb4de7c679ce8b29c3e9116c4776_icgraph.svg @@ -0,0 +1,87 @@ + + + + + + +penify_hook.ui_utils.format_success + + + +Node1 + + +penify_hook.ui_utils.format +_success + + + + + +Node2 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2->Node4 + + + + + +Node5 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2->Node5 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 new file mode 100644 index 0000000..882dba5 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.md5 @@ -0,0 +1 @@ +3b447097b4d45a9b7a66bc911d7dd54f \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg new file mode 100644 index 0000000..49f0a57 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a5a7340d0fc60fb80f17514d60bf45f1d_icgraph.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.ui_utils.update_stage + + + +Node1 + + +penify_hook.ui_utils.update +_stage + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node3 + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 new file mode 100644 index 0000000..e14594c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.md5 @@ -0,0 +1 @@ +f7f77cf41919f414860683374ddefc0a \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg new file mode 100644 index 0000000..e5601e4 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_error + + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.ui_utils.format +_error + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 new file mode 100644 index 0000000..8538194 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.md5 @@ -0,0 +1 @@ +9c27aeee4681a41d96bdc9cb1c2cd259 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg new file mode 100644 index 0000000..12b58a6 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a6f0acd7dd91abfe67d0807803bc3b65f_icgraph.svg @@ -0,0 +1,162 @@ + + + + + + +penify_hook.ui_utils.print_error + + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node3 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node2->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node2->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node3->Node5 + + + + + +Node4->Node4 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5 new file mode 100644 index 0000000..f566c4a --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.md5 @@ -0,0 +1 @@ +0ee2c99f818d114be866466bd3ca67e3 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg new file mode 100644 index 0000000..66b23f8 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_cgraph.svg @@ -0,0 +1,37 @@ + + + + + + +penify_hook.ui_utils.print_info + + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5 new file mode 100644 index 0000000..cff1293 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.md5 @@ -0,0 +1 @@ +3e2e1c50f92dadbcaeb6192f25ca9d19 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg new file mode 100644 index 0000000..7d448b0 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a811f0adf6e9bf71510c379b6fa155e44_icgraph.svg @@ -0,0 +1,274 @@ + + + + + + +penify_hook.ui_utils.print_info + + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node3 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node1->Node4 + + + + + +Node10 + + +penify_hook.jira_client. +JiraClient.extract_issue +_keys_from_branch + + + + + +Node1->Node10 + + + + + +Node11 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node11 + + + + + +Node12 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node12 + + + + + +Node13 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node13 + + + + + +Node14 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node14 + + + + + +Node2->Node3 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node2->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node2->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node2->Node9 + + + + + +Node3->Node4 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node3->Node5 + + + + + +Node4->Node4 + + + + + +Node10->Node10 + + + + + +Node11->Node12 + + + + + +Node13->Node12 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5 new file mode 100644 index 0000000..048c181 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.md5 @@ -0,0 +1 @@ +19abbe69812d4d3a0b3af7adb5577862 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg new file mode 100644 index 0000000..32bfbfa --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_a92c3e466d1912058167be2eacf85b9f6_icgraph.svg @@ -0,0 +1,343 @@ + + + + + + +penify_hook.ui_utils.format_info + + + +Node1 + + +penify_hook.ui_utils.format_info + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node4 + + + + + +Node6 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node6 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2->Node3 + + + + + +Node5 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node4->Node5 + + + + + +Node6->Node3 + + + + + +Node7 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node6->Node7 + + + + + +Node8 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node6->Node8 + + + + + +Node9 + + +penify_hook.main.main + + + + + +Node6->Node9 + + + + + +Node15 + + +penify_hook.jira_client. +JiraClient.extract_issue +_keys_from_branch + + + + + +Node6->Node15 + + + + + +Node16 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node6->Node16 + + + + + +Node17 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node6->Node17 + + + + + +Node18 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node6->Node18 + + + + + +Node7->Node8 + + + + + +Node11 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node7->Node11 + + + + + +Node12 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node7->Node12 + + + + + +Node13 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node7->Node13 + + + + + +Node14 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node7->Node14 + + + + + +Node8->Node9 + + + + + +Node10 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node8->Node10 + + + + + +Node9->Node9 + + + + + +Node15->Node15 + + + + + +Node16->Node17 + + + + + +Node18->Node17 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5 new file mode 100644 index 0000000..fc03531 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.md5 @@ -0,0 +1 @@ +cb2ef693a136057440c77b2ffc5fc5cc \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg new file mode 100644 index 0000000..d2fcc11 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_aa6e684c00e26199440137a87ed9b195c_icgraph.svg @@ -0,0 +1,55 @@ + + + + + + +penify_hook.ui_utils.print_status + + + +Node1 + + +penify_hook.ui_utils.print +_status + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 new file mode 100644 index 0000000..c14d515 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.md5 @@ -0,0 +1 @@ +65fe82e63024fcc065fa65dce2c0c8fb \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg new file mode 100644 index 0000000..5d98bf8 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_processing + + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 new file mode 100644 index 0000000..568301c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.md5 @@ -0,0 +1 @@ +34c0d184b1a914e69d4b0bdacbaaff04 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg new file mode 100644 index 0000000..4185c69 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_adfcbbfe39029ab6d1dd33e7bf75ae115_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_processing + + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 new file mode 100644 index 0000000..354e231 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.md5 @@ -0,0 +1 @@ +788f6631fd68b88312b14eace530bcf4 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg new file mode 100644 index 0000000..aca9e47 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1ui__utils_af3441fb3c2c3850b8b3b6455a9fdaba4_icgraph.svg @@ -0,0 +1,72 @@ + + + + + + +penify_hook.ui_utils.format_file_path + + + +Node1 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node2 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node2 + + + + + +Node4 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.print +_processing + + + + + +Node1->Node4 + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2->Node3 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1utils.xml b/docs345/docbook/namespacepenify__hook_1_1utils.xml new file mode 100644 index 0000000..93aedb7 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1utils.xml @@ -0,0 +1,80 @@ + +
+penify_hook.utils Namespace Reference +penify_hook.utils + + Classes + + class GitRepoNotFoundError + + + + + Functions + + def get_repo_details (Repo repo) + + def recursive_search_git_folder (folder_path) + + def find_git_parent (path) + + + + + Variables + + logger = logging.getLogger(__name__) + + + +
+Function Documentation +
+ find_git_parent() +find_git_parentpenify_hook.utils +penify_hook.utilsfind_git_parent +def penify_hook.utils.find_git_parent ( path) +Traverse up from the given path to find the nearest directory containing a .git subdirectory. +
+
+ get_repo_details() +get_repo_detailspenify_hook.utils +penify_hook.utilsget_repo_details +def penify_hook.utils.get_repo_details (Repo repo) +Determine the details of a repository including its remote URL, hosting service, organization name, and repository name. +
+
+ recursive_search_git_folder() +recursive_search_git_folderpenify_hook.utils +penify_hook.utilsrecursive_search_git_folder +def penify_hook.utils.recursive_search_git_folder ( folder_path) +Recursively searches for a .git folder starting from the given directory. +Here is the call graph for this function: + + + + + + + + +Here is the caller graph for this function: + + + + + + + + +
+
+
+Variable Documentation +
+ logger +loggerpenify_hook.utils +penify_hook.utilslogger +penify_hook.utils.logger = logging.getLogger(__name__)
+
+
diff --git a/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 new file mode 100644 index 0000000..1431c94 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.md5 @@ -0,0 +1 @@ +dd726258fb2e799d709d2647521b3371 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg new file mode 100644 index 0000000..058cc5f --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_cgraph.svg @@ -0,0 +1,29 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + diff --git a/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 new file mode 100644 index 0000000..768ce43 --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.md5 @@ -0,0 +1 @@ +7f750ca69d16550b240f7065f5db45d2 \ No newline at end of file diff --git a/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg new file mode 100644 index 0000000..a31134c --- /dev/null +++ b/docs345/docbook/namespacepenify__hook_1_1utils_a95c3f9c80860d6a2e2d061d2fb660a3f_icgraph.svg @@ -0,0 +1,727 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + +Node10 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node10 + + + + + +Node22 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node22 + + + + + +Node32 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node32 + + + + + +Node35 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node35 + + + + + +Node37 + + +penify_hook.commands.config +_commands.save_llm_config + + + + + +Node1->Node37 + + + + + +Node3 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2->Node3 + + + + + +Node6 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_error_handling + + + + + +Node2->Node6 + + + + + +Node7 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_client + + + + + +Node2->Node7 + + + + + +Node8 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_jira_connection +_failure + + + + + +Node2->Node8 + + + + + +Node9 + + +tests.test_commit_commands. +TestCommitCommands.test +_commit_code_with_llm_client + + + + + +Node2->Node9 + + + + + +Node4 + + +penify_hook.main.main + + + + + +Node3->Node4 + + + + + +Node5 + + +tests.test_commit_commands. +TestCommitCommands.test +_handle_commit + + + + + +Node3->Node5 + + + + + +Node4->Node4 + + + + + +Node11 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node10->Node11 + + + + + +Node20 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_existing_dir + + + + + +Node10->Node20 + + + + + +Node21 + + +tests.test_config_commands. +TestConfigCommands.test +_get_penify_config_new_dir + + + + + +Node10->Node21 + + + + + +Node11->Node3 + + + + + +Node12 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node11->Node12 + + + + + +Node17 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_config + + + + + +Node11->Node17 + + + + + +Node18 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_from_env + + + + + +Node11->Node18 + + + + + +Node19 + + +tests.test_config_commands. +TestConfigCommands.test +_get_token_not_found + + + + + +Node11->Node19 + + + + + +Node12->Node4 + + + + + +Node13 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node12->Node13 + + + + + +Node14 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node12->Node14 + + + + + +Node15 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node12->Node15 + + + + + +Node16 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node12->Node16 + + + + + +Node22->Node11 + + + + + +Node22->Node22 + + + + + +Node23 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node22->Node23 + + + + + +Node28 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node22->Node28 + + + + + +Node23->Node3 + + + + + +Node24 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node23->Node24 + + + + + +Node27 + + +tests.test_config_commands. +TestConfigCommands.test +_get_jira_config_exists + + + + + +Node23->Node27 + + + + + +Node25 + + +penify_hook.config +_command.handle_config + + + + + +Node24->Node25 + + + + + +Node26 + + +tests.test_web_config.Test +WebConfig.test_config_jira +_web_server_setup + + + + + +Node24->Node26 + + + + + +Node25->Node4 + + + + + +Node28->Node3 + + + + + +Node29 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_empty + + + + + +Node28->Node29 + + + + + +Node30 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_exists + + + + + +Node28->Node30 + + + + + +Node31 + + +tests.test_config_commands. +TestConfigCommands.test +_get_llm_config_invalid_json + + + + + +Node28->Node31 + + + + + +Node33 + + +penify_hook.commands.auth +_commands.login + + + + + +Node32->Node33 + + + + + +Node34 + + +penify_hook.login_command.handle +_login + + + + + +Node33->Node34 + + + + + +Node34->Node4 + + + + + +Node35->Node24 + + + + + +Node35->Node25 + + + + + +Node36 + + +tests.test_config_commands. +TestConfigCommands.test +_save_jira_config_success + + + + + +Node35->Node36 + + + + + +Node37->Node25 + + + + + +Node38 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_failure + + + + + +Node37->Node38 + + + + + +Node39 + + +tests.test_config_commands. +TestConfigCommands.test +_save_llm_config_success + + + + + +Node37->Node39 + + + + + diff --git a/docs345/docbook/namespacesetup.xml b/docs345/docbook/namespacesetup.xml new file mode 100644 index 0000000..9c1b590 --- /dev/null +++ b/docs345/docbook/namespacesetup.xml @@ -0,0 +1,104 @@ + +
+setup Namespace Reference +setup + + Variables + + name + + version + + packages + + install_requires + + entry_points + + author + + author_email + + description + + long_description + + long_description_content_type + + url + + classifiers + + python_requires + + + +
+Variable Documentation +
+ author +authorsetup +setupauthor +setup.author
+
+ author_email +author_emailsetup +setupauthor_email +setup.author_email
+
+ classifiers +classifierssetup +setupclassifiers +setup.classifiers
+
+ description +descriptionsetup +setupdescription +setup.description
+
+ entry_points +entry_pointssetup +setupentry_points +setup.entry_points
+
+ install_requires +install_requiressetup +setupinstall_requires +setup.install_requires
+
+ long_description +long_descriptionsetup +setuplong_description +setup.long_description
+
+ long_description_content_type +long_description_content_typesetup +setuplong_description_content_type +setup.long_description_content_type
+
+ name +namesetup +setupname +setup.name
+
+ packages +packagessetup +setuppackages +setup.packages
+
+ python_requires +python_requiressetup +setuppython_requires +setup.python_requires
+
+ url +urlsetup +setupurl +setup.url
+
+ version +versionsetup +setupversion +setup.version
+
+
diff --git a/docs345/docbook/namespacetests.xml b/docs345/docbook/namespacetests.xml new file mode 100644 index 0000000..fe7db44 --- /dev/null +++ b/docs345/docbook/namespacetests.xml @@ -0,0 +1,20 @@ + +
+tests Namespace Reference +tests + + Namespaces + + namespace conftest + + namespace test_commit_commands + + namespace test_config_commands + + namespace test_doc_commands + + namespace test_web_config + + + +
diff --git a/docs345/docbook/namespacetests_1_1conftest.xml b/docs345/docbook/namespacetests_1_1conftest.xml new file mode 100644 index 0000000..9eabc77 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1conftest.xml @@ -0,0 +1,5 @@ + +
+tests.conftest Namespace Reference +tests.conftest +
diff --git a/docs345/docbook/namespacetests_1_1test__commit__commands.xml b/docs345/docbook/namespacetests_1_1test__commit__commands.xml new file mode 100644 index 0000000..b804950 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__commit__commands.xml @@ -0,0 +1,12 @@ + +
+tests.test_commit_commands Namespace Reference +tests.test_commit_commands + + Classes + + class TestCommitCommands + + + +
diff --git a/docs345/docbook/namespacetests_1_1test__config__commands.xml b/docs345/docbook/namespacetests_1_1test__config__commands.xml new file mode 100644 index 0000000..c01a55e --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__config__commands.xml @@ -0,0 +1,12 @@ + +
+tests.test_config_commands Namespace Reference +tests.test_config_commands + + Classes + + class TestConfigCommands + + + +
diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands.xml b/docs345/docbook/namespacetests_1_1test__doc__commands.xml new file mode 100644 index 0000000..4b9a541 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands.xml @@ -0,0 +1,339 @@ + +
+tests.test_doc_commands Namespace Reference +tests.test_doc_commands + + Functions + + def test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit) + + def test_setup_docgen_parser () + + def test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def test_handle_docgen_no_token (mock_exit, mock_get_token) + + def test_generate_doc_with_file_exception (mock_api_client, mock_getcwd) + + def test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd) + + + +
+Function Documentation +
+ test_generate_doc_error_handling() +test_generate_doc_error_handlingtests.test_doc_commands +tests.test_doc_commandstest_generate_doc_error_handling +def tests.test_doc_commands.test_generate_doc_error_handling ( mock_api_client, mock_git_analyzer, mock_exit) +Generate a documentation string for the provided code snippet using +Google Docstring style. + +Short one line description: Test function to ensure proper error +handling during API calls with GitAnalyzer. Multiline long description: +This test function is designed to verify that the generate_doc function +handles exceptions correctly when an error occurs during API interaction +with GitAnalyzer. It sets up a mock API client and a mock Git analyzer, +causing the analyzer to raise an exception to simulate a failure +condition. The function then asserts that the exit code is set to 1 when +the error handling mechanism is invoked. + +Args: + mock_api_client (MagicMock): A mock object simulating the API client. + mock_git_analyzer (MagicMock): A mock object simulating the Git analyzer, configured to raise an + exception. + mock_exit (MagicMock): A mock object representing the exit function, which should be called + with an error code. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_generate_doc_file_location() +test_generate_doc_file_locationtests.test_doc_commands +tests.test_doc_commandstest_generate_doc_file_location +def tests.test_doc_commands.test_generate_doc_file_location ( mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) +Test generating a documentation file location. + +This function tests the process of generating a documentation file +location using mock objects for API client, folder analyzer, file +analyzer, and Git analyzer. It sets up the necessary mocks, calls the +`generate_doc` function with specified parameters, and asserts that the +appropriate methods on the mock objects are called as expected. + +Args: + mock_api_client (MagicMock): Mock object for the API client. + mock_folder_analyzer (MagicMock): Mock object for the folder analyzer. + mock_file_analyzer (MagicMock): Mock object for the file analyzer. + mock_git_analyzer (MagicMock): Mock object for the Git analyzer. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_generate_doc_folder_location() +test_generate_doc_folder_locationtests.test_doc_commands +tests.test_doc_commandstest_generate_doc_folder_location +def tests.test_doc_commands.test_generate_doc_folder_location ( mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) +Test the function to generate documentation for a folder location. + +It sets up mock objects for API client, folder analyzer, file analyzer, +and Git analyzer, then calls the `generate_doc` function with specified +parameters. Finally, it asserts that the correct methods on the mock +objects were called as expected. + +Args: + mock_api_client (MagicMock): Mock object for the API client. + mock_folder_analyzer (MagicMock): Mock object for the folder analyzer. + mock_file_analyzer (MagicMock): Mock object for the file analyzer. + mock_git_analyzer (MagicMock): Mock object for the Git analyzer. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_generate_doc_no_location() +test_generate_doc_no_locationtests.test_doc_commands +tests.test_doc_commandstest_generate_doc_no_location +def tests.test_doc_commands.test_generate_doc_no_location ( mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) +Test function to generate documentation without location information. + +This function sets up mocks for the API client, current working +directory, and Git analyzer. It then calls the `generate_doc` function +with a fake API URL and token. The function is expected to initialize +the API client, configure the Git analyzer, and run it without any +location information. + +Args: + mock_getcwd (MagicMock): Mock for os.getcwd(). + mock_api_client (MagicMock): Mock for creating an API client. + mock_folder_analyzer (MagicMock): Mock for folder analysis. + mock_file_analyzer (MagicMock): Mock for file analysis. + mock_git_analyzer (MagicMock): Mock for Git analyzer setup. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_generate_doc_with_file_exception() +test_generate_doc_with_file_exceptiontests.test_doc_commands +tests.test_doc_commandstest_generate_doc_with_file_exception +def tests.test_doc_commands.test_generate_doc_with_file_exception ( mock_api_client, mock_getcwd) +Generate documentation from a Python source file. + +This function reads a Python file and generates a docstring based on its +content. It uses mock objects to simulate API calls and directory +operations during testing. + +Args: + mock_api_client (unittest.mock.MagicMock): A mock object for simulating API client behavior. + mock_getcwd (unittest.mock.MagicMock): A mock object for simulating the current working directory function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_generate_doc_with_folder_exception() +test_generate_doc_with_folder_exceptiontests.test_doc_commands +tests.test_doc_commandstest_generate_doc_with_folder_exception +def tests.test_doc_commands.test_generate_doc_with_folder_exception ( mock_api_client, mock_getcwd) +Generate documentation from a given API endpoint and save it to a +folder. + +This function fetches data from the specified API endpoint, processes +it, and saves the generated documentation in the provided folder. If an +error occurs during the fetching process, a SystemExit exception is +raised with an appropriate message. + +Args: + api_url (str): The URL of the API endpoint from which data will be fetched. + token (str): The authentication token required to access the API. + folder_path (str): The path to the folder where the documentation will be saved. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_handle_docgen_generate() +test_handle_docgen_generatetests.test_doc_commands +tests.test_doc_commandstest_handle_docgen_generate +def tests.test_doc_commands.test_handle_docgen_generate ( mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) +Test the direct documentation generation functionality. + +This function tests the `handle_docgen` function when no subcommand is +provided. It verifies that the document generation hook is called and +the uninstall and install hooks are not called. + +Args: + mock_get_token (MagicMock): Mocked function to get authentication token. + mock_generate_doc (MagicMock): Mocked function for generating documentation. + mock_uninstall_hook (MagicMock): Mocked function for uninstalling the document generation hook. + mock_install_hook (MagicMock): Mocked function for installing the document generation hook. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_handle_docgen_install_hook() +test_handle_docgen_install_hooktests.test_doc_commands +tests.test_doc_commandstest_handle_docgen_install_hook +def tests.test_doc_commands.test_handle_docgen_install_hook ( mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) +Test the handling of the 'install-hook' subcommand. + +This function sets up a mock environment where it simulates the +execution of the 'install-hook' subcommand. It verifies that the +`mock_install_hook` is called with the correct arguments, while +`mock_generate_doc` and `mock_uninstall_hook` are not called. + +Args: + mock_exit (MagicMock): Mock object for sys.exit. + mock_get_token (MagicMock): Mock object to simulate fetching a token. + mock_generate_doc (MagicMock): Mock object to simulate generating documentation. + mock_uninstall_hook (MagicMock): Mock object to simulate uninstalling a hook. + mock_install_hook (MagicMock): Mock object to simulate installing a hook. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_handle_docgen_no_token() +test_handle_docgen_no_tokentests.test_doc_commands +tests.test_doc_commandstest_handle_docgen_no_token +def tests.test_doc_commands.test_handle_docgen_no_token ( mock_exit, mock_get_token) +Test the behavior of the `handle_docgen` function when no token is +provided. + +This function asserts that if no token is returned by `mock_get_token`, +the `handle_docgen` function will call `mock_exit` with a status code of +1. + +Args: + mock_exit (MagicMock): A MagicMock object simulating the `exit` function. + mock_get_token (MagicMock): A MagicMock object simulating the `get_token` function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_handle_docgen_uninstall_hook() +test_handle_docgen_uninstall_hooktests.test_doc_commands +tests.test_doc_commandstest_handle_docgen_uninstall_hook +def tests.test_doc_commands.test_handle_docgen_uninstall_hook ( mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) +Test the uninstall-hook subcommand of the handle_docgen function. +This test case sets up a mock environment and verifies that the +uninstall-hook is called with the correct location, while generate_doc +and install_hook are not called. + +Args: + mock_exit (MagicMock): A mock for the exit function. + mock_get_token (MagicMock): A mock for the get_token function. + mock_generate_doc (MagicMock): A mock for the generate_doc function. + mock_uninstall_hook (MagicMock): A mock for the uninstall_hook function. + mock_install_hook (MagicMock): A mock for the install_hook function. + +Here is the call graph for this function: + + + + + + + + +
+
+ test_setup_docgen_parser() +test_setup_docgen_parsertests.test_doc_commands +tests.test_doc_commandstest_setup_docgen_parser +def tests.test_doc_commands.test_setup_docgen_parser ( ) +Test the setup_docgen_parser function to ensure it properly configures +the ArgumentParser for docgen options. + +It verifies that the parser correctly sets up docgen options and handles +different subcommands like 'install-hook' and 'uninstall-hook'. + +Here is the call graph for this function: + + + + + + + + +
+
+
diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5 new file mode 100644 index 0000000..b280dc5 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.md5 @@ -0,0 +1 @@ +28c17f21f2a2a250d23b14c68e3e5d3a \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg new file mode 100644 index 0000000..fc67c78 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a0e74c920f258f442914771164fe26b45_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_file_location + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_file_location + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 new file mode 100644 index 0000000..53e2e0a --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.md5 @@ -0,0 +1 @@ +192fbe5412db3710d1849692c54ac106 \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg new file mode 100644 index 0000000..0c38fcf --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a0f27751d0ba2acfe40ef7e85bccf47d7_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_setup_docgen_parser + + + +Node1 + + +tests.test_doc_commands.test +_setup_docgen_parser + + + + + +Node2 + + +penify_hook.commands.doc +_commands.setup_docgen_parser + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5 new file mode 100644 index 0000000..300f399 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.md5 @@ -0,0 +1 @@ +aef759552fc6cc4d80899b0b13739a5e \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg new file mode 100644 index 0000000..4d2e365 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a1458af9ad0128c3ca1263b552fd5e482_cgraph.svg @@ -0,0 +1,186 @@ + + + + + + +tests.test_doc_commands.test_handle_docgen_uninstall_hook + + + +Node1 + + +tests.test_doc_commands.test +_handle_docgen_uninstall_hook + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node4 + + + + + +Node9 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node2->Node9 + + + + + +Node10 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node2->Node10 + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node4->Node5 + + + + + +Node6 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node4->Node6 + + + + + +Node8 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node4->Node8 + + + + + +Node7 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node6->Node7 + + + + + +Node7->Node7 + + + + + +Node8->Node7 + + + + + +Node8->Node8 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 new file mode 100644 index 0000000..ef64a42 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.md5 @@ -0,0 +1 @@ +10d76966ac7089e8706fb1aec3e4f9d6 \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg new file mode 100644 index 0000000..2445c23 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a335e7fd4912192c7276cf31bbebc6eb0_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_with_file_exception + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_with_file_exception + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5 new file mode 100644 index 0000000..076630a --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.md5 @@ -0,0 +1 @@ +064f1a8c9470887507dea5cf5dd184eb \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg new file mode 100644 index 0000000..d0a2d25 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a4bb75610e40d94d42bc169b25403c186_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_folder_location + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_folder_location + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5 new file mode 100644 index 0000000..314f15d --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.md5 @@ -0,0 +1 @@ +e42b926dad2f0ff5205af415d972f1da \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg new file mode 100644 index 0000000..e97c365 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a64165ddfdb3071a88422f080f0e529a3_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_with_folder_exception + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_with_folder +_exception + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5 new file mode 100644 index 0000000..99c08a9 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.md5 @@ -0,0 +1 @@ +d4d1f9d92eb42ae249ce3409ab7627ac \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg new file mode 100644 index 0000000..46d7331 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_a806110833eb0aad547156faf014b31d8_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_no_location + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_no_location + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 new file mode 100644 index 0000000..28ac74a --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.md5 @@ -0,0 +1 @@ +810237d2c8640fcab5bd4448f12a9692 \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg new file mode 100644 index 0000000..6706a8c --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_ab158ffa48469b6c097a7a55fcb20c21a_cgraph.svg @@ -0,0 +1,186 @@ + + + + + + +tests.test_doc_commands.test_handle_docgen_generate + + + +Node1 + + +tests.test_doc_commands.test +_handle_docgen_generate + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node4 + + + + + +Node9 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node2->Node9 + + + + + +Node10 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node2->Node10 + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node4->Node5 + + + + + +Node6 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node4->Node6 + + + + + +Node8 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node4->Node8 + + + + + +Node7 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node6->Node7 + + + + + +Node7->Node7 + + + + + +Node8->Node7 + + + + + +Node8->Node8 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5 new file mode 100644 index 0000000..56e1467 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.md5 @@ -0,0 +1 @@ +dc60bba75d6f8dafbd4701e4ac271385 \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg new file mode 100644 index 0000000..b4c88c5 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_ab74688baa8c9b5ba302c2877a9789d05_cgraph.svg @@ -0,0 +1,186 @@ + + + + + + +tests.test_doc_commands.test_handle_docgen_install_hook + + + +Node1 + + +tests.test_doc_commands.test +_handle_docgen_install_hook + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node4 + + + + + +Node9 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node2->Node9 + + + + + +Node10 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node2->Node10 + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node4->Node5 + + + + + +Node6 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node4->Node6 + + + + + +Node8 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node4->Node8 + + + + + +Node7 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node6->Node7 + + + + + +Node7->Node7 + + + + + +Node8->Node7 + + + + + +Node8->Node8 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5 new file mode 100644 index 0000000..ef9f04c --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.md5 @@ -0,0 +1 @@ +7930a342103b95a29b43ca93e1212cff \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg new file mode 100644 index 0000000..6172b6f --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_aec76cc25c23476794234cdadbcaef0c0_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +tests.test_doc_commands.test_generate_doc_error_handling + + + +Node1 + + +tests.test_doc_commands.test +_generate_doc_error_handling + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5 b/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5 new file mode 100644 index 0000000..8969799 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.md5 @@ -0,0 +1 @@ +4dfa85ad92a13ab307edd504ab65bb1a \ No newline at end of file diff --git a/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg b/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg new file mode 100644 index 0000000..e5d09f9 --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__doc__commands_af9b01e5fc89255cac96747fa081c442c_cgraph.svg @@ -0,0 +1,186 @@ + + + + + + +tests.test_doc_commands.test_handle_docgen_no_token + + + +Node1 + + +tests.test_doc_commands.test +_handle_docgen_no_token + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + +Node3 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2->Node3 + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2->Node4 + + + + + +Node9 + + +penify_hook.commands.hook +_commands.install_git_hook + + + + + +Node2->Node9 + + + + + +Node10 + + +penify_hook.commands.hook +_commands.uninstall_git_hook + + + + + +Node2->Node10 + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node4->Node5 + + + + + +Node6 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node4->Node6 + + + + + +Node8 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node4->Node8 + + + + + +Node7 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node6->Node7 + + + + + +Node7->Node7 + + + + + +Node8->Node7 + + + + + +Node8->Node8 + + + + + diff --git a/docs345/docbook/namespacetests_1_1test__web__config.xml b/docs345/docbook/namespacetests_1_1test__web__config.xml new file mode 100644 index 0000000..3da073f --- /dev/null +++ b/docs345/docbook/namespacetests_1_1test__web__config.xml @@ -0,0 +1,12 @@ + +
+tests.test_web_config Namespace Reference +tests.test_web_config + + Classes + + class TestWebConfig + + + +
diff --git a/docs345/docbook/penify-cli-documentation_8md.xml b/docs345/docbook/penify-cli-documentation_8md.xml new file mode 100644 index 0000000..5611d5d --- /dev/null +++ b/docs345/docbook/penify-cli-documentation_8md.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md +
diff --git a/docs345/docbook/penify__hook_2____init_____8py.xml b/docs345/docbook/penify__hook_2____init_____8py.xml new file mode 100644 index 0000000..4d41e11 --- /dev/null +++ b/docs345/docbook/penify__hook_2____init_____8py.xml @@ -0,0 +1,5 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py +
diff --git a/docs345/docbook/penify__hook_2commands_2____init_____8py.xml b/docs345/docbook/penify__hook_2commands_2____init_____8py.xml new file mode 100644 index 0000000..1df86cf --- /dev/null +++ b/docs345/docbook/penify__hook_2commands_2____init_____8py.xml @@ -0,0 +1,14 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.commands + + + +
diff --git a/docs345/docbook/setup_8py.xml b/docs345/docbook/setup_8py.xml new file mode 100644 index 0000000..bf2a919 --- /dev/null +++ b/docs345/docbook/setup_8py.xml @@ -0,0 +1,43 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py + + Namespaces + + namespace setup + + + + + Variables + + setup.name + + setup.version + + setup.packages + + setup.install_requires + + setup.entry_points + + setup.author + + setup.author_email + + setup.description + + setup.long_description + + setup.long_description_content_type + + setup.url + + setup.classifiers + + setup.python_requires + + + +
diff --git a/docs345/docbook/test__commit__commands_8py.xml b/docs345/docbook/test__commit__commands_8py.xml new file mode 100644 index 0000000..5ff399a --- /dev/null +++ b/docs345/docbook/test__commit__commands_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py + + Classes + + class tests.test_commit_commands.TestCommitCommands + + + + + Namespaces + + namespace tests + + namespace tests.test_commit_commands + + + +
diff --git a/docs345/docbook/test__config__commands_8py.xml b/docs345/docbook/test__config__commands_8py.xml new file mode 100644 index 0000000..52541e5 --- /dev/null +++ b/docs345/docbook/test__config__commands_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py + + Classes + + class tests.test_config_commands.TestConfigCommands + + + + + Namespaces + + namespace tests + + namespace tests.test_config_commands + + + +
diff --git a/docs345/docbook/test__doc__commands_8py.xml b/docs345/docbook/test__doc__commands_8py.xml new file mode 100644 index 0000000..2474e6f --- /dev/null +++ b/docs345/docbook/test__doc__commands_8py.xml @@ -0,0 +1,41 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py + + Namespaces + + namespace tests + + namespace tests.test_doc_commands + + + + + Functions + + def tests.test_doc_commands.test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def tests.test_doc_commands.test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def tests.test_doc_commands.test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + + def tests.test_doc_commands.test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit) + + def tests.test_doc_commands.test_setup_docgen_parser () + + def tests.test_doc_commands.test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def tests.test_doc_commands.test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def tests.test_doc_commands.test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + + def tests.test_doc_commands.test_handle_docgen_no_token (mock_exit, mock_get_token) + + def tests.test_doc_commands.test_generate_doc_with_file_exception (mock_api_client, mock_getcwd) + + def tests.test_doc_commands.test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd) + + + +
diff --git a/docs345/docbook/test__web__config_8py.xml b/docs345/docbook/test__web__config_8py.xml new file mode 100644 index 0000000..4213ba9 --- /dev/null +++ b/docs345/docbook/test__web__config_8py.xml @@ -0,0 +1,21 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py + + Classes + + class tests.test_web_config.TestWebConfig + + + + + Namespaces + + namespace tests + + namespace tests.test_web_config + + + +
diff --git a/docs345/docbook/tests_2____init_____8py.xml b/docs345/docbook/tests_2____init_____8py.xml new file mode 100644 index 0000000..590e194 --- /dev/null +++ b/docs345/docbook/tests_2____init_____8py.xml @@ -0,0 +1,12 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py + + Namespaces + + namespace tests + + + +
diff --git a/docs345/docbook/ui__utils_8py.xml b/docs345/docbook/ui__utils_8py.xml new file mode 100644 index 0000000..ad14fca --- /dev/null +++ b/docs345/docbook/ui__utils_8py.xml @@ -0,0 +1,76 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py + + Namespaces + + namespace penify_hook + + namespace penify_hook.ui_utils + + + + + Functions + + def penify_hook.ui_utils.format_info (message) + + def penify_hook.ui_utils.format_success (message) + + def penify_hook.ui_utils.format_warning (message) + + def penify_hook.ui_utils.format_error (message) + + def penify_hook.ui_utils.format_highlight (message) + + def penify_hook.ui_utils.format_file_path (file_path) + + def penify_hook.ui_utils.print_info (message) + + def penify_hook.ui_utils.print_success (message) + + def penify_hook.ui_utils.print_warning (message) + + def penify_hook.ui_utils.print_error (message) + + def penify_hook.ui_utils.print_processing (file_path) + + def penify_hook.ui_utils.print_status (status, message) + + def penify_hook.ui_utils.create_progress_bar (total, desc="Processing", unit="item") + + def penify_hook.ui_utils.create_stage_progress_bar (stages, desc="Processing") + + def penify_hook.ui_utils.update_stage (pbar, stage_name) + + + + + Variables + + penify_hook.ui_utils.autoreset + + penify_hook.ui_utils.INFO_COLOR = Fore.CYAN + + penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN + + penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW + + penify_hook.ui_utils.ERROR_COLOR = Fore.RED + + penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE + + penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE + + string penify_hook.ui_utils.SUCCESS_SYMBOL = "✓" + + string penify_hook.ui_utils.WARNING_SYMBOL = "○" + + string penify_hook.ui_utils.ERROR_SYMBOL = "✗" + + string penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳" + + + +
diff --git a/docs345/docbook/utils_8py.xml b/docs345/docbook/utils_8py.xml new file mode 100644 index 0000000..28c1b26 --- /dev/null +++ b/docs345/docbook/utils_8py.xml @@ -0,0 +1,39 @@ + +
+/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py File Reference +/tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py + + Classes + + class penify_hook.utils.GitRepoNotFoundError + + + + + Namespaces + + namespace penify_hook + + namespace penify_hook.utils + + + + + Functions + + def penify_hook.utils.get_repo_details (Repo repo) + + def penify_hook.utils.recursive_search_git_folder (folder_path) + + def penify_hook.utils.find_git_parent (path) + + + + + Variables + + penify_hook.utils.logger = logging.getLogger(__name__) + + + +
diff --git a/docs345/xml/Doxyfile.xml b/docs345/xml/Doxyfile.xml new file mode 100644 index 0000000..f332857 --- /dev/null +++ b/docs345/xml/Doxyfile.xml @@ -0,0 +1,391 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/README_8md.xml b/docs345/xml/README_8md.xml new file mode 100644 index 0000000..d74636f --- /dev/null +++ b/docs345/xml/README_8md.xml @@ -0,0 +1,179 @@ + + + + README.md + + + + + +#PenifyCLITool + +![Tests](https://github.com/yourorganization/penify-cli/workflows/Tests/badge.svg) +![Coverage](./coverage.svg) + +ACLItooltogeneratesmartcommitmessages,codedocumentation,andmore. + +##Features + +-Automaticallygeneratedocumentationforyourcode +-Supportformultipleprogramminglanguages +-Githookintegrationforautomaticdocumentationoncommits +-Folderandfileanalysis + +##Installation + +InstallfromPyPI: + +```bash +pipinstallpenify +``` + +##Usage + +PenifyCLIprovidesseveralsubcommandsfordifferentfunctionalities,organizedintobasiccommands(nologinrequired)andadvancedcommands(loginrequired). + +##BasicCommands(Nologinrequired) + +###Commit + +GeneratesmartcommitmessagesusinglocalLLM: + +```bash +penifycommit[-m"Optionalmessage"][-e][-d] +``` + +Options: +-`-m,--message`:Optionalcustomcommitmessage +-`-e,--terminal`:Openeditortomodifycommitmessagebeforecommitting +-`-d,--description`:Generatecommitmessagewithbothtitleanddescription(withoutthisflag,onlytitleisgenerated) + +###Config + +ConfigurelocalLLMandJIRAsettings: + +```bash +#ConfigureLLMsettings +penifyconfigllm--modelMODEL_NAME[--api-baseAPI_URL][--api-keyAPI_KEY] + +#ConfigureLLMsettingsthroughwebinterface +penifyconfigllm-web + +#ConfigureJIRAsettings +penifyconfigjira--urlJIRA_URL--usernameUSERNAME--api-tokenTOKEN[--verify] + +#ConfigureJIRAsettingsthroughwebinterface +penifyconfigjira-web +``` + +##AdvancedCommands(Loginrequired) + +###Login + +TologinandobtainanAPItoken: + +```bash +penifylogin +``` + +Thiscommandwillopenabrowserwindowforauthentication.Aftersuccessfullogin,theAPIkeywillbesavedlocallyforfutureuse. + +###DocumentationGeneration + +GeneratedocumentationforGitdiff,filesorfolders: + +```bash +#GeneratedocumentationforlatestGitcommitdiff +penifydocgen + +#Generatedocumentationforspecificfileorfolder +penifydocgen-l/path/to/file/or/folder +``` + +Options: +-`-l,--location`:Pathtospecificfileorfolderfordocumentationgeneration(defaultstocurrentdirectory) + +###GitHookManagement + +InstalloruninstallGitpost-commithooks: + +```bash +#InstallGithook +penifydocgeninstall-hook[-l/path/to/repo] + +#UninstallGithook +penifydocgenuninstall-hook[-l/path/to/repo] +``` + +Options: +-`-l,--location`:PathtotheGitrepository(defaultstocurrentdirectory) + +##Authentication + +PenifyCLIusesanAPItokenforauthenticationwithadvancedfeatures. + +Ifnotokenisavailableandyoutrytoaccessanadvancedfeature,you'llbepromptedtologin. + +##LocalLLMConfiguration + +Forcommitmessagegeneration,PenifycanusealocalLLM.Configureitusing: + +```bash +penifyconfigllm--modelMODEL_NAME--api-baseAPI_URL--api-keyAPI_KEY +``` + +Commonconfigurations: +-OpenAI:`--modelgpt-3.5-turbo--api-basehttps://api.openai.com/v1--api-keyYOUR_KEY` +-Anthropic:`--modelclaude-2--api-basehttps://api.anthropic.com--api-keyYOUR_KEY` + +##JIRAIntegration + +ConfigureJIRAintegrationtoenhancecommitmessageswithissuedetails: + +```bash +penifyconfigjira--urlhttps://your-domain.atlassian.net--usernameyour-email@example.com--api-tokenYOUR_API_TOKEN +``` + +##Development + +Tosetupthedevelopmentenvironment: + +1.Clonetherepository: +```bash +gitclonehttps://github.com/SingularityX-ai/penify-cli.git +``` + +2.Installthepackageineditablemode: +```bash +pipinstall-e. +``` + +###RunningTests + +```bash +pytest +``` + +##License + +ThisprojectislicensedundertheMITLicense. + +##Author + +SumanSaurabh(ss.sumansaurabh92@gmail.com) + +##Contributing + +Contributionsarewelcome!PleasefeelfreetosubmitaPullRequest. + +##Issues + +Ifyouencounteranyproblemsorhavesuggestions,pleasefileanissueonthe[GitHubrepository](https://github.com/SingularityX-ai/penify/issues). + +##Support + +ForautomatedAPIDocumentation,ArchitectureDocumentation,CodeDocumentation,PullRequestDocumentation,orifyouneedademo,pleasejoinour[Discordsupportchannel](https://discord.gg/wqrc8JeV). + + + + diff --git a/docs345/xml/api__client_8py.xml b/docs345/xml/api__client_8py.xml new file mode 100644 index 0000000..2cc88a0 --- /dev/null +++ b/docs345/xml/api__client_8py.xml @@ -0,0 +1,183 @@ + + + + api_client.py + penify_hook::api_client::APIClient + penify_hook + penify_hook::api_client + + + + + +importjson +importos +importrequests +from.llm_clientimportLLMClient + +classAPIClient: +def__init__(self,api_url,api_token:str=None,bearer_token:str=None): +self.api_url=api_url +self.AUTH_TOKEN=api_token +self.BEARER_TOKEN=bearer_token + +defsend_file_for_docstring_generation(self,file_name,content,line_numbers,repo_details=None): +"""SendfilecontentandmodifiedlinestotheAPIandreturnmodified +content. + +Thisfunctionconstructsapayloadcontainingthefilepath,content, +andmodifiedlinenumbers,andsendsittoaspecifiedAPIendpointfor +processing.IthandlestheresponsefromtheAPI,returningthemodified +contentiftherequestissuccessful.Iftherequestfails,itlogsthe +errordetailsandreturnstheoriginalcontent. + +Args: +file_name(str):Thepathtothefilebeingsent. +content(str):Thecontentofthefiletobeprocessed. +line_numbers(list):Alistoflinenumbersthathavebeenmodified. +repo_details(str?):Additionalrepositorydetailsifapplicable.DefaultstoNone. + +Returns: +str:ThemodifiedcontentreturnedbytheAPI,ortheoriginalcontentifthe +requestfails. + +Raises: +Exception:Ifthereisanerrorinprocessingthefileandnospecificerror +messageisprovided. +""" +payload={ +'file_path':file_name, +'content':content, +'modified_lines':line_numbers +} +ifrepo_details: +payload['git_repo']=repo_details +url=self.api_url+"/v1/cli/file/generate/doc" +response=requests.post(url,json=payload,headers={"api-key":f"{self.AUTH_TOKEN}"},timeout=60*10) +ifresponse.status_code==200: +response=response.json() +returnresponse.get('modified_content') +else: +error_message=response.json().get('detail') +ifnoterror_message: +error_message=response.text + +raiseException(f"APIError:{error_message}") + +defgenerate_commit_summary(self,git_diff,instruction:str="",repo_details=None,jira_context:dict=None): +"""GenerateacommitsummarybysendingaPOSTrequesttotheAPIendpoint. + +Thisfunctionconstructsapayloadcontainingthegitdiffandany +additionalinstructionsprovided.Itthensendsthispayloadtoa +specifiedAPIendpointtogenerateasummaryofthecommit.Ifthe +requestissuccessful,itreturnstheresponsefromtheAPI;otherwise, +itreturnsNone. + +Args: +git_diff(str):Thegitdiffofthecommit. +instruction(str??):Additionalinstructionforthecommit.Defaultsto"". +repo_details(dict??):Detailsofthegitrepository.DefaultstoNone. +jira_context(dict??):JIRAissuedetailstoenhancethecommitsummary.DefaultstoNone. + +Returns: +dict:TheresponsefromtheAPIiftherequestissuccessful,Noneotherwise. + +Raises: +Exception:IfthereisanerrorduringtheAPIrequest. +""" +payload={ +'git_diff':git_diff, +'additional_instruction':instruction +} +ifrepo_details: +payload['git_repo']=repo_details + +#AddJIRAcontextifavailable +ifjira_context: +payload['jira_context']=jira_context + +url=self.api_url+"/v1/cli/commit/summary" +try: +response=requests.post(url,json=payload,headers +={"api-key":f"{self.AUTH_TOKEN}"},timeout=60*10) +ifresponse.status_code==200: +response=response.json() +returnresponse +else: +#print(f"Response:{response.status_code}") +#print(f"Error:{response.text}") +raiseException(f"APIError:{response.text}") +exceptExceptionase: +print(f"Error:{e}") +returnNone + +defget_supported_file_types(self)->list[str]: +"""RetrievethesupportedfiletypesfromtheAPI. + +ThisfunctionsendsarequesttotheAPIendpoint +`/v1/file/supported_languages`toobtainalistofsupportedfiletypes. +IftheAPIcallissuccessful(statuscode200),itparsestheJSON +responseandreturnsthelistofsupportedfiletypes.IftheAPIcall +fails,itreturnsadefaultlistofcommonfiletypes. + +Returns: +list[str]:Alistofsupportedfiletypes,eitherfromtheAPIoradefaultset. +""" + +url=self.api_url+"/v1/cli/supported_languages" +response=requests.get(url) +ifresponse.status_code==200: +response=response.json() +returnresponse +else: +return["py","js","ts","java","kt","cs","c"] + +defgenerate_commit_summary_with_llm(self,diff,message,generate_description:bool,repo_details,llm_client:LLMClient,jira_context=None): +"""GeneratesacommitsummaryusingalocalLLMclient.Ifanerroroccurs +duringthegenerationprocess, +itfallsbacktousingtheAPI. + +Args: +diff(str):TheGitdiffofchanges. +message(str):User-providedcommitmessageorinstructions. +generate_description(bool):Flagindicatingwhethertogenerateadescriptionforthecommit. +repo_details(dict):Detailsabouttherepository. +llm_client(LLMClient):AninstanceofLLMClientusedtogeneratethesummary. +jira_context(JIRAContext?):OptionalJIRAissuecontexttoenhancethesummary. + +Returns: +dict:Adictionarycontainingthetitleanddescriptionforthecommit. +""" +try: +returnllm_client.generate_commit_summary(diff,message,generate_description,repo_details,jira_context) +exceptExceptionase: +print(f"ErrorusinglocalLLM:{e}") +#FallbacktoAPIforcommitsummary +returnself.generate_commit_summary(diff,message,repo_details,jira_context) + +defget_api_key(self): +"""FetchanAPIkeyfromaspecifiedURL. + +ThisfunctionsendsaGETrequesttoretrieveanAPItokenusinga +Bearertokenintheheaders.IthandlestheresponseandreturnstheAPI +keyiftherequestissuccessful,or`None`otherwise. + +Returns: +str:TheAPIkeyiftherequestissuccessful,`None`otherwise. +""" + + +url=self.api_url+"/v1/apiToken/get" +response=requests.get(url,headers={"Authorization":f"Bearer{self.BEARER_TOKEN}"},timeout=60*10) +ifresponse.status_code==200: +response=response.json() +returnresponse.get('key') +else: +print(f"Response:{response.status_code}") +print(f"Error:{response.text}") +returnNone + + + + + diff --git a/docs345/xml/auth__commands_8py.xml b/docs345/xml/auth__commands_8py.xml new file mode 100644 index 0000000..307767a --- /dev/null +++ b/docs345/xml/auth__commands_8py.xml @@ -0,0 +1,196 @@ + + + + auth_commands.py + penify_hook + penify_hook::commands + penify_hook::commands::auth_commands + + + + + +importjson +importwebbrowser +importhttp.server +importsocketserver +importurllib.parse +importrandom +importos +fromthreadingimportThread +frompathlibimportPath + +defsave_credentials(api_key): +""" +SavethetokenandAPIkeysbasedonpriority: +1..envfileinGitreporoot(ifinagitrepo) +2..penifyfileinhomedirectory(globalfallback) + +Args: +api_key:TheAPIkeytosave + +Returns: +bool:Trueifsavedsuccessfully,Falseotherwise +""" +#Trytosavein.envfileingitrepofirst +try: +from..utilsimportrecursive_search_git_folder +current_dir=os.getcwd() +repo_root=recursive_search_git_folder(current_dir) + +ifrepo_root: +#We'reinagitrepo,saveto.envfile +env_file=Path(repo_root)/'.env' +try: +#Readexisting.envcontent +env_content={} +ifenv_file.exists(): +withopen(env_file,'r')asf: +forlineinf: +line=line.strip() +iflineandnotline.startswith('#')and'='inline: +key,value=line.split('=',1) +env_content[key.strip()]=value.strip() + +#UpdateAPItoken +env_content['PENIFY_API_TOKEN']=api_key + +#Writebackto.envfile +withopen(env_file,'w')asf: +forkey,valueinenv_content.items(): +f.write(f"{key}={value}\n") + +print(f"APItokensavedto{env_file}") +returnTrue +exceptExceptionase: +print(f"Errorsavingto.envfile:{str(e)}") +#Fallbacktosavingin.penifyglobalconfig +exceptExceptionase: +print(f"Errorfindinggitrepository:{str(e)}") + +#Fallbacktoglobal.penifyfileinhomedirectory +home_dir=Path.home() +penify_file=home_dir/'.penify' + +#Ifthefilealreadyexists,addthenewapikeytotheexistingfile +ifpenify_file.exists(): +withopen(penify_file,'r')asf: +credentials=json.load(f) +credentials['api_keys']=api_key +else: +credentials={ +'api_keys':api_key +} + +try: +withopen(penify_file,'w')asf: +json.dump(credentials,f) +print(f"APItokensavedtoglobalconfig{penify_file}") +returnTrue +exceptExceptionase: +print(f"Errorsavingcredentials:{str(e)}") +returnFalse + +deflogin(api_url,dashboard_url): +"""OpentheloginpageinawebbrowserandlistenfortheredirectURLto +capturethetoken. + +Thisfunctiongeneratesarandomredirectport,constructsthefull +loginURLwiththeprovideddashboardURL,openstheloginpageinthe +defaultwebbrowser,andsetsupasimpleHTTPservertolistenforthe +redirect.Uponreceivingtheredirect,itextractsthetokenfromthe +queryparameters,fetchesAPIkeysusingthetoken,savesthemif +successful,andhandlesloginfailuresbynotifyingtheuser. + +Args: +api_url(str):TheURLoftheAPIservicetofetchAPIkeys. +dashboard_url(str):TheURLofthedashboardwheretheuserwillberedirectedafterlogging +in. +""" +redirect_port=random.randint(30000,50000) +redirect_url=f"http://localhost:{redirect_port}/callback" + +full_login_url=f"{dashboard_url}?redirectUri={urllib.parse.quote(redirect_url)}" + +print(f"Openingloginpageinyourdefaultwebbrowser:{full_login_url}") +webbrowser.open(full_login_url) + +classTokenHandler(http.server.SimpleHTTPRequestHandler): +defdo_GET(self): +"""HandleaGETrequesttoprocesslogintokenandredirectordisplay +errormessage. + +ThismethodprocessestheincomingGETrequest,extractsthetokenfrom +thequerystring,andperformsactionsbasedonwhetherthetokenis +present.Ifthetokenisvalid,itredirectstheusertothePenify +dashboardandfetchesAPIkeysifsuccessful.Ifthetokenisinvalid, +itdisplaysanerrormessage. +""" + +query=urllib.parse.urlparse(self.path).query +query_components=urllib.parse.parse_qs(query) +token=query_components.get("token",[None])[0] + +iftoken: +self.send_response(200) +self.send_header("Content-type","text/html") +self.end_headers() +response=""" +<html> +<head> +<script> +setTimeout(function(){ +window.location.href='https://dashboard.penify.dev'; +},5000); +</script> +</head> +<body> +<h1>LoginSuccessful!</h1> +<p>YouwillberedirectedtothePenifydashboardin5seconds.YoucanalsoclosethiswindowandreturntotheCLI.</p> +</body> +</html> +""" +self.wfile.write(response.encode()) + +print(f"\nLoginsuccessful!FetchingAPIkeys...") +from..api_clientimportAPIClient +api_key=APIClient(api_url,None,token).get_api_key() +ifapi_key: +save_credentials(api_key) +print("APIkeysfetchedandsavedsuccessfully.") +print("You'llberedirectedtothePenifydashboard.YoucancontinueusingtheCLI.") +else: +print("FailedtofetchAPIkeys.") +else: +self.send_response(400) +self.send_header("Content-type","text/html") +self.end_headers() +response=""" +<html> +<body> +<h1>LoginFailed</h1> +<p>Pleasetryagain.</p> +</body> +</html> +""" +self.wfile.write(response.encode()) +print("\nLoginfailed.Pleasetryagain.") + +#Scheduletheservershutdown +thread=Thread(target=self.server.shutdown) +thread.daemon=True +thread.start() + +deflog_message(self,format,*args): +#Suppresslogmessages +return + +withsocketserver.TCPServer(("",redirect_port),TokenHandler)ashttpd: +print(f"Listeningonport{redirect_port}fortheredirect...") +httpd.serve_forever() + +print("Loginprocesscompleted.YoucannowuseothercommandswithyourAPItoken.") + + + + diff --git a/docs345/xml/base__analyzer_8py.xml b/docs345/xml/base__analyzer_8py.xml new file mode 100644 index 0000000..3071dfd --- /dev/null +++ b/docs345/xml/base__analyzer_8py.xml @@ -0,0 +1,36 @@ + + + + base_analyzer.py + penify_hook::base_analyzer::BaseAnalyzer + penify_hook + penify_hook::base_analyzer + + + + + +importos +fromgitimportRepo +from.api_clientimportAPIClient +frompenify_hook.utilsimportget_repo_details,recursive_search_git_folder + + +classBaseAnalyzer: + +def__init__(self,folder_path:str,api_client:APIClient): +self.folder_path=folder_path +self.repo_path=recursive_search_git_folder(folder_path) +self.repo=None +self.repo_details=None +ifself.folder_path: +self.repo=Repo(self.repo_path) +self.repo_details=get_repo_details(self.repo) + +self.relative_file_path=os.path.relpath(folder_path) +self.api_client=api_client +self.supported_file_types=set(api_client.get_supported_file_types()) + + + + diff --git a/docs345/xml/classException.xml b/docs345/xml/classException.xml new file mode 100644 index 0000000..2277730 --- /dev/null +++ b/docs345/xml/classException.xml @@ -0,0 +1,32 @@ + + + + Exception + penify_hook.utils.GitRepoNotFoundError + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/classpenify__hook_1_1api__client_1_1APIClient.xml b/docs345/xml/classpenify__hook_1_1api__client_1_1APIClient.xml new file mode 100644 index 0000000..8711c1a --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1api__client_1_1APIClient.xml @@ -0,0 +1,346 @@ + + + + penify_hook::api_client::APIClient + + + + penify_hook.api_client.APIClient::api_url + + api_url + penify_hook.api_client.APIClient.api_url + + + + + + + + penify_hook.api_client.APIClient.generate_commit_summary + penify_hook.api_client.APIClient.get_api_key + penify_hook.api_client.APIClient.get_supported_file_types + penify_hook.api_client.APIClient.send_file_for_docstring_generation + + + + penify_hook.api_client.APIClient::AUTH_TOKEN + + AUTH_TOKEN + penify_hook.api_client.APIClient.AUTH_TOKEN + + + + + + + + + + + penify_hook.api_client.APIClient::BEARER_TOKEN + + BEARER_TOKEN + penify_hook.api_client.APIClient.BEARER_TOKEN + + + + + + + + + + + + def + def penify_hook.api_client.APIClient.__init__ + (self, api_url, str api_token=None, str bearer_token=None) + __init__ + penify_hook.api_client.APIClient.__init__ + + self + self + + + api_url + api_url + + + str + api_token + None + + + str + bearer_token + None + + + + + + + + + + + def + def penify_hook.api_client.APIClient.send_file_for_docstring_generation + (self, file_name, content, line_numbers, repo_details=None) + send_file_for_docstring_generation + penify_hook.api_client.APIClient.send_file_for_docstring_generation + + self + self + + + file_name + file_name + + + content + content + + + line_numbers + line_numbers + + + repo_details + repo_details + None + + + + +Send file content and modified lines to the API and return modified +content. + +This function constructs a payload containing the file path, content, +and modified line numbers, and sends it to a specified API endpoint for +processing. It handles the response from the API, returning the modified +content if the request is successful. If the request fails, it logs the +error details and returns the original content. + +Args: + file_name (str): The path to the file being sent. + content (str): The content of the file to be processed. + line_numbers (list): A list of line numbers that have been modified. + repo_details (str?): Additional repository details if applicable. Defaults to None. + +Returns: + str: The modified content returned by the API, or the original content if the + request fails. + +Raises: + Exception: If there is an error in processing the file and no specific error + message is provided. + + + + + + penify_hook.api_client.APIClient.api_url + + + def + def penify_hook.api_client.APIClient.generate_commit_summary + (self, git_diff, str instruction="", repo_details=None, dict jira_context=None) + generate_commit_summary + penify_hook.api_client.APIClient.generate_commit_summary + + self + self + + + git_diff + git_diff + + + str + instruction + "" + + + repo_details + repo_details + None + + + dict + jira_context + None + + + + +Generate a commit summary by sending a POST request to the API endpoint. + +This function constructs a payload containing the git diff and any +additional instructions provided. It then sends this payload to a +specified API endpoint to generate a summary of the commit. If the +request is successful, it returns the response from the API; otherwise, +it returns None. + +Args: + git_diff (str): The git diff of the commit. + instruction (str??): Additional instruction for the commit. Defaults to "". + repo_details (dict??): Details of the git repository. Defaults to None. + jira_context (dict??): JIRA issue details to enhance the commit summary. Defaults to None. + +Returns: + dict: The response from the API if the request is successful, None otherwise. + +Raises: + Exception: If there is an error during the API request. + + + + + + penify_hook.api_client.APIClient.api_url + penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + + list[str] + list[str] penify_hook.api_client.APIClient.get_supported_file_types + (self) + get_supported_file_types + penify_hook.api_client.APIClient.get_supported_file_types + + self + self + + + + +Retrieve the supported file types from the API. + +This function sends a request to the API endpoint +`/v1/file/supported_languages` to obtain a list of supported file types. +If the API call is successful (status code 200), it parses the JSON +response and returns the list of supported file types. If the API call +fails, it returns a default list of common file types. + +Returns: + list[str]: A list of supported file types, either from the API or a default set. + + + + + + penify_hook.api_client.APIClient.api_url + + + def + def penify_hook.api_client.APIClient.generate_commit_summary_with_llm + (self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None) + generate_commit_summary_with_llm + penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + self + self + + + diff + diff + + + message + message + + + bool + generate_description + + + repo_details + repo_details + + + LLMClient + llm_client + + + jira_context + jira_context + None + + + + +Generates a commit summary using a local LLM client. If an error occurs +during the generation process, +it falls back to using the API. + +Args: + diff (str): The Git diff of changes. + message (str): User-provided commit message or instructions. + generate_description (bool): Flag indicating whether to generate a description for the commit. + repo_details (dict): Details about the repository. + llm_client (LLMClient): An instance of LLMClient used to generate the summary. + jira_context (JIRAContext?): Optional JIRA issue context to enhance the summary. + +Returns: + dict: A dictionary containing the title and description for the commit. + + + + + + penify_hook.api_client.APIClient.generate_commit_summary + penify_hook.llm_client.LLMClient.generate_commit_summary + + + def + def penify_hook.api_client.APIClient.get_api_key + (self) + get_api_key + penify_hook.api_client.APIClient.get_api_key + + self + self + + + + +Fetch an API key from a specified URL. + +This function sends a GET request to retrieve an API token using a +Bearer token in the headers. It handles the response and returns the API +key if the request is successful, or `None` otherwise. + +Returns: + str: The API key if the request is successful, `None` otherwise. + + + + + + penify_hook.api_client.APIClient.api_url + + + + + + + + + + + + + + + penify_hook::api_client::APIClient__init__ + penify_hook::api_client::APIClientapi_url + penify_hook::api_client::APIClientAUTH_TOKEN + penify_hook::api_client::APIClientBEARER_TOKEN + penify_hook::api_client::APIClientgenerate_commit_summary + penify_hook::api_client::APIClientgenerate_commit_summary_with_llm + penify_hook::api_client::APIClientget_api_key + penify_hook::api_client::APIClientget_supported_file_types + penify_hook::api_client::APIClientsend_file_for_docstring_generation + + + diff --git a/docs345/xml/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml b/docs345/xml/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml new file mode 100644 index 0000000..78661b0 --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.xml @@ -0,0 +1,211 @@ + + + + penify_hook::base_analyzer::BaseAnalyzer + penify_hook.commit_analyzer.CommitDocGenHook + penify_hook.file_analyzer.FileAnalyzerGenHook + penify_hook.folder_analyzer.FolderAnalyzerGenHook + penify_hook.git_analyzer.GitDocGenHook + + + + penify_hook.base_analyzer.BaseAnalyzer::folder_path + + folder_path + penify_hook.base_analyzer.BaseAnalyzer.folder_path + + + + + + + + + + + penify_hook.base_analyzer.BaseAnalyzer::repo_path + + repo_path + penify_hook.base_analyzer.BaseAnalyzer.repo_path + + + + + + + + penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + penify_hook.git_analyzer.GitDocGenHook.process_file + + + + penify_hook.base_analyzer.BaseAnalyzer::repo + + repo + penify_hook.base_analyzer.BaseAnalyzer.repo + + + + + + + + penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + penify_hook.git_analyzer.GitDocGenHook.run + penify_hook.commit_analyzer.CommitDocGenHook.run + + + + penify_hook.base_analyzer.BaseAnalyzer::repo_details + + repo_details + penify_hook.base_analyzer.BaseAnalyzer.repo_details + + + + + + + + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + + + penify_hook.base_analyzer.BaseAnalyzer::relative_file_path + + relative_file_path + penify_hook.base_analyzer.BaseAnalyzer.relative_file_path + + + + + + + + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + + + penify_hook.base_analyzer.BaseAnalyzer::api_client + + api_client + penify_hook.base_analyzer.BaseAnalyzer.api_client + + + + + + + + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + + + penify_hook.base_analyzer.BaseAnalyzer::supported_file_types + + supported_file_types + penify_hook.base_analyzer.BaseAnalyzer.supported_file_types + + + + + + + + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + + + + def + def penify_hook.base_analyzer.BaseAnalyzer.__init__ + (self, str folder_path, APIClient api_client) + __init__ + penify_hook.base_analyzer.BaseAnalyzer.__init__ + __init__ + __init__ + __init__ + __init__ + + self + self + + + str + folder_path + + + APIClient + api_client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + penify_hook::base_analyzer::BaseAnalyzer__init__ + penify_hook::base_analyzer::BaseAnalyzerapi_client + penify_hook::base_analyzer::BaseAnalyzerfolder_path + penify_hook::base_analyzer::BaseAnalyzerrelative_file_path + penify_hook::base_analyzer::BaseAnalyzerrepo + penify_hook::base_analyzer::BaseAnalyzerrepo_details + penify_hook::base_analyzer::BaseAnalyzerrepo_path + penify_hook::base_analyzer::BaseAnalyzersupported_file_types + + + diff --git a/docs345/xml/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml b/docs345/xml/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml new file mode 100644 index 0000000..8d77f23 --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.xml @@ -0,0 +1,288 @@ + + + + penify_hook::commit_analyzer::CommitDocGenHook + penify_hook.base_analyzer.BaseAnalyzer + + + + penify_hook.commit_analyzer.CommitDocGenHook::llm_client + + llm_client + penify_hook.commit_analyzer.CommitDocGenHook.llm_client + + + + + + + + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + + + + def + def penify_hook.commit_analyzer.CommitDocGenHook.__init__ + (self, str repo_path, APIClient api_client, llm_client=None, jira_client=None) + __init__ + penify_hook.commit_analyzer.CommitDocGenHook.__init__ + __init__ + + self + self + + + str + repo_path + + + APIClient + api_client + + + llm_client + llm_client + None + + + jira_client + jira_client + None + + + + + + + + + penify_hook.commit_analyzer.CommitDocGenHook.__init__ + penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + + dict + dict penify_hook.commit_analyzer.CommitDocGenHook.get_summary + (self, str instruction, bool generate_description) + get_summary + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + self + self + + + str + instruction + + + bool + generate_description + + + + +Generate a summary for the commit based on the staged changes. + +This function retrieves the differences of the staged changes in the +repository and generates a commit summary using the provided +instruction. If there are no changes staged for commit, an exception is +raised. If a JIRA client is connected, it will attempt to extract issue +keys from the current branch and use them to fetch context. The summary +can be generated either with a Language Model (LLM) client or through +the API client. + +Args: + instruction (str): A string containing instructions for generating the commit summary. + generate_description (bool): Whether to include detailed descriptions in the summary. + +Returns: + dict: The generated commit summary based on the staged changes, provided + instruction, and any relevant JIRA context. The dictionary contains keys + such as 'summary', 'description', etc., depending on whether a + description was requested. + +Raises: + ValueError: If there are no changes staged for commit. + + + + + + penify_hook.base_analyzer.BaseAnalyzer.api_client + penify_hook.jira_client.JiraClient.jira_client + penify_hook.commit_analyzer.CommitDocGenHook.llm_client + penify_hook.ui_utils.print_info + penify_hook.base_analyzer.BaseAnalyzer.repo + penify_hook.base_analyzer.BaseAnalyzer.repo_details + penify_hook.commit_analyzer.CommitDocGenHook.run + + + def + def penify_hook.commit_analyzer.CommitDocGenHook.run + (self, Optional[str] msg, bool edit_commit_message, bool generate_description) + run + penify_hook.commit_analyzer.CommitDocGenHook.run + + self + self + + + Optional + msg + [str] + + + bool + edit_commit_message + + + bool + generate_description + + + + +Run the post-commit hook. + +This method processes the modified files from the last commit, stages +them, and creates an auto-commit with an optional message. It also +handles JIRA integration if available. If there is an error generating +the commit summary, an exception is raised. + +Args: + msg (Optional[str]): An optional message to include in the commit. + edit_commit_message (bool): A flag indicating whether to open the git commit edit terminal after + committing. + generate_description (bool): A flag indicating whether to include a description in the commit + message. + +Raises: + Exception: If there is an error generating the commit summary. + + + + + + penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.jira_client.JiraClient.jira_client + penify_hook.ui_utils.print_info + penify_hook.ui_utils.print_success + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + penify_hook.base_analyzer.BaseAnalyzer.repo + + + tuple + tuple penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + (self, str title, str description, str msg) + process_jira_integration + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + self + self + + + str + title + + + str + description + + + str + msg + + + + +Process JIRA integration for the commit message. + +Args: + title (str): Generated commit title. + description (str): Generated commit description. + msg (str): Original user message that might contain JIRA references. + +Returns: + tuple: A tuple containing the updated commit title and description with + included JIRA information. + + + + + + penify_hook.jira_client.JiraClient.jira_client + penify_hook.ui_utils.print_info + penify_hook.ui_utils.print_warning + penify_hook.base_analyzer.BaseAnalyzer.repo + penify_hook.commit_analyzer.CommitDocGenHook.run + + + + + def + def penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + (self) + _amend_commit + penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + self + self + + + + +Open the default git editor for editing the commit message. + +This function changes the current working directory to the repository +path, runs the git command to amend the last commit, and opens the +default editor for the user to modify the commit message. After the +operation, it returns to the original directory. + + + + + + penify_hook.base_analyzer.BaseAnalyzer.repo_path + penify_hook.commit_analyzer.CommitDocGenHook.run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + penify_hook::commit_analyzer::CommitDocGenHook__init__ + penify_hook::commit_analyzer::CommitDocGenHook_amend_commit + penify_hook::commit_analyzer::CommitDocGenHookget_summary + penify_hook::commit_analyzer::CommitDocGenHookllm_client + penify_hook::commit_analyzer::CommitDocGenHookprocess_jira_integration + penify_hook::commit_analyzer::CommitDocGenHookrun + + + diff --git a/docs345/xml/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml b/docs345/xml/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml new file mode 100644 index 0000000..c07f4fd --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.xml @@ -0,0 +1,184 @@ + + + + penify_hook::file_analyzer::FileAnalyzerGenHook + penify_hook.base_analyzer.BaseAnalyzer + + + + penify_hook.file_analyzer.FileAnalyzerGenHook::file_path + + file_path + penify_hook.file_analyzer.FileAnalyzerGenHook.file_path + + + + + + + + penify_hook.file_analyzer.FileAnalyzerGenHook.run + + + + + def + def penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ + (self, str file_path, APIClient api_client) + __init__ + penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ + __init__ + + self + self + + + str + file_path + + + APIClient + api_client + + + + + + + + + + + def + def penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + (self, file_path, pbar, str new_param="") + process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + self + self + + + file_path + file_path + + + pbar + pbar + + + str + new_param + "" + + + + +Processes a file by validating its extension, reading content, generating documentation, +and writing changes back to the file. + +Args: + file_path (str): The path of the file to be processed. + pbar (tqdm.tqdm): A progress bar object to update the status of processing stages. + + + + + penify_hook.base_analyzer.BaseAnalyzer.api_client + penify_hook.ui_utils.print_warning + penify_hook.base_analyzer.BaseAnalyzer.relative_file_path + penify_hook.base_analyzer.BaseAnalyzer.repo_details + penify_hook.base_analyzer.BaseAnalyzer.supported_file_types + penify_hook.ui_utils.update_stage + penify_hook.file_analyzer.FileAnalyzerGenHook.run + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing + (self, file_path) + print_processing + penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing + + self + self + + + file_path + file_path + + + + +Prints a formatted message indicating that a file is being processed. + + + + + penify_hook.ui_utils.format_file_path + + + def + def penify_hook.file_analyzer.FileAnalyzerGenHook.run + (self) + run + penify_hook.file_analyzer.FileAnalyzerGenHook.run + + self + self + + + + +Runs the documentation process with a progress bar. + + + + + penify_hook.ui_utils.create_stage_progress_bar + penify_hook.file_analyzer.FileAnalyzerGenHook.file_path + penify_hook.ui_utils.print_status + penify_hook.ui_utils.print_success + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + penify_hook.ui_utils.update_stage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + penify_hook::file_analyzer::FileAnalyzerGenHook__init__ + penify_hook::file_analyzer::FileAnalyzerGenHookfile_path + penify_hook::file_analyzer::FileAnalyzerGenHookprint_processing + penify_hook::file_analyzer::FileAnalyzerGenHookprocess_file + penify_hook::file_analyzer::FileAnalyzerGenHookrun + + + diff --git a/docs345/xml/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml b/docs345/xml/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml new file mode 100644 index 0000000..a19eb53 --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.xml @@ -0,0 +1,158 @@ + + + + penify_hook::folder_analyzer::FolderAnalyzerGenHook + penify_hook.base_analyzer.BaseAnalyzer + + + + penify_hook.folder_analyzer.FolderAnalyzerGenHook::dir_path + + dir_path + penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path + + + + + + + + penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + + + + def + def penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ + (self, str dir_path, APIClient api_client) + __init__ + penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ + __init__ + + self + self + + + str + dir_path + + + APIClient + api_client + + + + + + + + + + + def + def penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + (self, str dir_path) + list_all_files_in_dir + penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + self + self + + + str + dir_path + + + + +List all non-hidden files in a directory and its subdirectories. + +This function recursively traverses the specified directory and its +subdirectories, collecting paths of all non-hidden files. It filters out +hidden directories and files (those starting with a dot) to ensure only +visible files are returned. + +Args: + dir_path (str): The path to the directory whose files and subdirectory files need to be + listed. + +Returns: + list: A list containing the full paths of all non-hidden files within the + specified directory and its subdirectories. + + + + + + penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + + def + def penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + (self) + run + penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + self + self + + + + +Run the post-commit hook. + +This function processes all files in a specified directory using a +progress bar. It lists all files, initializes a `FileAnalyzerGenHook` +for each file, and runs it. Errors during processing of individual files +are caught and logged, but do not stop the processing of other files. A +progress bar is displayed indicating the number of files processed. + +Args: + self (PostCommitHook): The instance of the post-commit hook class. + + + + + + penify_hook.base_analyzer.BaseAnalyzer.api_client + penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path + penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + penify_hook::folder_analyzer::FolderAnalyzerGenHook__init__ + penify_hook::folder_analyzer::FolderAnalyzerGenHookdir_path + penify_hook::folder_analyzer::FolderAnalyzerGenHooklist_all_files_in_dir + penify_hook::folder_analyzer::FolderAnalyzerGenHookrun + + + diff --git a/docs345/xml/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml b/docs345/xml/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml new file mode 100644 index 0000000..0cc4d5a --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.xml @@ -0,0 +1,228 @@ + + + + penify_hook::git_analyzer::GitDocGenHook + penify_hook.base_analyzer.BaseAnalyzer + + + def + def penify_hook.git_analyzer.GitDocGenHook.__init__ + (self, str repo_path, APIClient api_client) + __init__ + penify_hook.git_analyzer.GitDocGenHook.__init__ + __init__ + + self + self + + + str + repo_path + + + APIClient + api_client + + + + + + + + + penify_hook.git_analyzer.GitDocGenHook.__init__ + penify_hook.git_analyzer.GitDocGenHook.__init__ + + + def + def penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + (self) + get_modified_files_in_last_commit + penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + self + self + + + + +Get the list of files modified in the last commit. + +This function retrieves the files that were modified in the most recent +commit of the repository. It accesses the last commit and iterates +through the differences to compile a list of unique file paths that were +changed. The function returns this list for further processing or +analysis. + +Returns: + list: A list of file paths that were modified in the last commit. + + + + + + penify_hook.base_analyzer.BaseAnalyzer.repo + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.git_analyzer.GitDocGenHook.get_modified_lines + (self, diff_text) + get_modified_lines + penify_hook.git_analyzer.GitDocGenHook.get_modified_lines + + self + self + + + diff_text + diff_text + + + + +Extract modified line numbers from a diff text. + +This function processes a diff text to identify and extract the line +numbers that have been modified. It distinguishes between added and +deleted lines and keeps track of the current line number as it parses +through the diff. The function handles hunk headers and ensures that any +deletions at the end of the file are also captured. + +Args: + diff_text (str): A string containing the diff text to be processed. + +Returns: + list: A sorted list of unique line numbers that have been modified. + + + + + + penify_hook.git_analyzer.GitDocGenHook.process_file + + + def + def penify_hook.git_analyzer.GitDocGenHook.process_file + (self, file_path) + process_file + penify_hook.git_analyzer.GitDocGenHook.process_file + + self + self + + + file_path + file_path + + + + +Process a file by checking its type, reading its content, and sending it +to an API. + +This method constructs the absolute path of the specified file and +verifies if the file has a valid extension. If the file type is +supported, it reads the content of the file and retrieves the +differences from the last commit in the repository. If changes are +detected, it sends the file content along with the modified lines to an +API for further processing. If the API response indicates no changes, +the original file will not be overwritten. + +Args: + file_path (str): The relative path to the file to be processed. + +Returns: + bool: True if the file was successfully processed and updated, False + otherwise. + + + + + + penify_hook.base_analyzer.BaseAnalyzer.api_client + penify_hook.git_analyzer.GitDocGenHook.get_modified_lines + penify_hook.base_analyzer.BaseAnalyzer.repo + penify_hook.base_analyzer.BaseAnalyzer.repo_details + penify_hook.base_analyzer.BaseAnalyzer.repo_path + penify_hook.base_analyzer.BaseAnalyzer.supported_file_types + penify_hook.file_analyzer.FileAnalyzerGenHook.run + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.git_analyzer.GitDocGenHook.run + (self) + run + penify_hook.git_analyzer.GitDocGenHook.run + + self + self + + + + +Run the post-commit hook. + +This method retrieves the list of modified files from the last commit +and processes each file. It stages any files that have been modified +during processing and creates an auto-commit if changes were made. A +progress bar is displayed to indicate the processing status of each +file. The method handles any exceptions that occur during file +processing, printing an error message for each file that fails to +process. If any modifications are made to the files, an auto-commit is +created to save those changes. + + + + + + penify_hook.ui_utils.create_progress_bar + penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + penify_hook.ui_utils.print_info + penify_hook.ui_utils.print_processing + penify_hook.ui_utils.print_status + penify_hook.ui_utils.print_success + penify_hook.git_analyzer.GitDocGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + penify_hook.base_analyzer.BaseAnalyzer.repo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + penify_hook::git_analyzer::GitDocGenHook__init__ + penify_hook::git_analyzer::GitDocGenHookget_modified_files_in_last_commit + penify_hook::git_analyzer::GitDocGenHookget_modified_lines + penify_hook::git_analyzer::GitDocGenHookprocess_file + penify_hook::git_analyzer::GitDocGenHookrun + + + diff --git a/docs345/xml/classpenify__hook_1_1jira__client_1_1JiraClient.xml b/docs345/xml/classpenify__hook_1_1jira__client_1_1JiraClient.xml new file mode 100644 index 0000000..04a4435 --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1jira__client_1_1JiraClient.xml @@ -0,0 +1,559 @@ + + + + penify_hook::jira_client::JiraClient + + + + penify_hook.jira_client.JiraClient::jira_url + + jira_url + penify_hook.jira_client.JiraClient.jira_url + + + + + + + + + + + penify_hook.jira_client.JiraClient::jira_user + + jira_user + penify_hook.jira_client.JiraClient.jira_user + + + + + + + + + + + penify_hook.jira_client.JiraClient::jira_api_token + + jira_api_token + penify_hook.jira_client.JiraClient.jira_api_token + + + + + + + + + + + penify_hook.jira_client.JiraClient::jira_client + + jira_client + penify_hook.jira_client.JiraClient.jira_client + + + + + + + + penify_hook.jira_client.JiraClient.add_comment + penify_hook.jira_client.JiraClient.get_detailed_issue_context + penify_hook.jira_client.JiraClient.get_issue_details + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.jira_client.JiraClient.is_connected + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + penify_hook.commit_analyzer.CommitDocGenHook.run + penify_hook.jira_client.JiraClient.update_issue_status + + + + + def + def penify_hook.jira_client.JiraClient.__init__ + (self, str jira_url=None, str jira_user=None, str jira_api_token=None) + __init__ + penify_hook.jira_client.JiraClient.__init__ + + self + self + + + str + jira_url + None + + + str + jira_user + None + + + str + jira_api_token + None + + + + +Initialize the JIRA client. + +Args: + jira_url: Base URL for JIRA instance (e.g., "https://your-domain.atlassian.net") + jira_user: JIRA username or email + jira_api_token: JIRA API token + + + + + + + + bool + bool penify_hook.jira_client.JiraClient.is_connected + (self) + is_connected + penify_hook.jira_client.JiraClient.is_connected + + self + self + + + + +Check if the JIRA client is connected. + +This function verifies whether the JIRA client has successfully +established a connection. It returns `True` if the client is connected, +and `False` otherwise. + +Returns: + bool: True if the JIRA client is connected, False otherwise + + + + + + penify_hook.jira_client.JiraClient.jira_client + penify_hook.jira_client.JiraClient.add_comment + penify_hook.jira_client.JiraClient.enhance_commit_message + penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + penify_hook.jira_client.JiraClient.get_commit_context_from_issues + penify_hook.jira_client.JiraClient.get_detailed_issue_context + penify_hook.jira_client.JiraClient.get_issue_details + penify_hook.jira_client.JiraClient.update_issue_status + + + List[str] + List[str] penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + (self, str branch_name) + extract_issue_keys_from_branch + penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + + self + self + + + str + branch_name + + + + +Extracts JIRA issue keys from a branch name. + +This function searches through a given git branch name to find and +return any JIRA issue keys that match the pattern. Common conventions +for JIRA issue keys in branch names include: - +feature/PROJECT-123-description - bugfix/PROJECT-123-fix-something - +hotfix/PROJECT-123/short-desc + +Args: + branch_name (str): The name of the git branch to search for JIRA issue keys. + +Returns: + List[str]: A list of unique JIRA issue keys found in the branch name. + +Examples: + extract_issue_keys_from_branch("feature/PROJ-456-add-new-feature") + # Output: ['PROJ-456'] + + + + + + penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + penify_hook.ui_utils.print_info + penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + + + List[str] + List[str] penify_hook.jira_client.JiraClient.extract_issue_keys + (self, str text) + extract_issue_keys + penify_hook.jira_client.JiraClient.extract_issue_keys + + self + self + + + str + text + + + + +Extract JIRA issue keys from a given text. + +This function searches through the provided text to find and return all +unique JIRA issue keys. A JIRA issue key typically follows the pattern +of PROJECT-123, where PROJECT is alphanumeric and consists of at least +one uppercase letter followed by one or more alphanumeric characters, +and 123 is a numeric sequence. + +Args: + text (str): The text in which to search for JIRA issue keys. + +Returns: + List[str]: A list of unique JIRA issue keys found in the text. + + + + + + penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + + Optional[Dict[str, Any]] + Optional[Dict[str, Any]] penify_hook.jira_client.JiraClient.get_issue_details + (self, str issue_key) + get_issue_details + penify_hook.jira_client.JiraClient.get_issue_details + + self + self + + + str + issue_key + + + + +Retrieve details of a JIRA issue based on its key. + +This function fetches detailed information about a specified JIRA issue +using the provided issue key. It checks if the JIRA client is connected +before attempting to retrieve the issue. If the client is not connected, +it logs a warning and returns `None`. The function then attempts to +fetch the issue from the JIRA server and constructs a dictionary +containing various details about the issue such as its key, summary, +status, description, assignee, reporter, type, priority, and URL. If any +errors occur during this process, they are logged, and `None` is +returned. + +Args: + issue_key (str): The JIRA issue key (e.g., "PROJECT-123"). + +Returns: + Dict[str, Any] or None: A dictionary containing the details of the JIRA + issue if found, otherwise `None`. + + + + + + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.jira_client + penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + + bool + bool penify_hook.jira_client.JiraClient.add_comment + (self, str issue_key, str comment) + add_comment + penify_hook.jira_client.JiraClient.add_comment + + self + self + + + str + issue_key + + + str + comment + + + + +Add a comment to a JIRA issue. + +Args: + issue_key (str): JIRA issue key (e.g., "PROJECT-123") + comment (str): Comment text to add + +Returns: + bool: True if the comment was added successfully, False otherwise + + + + + + penify_hook.jira_client.JiraClient.add_comment + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.jira_client + penify_hook.jira_client.JiraClient.add_comment + + + bool + bool penify_hook.jira_client.JiraClient.update_issue_status + (self, str issue_key, str transition_name) + update_issue_status + penify_hook.jira_client.JiraClient.update_issue_status + + self + self + + + str + issue_key + + + str + transition_name + + + + +Update the status of a JIRA issue. + +Args: + issue_key (str): The key of the JIRA issue to be updated. + transition_name (str): The name of the desired transition. + +Returns: + bool: True if the status was successfully updated, False otherwise. + + + + + + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.jira_client + + + tuple + tuple penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + (self, str commit_title, str commit_description, List[str] issue_keys=None) + format_commit_message_with_jira_info + penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + self + self + + + str + commit_title + + + str + commit_description + + + List + issue_keys + [str] + None + + + + +Format commit message with JIRA issue information. + +Args: + commit_title (str): The original commit title. + commit_description (str): The original commit description. + issue_keys (List[str]?): A list of JIRA issue keys to include in the commit message. If not + provided, issue keys will be extracted from both the title and the + description. + +Returns: + tuple: A tuple containing the updated commit title and description with JIRA + information included. + + + + + + penify_hook.jira_client.JiraClient.extract_issue_keys + penify_hook.jira_client.JiraClient.get_issue_details + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.enhance_commit_message + + + Dict[str, Any] + Dict[str, Any] penify_hook.jira_client.JiraClient.get_detailed_issue_context + (self, str issue_key) + get_detailed_issue_context + penify_hook.jira_client.JiraClient.get_detailed_issue_context + + self + self + + + str + issue_key + + + + +Retrieve comprehensive details about a JIRA issue including context for +better commit messages. + +This function fetches detailed information from a specified JIRA issue +and constructs a dictionary containing various context fields such as +the issue summary, description, type, status, priority, comments, URL, +and additional custom fields like acceptance criteria and sprint +information. If any errors occur during the fetching process, +appropriate warnings or errors are logged. + +Args: + issue_key (str): The JIRA issue key (e.g., "PROJECT-123"). + +Returns: + Dict[str, Any]: A dictionary containing business and technical context from the issue. + + + + + + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.jira_client + penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + + Dict[str, Any] + Dict[str, Any] penify_hook.jira_client.JiraClient.get_commit_context_from_issues + (self, List[str] issue_keys) + get_commit_context_from_issues + penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + self + self + + + List + issue_keys + [str] + + + + +Gather contextual information from JIRA issues to improve commit +messages. + +This function processes a list of JIRA issue keys, retrieves detailed +context for each issue, and aggregates it into a dictionary that can be +used to enhance commit messages. It first retrieves the primary issue +(the first key in the list) and then gathers basic details for any +related issues. The resulting context includes information from both the +primary and related issues, along with all issue keys. + +Args: + issue_keys: List of JIRA issue keys to gather information from + +Returns: + Dict containing business and technical context from the issues + + + + + + penify_hook.jira_client.JiraClient.get_detailed_issue_context + penify_hook.jira_client.JiraClient.get_issue_details + penify_hook.jira_client.JiraClient.is_connected + penify_hook.jira_client.JiraClient.enhance_commit_message + + + tuple + tuple penify_hook.jira_client.JiraClient.enhance_commit_message + (self, str title, str description, List[str] issue_keys) + enhance_commit_message + penify_hook.jira_client.JiraClient.enhance_commit_message + + self + self + + + str + title + + + str + description + + + List + issue_keys + [str] + + + + +Enhance a commit message with business and technical context from JIRA +issues. + +Args: + title (str): Original commit title. + description (str): Original commit description. + issue_keys (List[str]): List of JIRA issue keys to include in the enhanced commit message. + +Returns: + tuple: A tuple containing the enhanced commit title and description with added + context from JIRA issues. + + + + + + penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + penify_hook.jira_client.JiraClient.get_commit_context_from_issues + penify_hook.jira_client.JiraClient.is_connected + + + + + +Client for interacting with JIRA API + + + + + + + + + + + penify_hook::jira_client::JiraClient__init__ + penify_hook::jira_client::JiraClientadd_comment + penify_hook::jira_client::JiraClientenhance_commit_message + penify_hook::jira_client::JiraClientextract_issue_keys + penify_hook::jira_client::JiraClientextract_issue_keys_from_branch + penify_hook::jira_client::JiraClientformat_commit_message_with_jira_info + penify_hook::jira_client::JiraClientget_commit_context_from_issues + penify_hook::jira_client::JiraClientget_detailed_issue_context + penify_hook::jira_client::JiraClientget_issue_details + penify_hook::jira_client::JiraClientis_connected + penify_hook::jira_client::JiraClientjira_api_token + penify_hook::jira_client::JiraClientjira_client + penify_hook::jira_client::JiraClientjira_url + penify_hook::jira_client::JiraClientjira_user + penify_hook::jira_client::JiraClientupdate_issue_status + + + diff --git a/docs345/xml/classpenify__hook_1_1llm__client_1_1LLMClient.xml b/docs345/xml/classpenify__hook_1_1llm__client_1_1LLMClient.xml new file mode 100644 index 0000000..adeff2a --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1llm__client_1_1LLMClient.xml @@ -0,0 +1,190 @@ + + + + penify_hook::llm_client::LLMClient + + + + penify_hook.llm_client.LLMClient::model + + model + penify_hook.llm_client.LLMClient.model + + + + + + + + penify_hook.llm_client.LLMClient.generate_commit_summary + + + + + + penify_hook.llm_client.LLMClient::_litellm + + _litellm + penify_hook.llm_client.LLMClient._litellm + + + + + + + + penify_hook.llm_client.LLMClient.litellm + + + + + def + def penify_hook.llm_client.LLMClient.__init__ + (self, str model=None, str api_base=None, str api_key=None) + __init__ + penify_hook.llm_client.LLMClient.__init__ + + self + self + + + str + model + None + + + str + api_base + None + + + str + api_key + None + + + + +Initialize the LLM client. + +Args: + model: LLM model to use (e.g., "gpt-4", "ollama/llama2", etc.) + api_base: Base URL for API requests (e.g., "http://localhost:11434" for Ollama) + api_key: API key for the LLM service + + + + + + + + def + def penify_hook.llm_client.LLMClient.litellm + (self) + litellm + penify_hook.llm_client.LLMClient.litellm + + self + self + + + + +Lazy load litellm only when needed. + + + + + penify_hook.llm_client.LLMClient._litellm + penify_hook.llm_client.LLMClient.generate_commit_summary + + + Dict + Dict penify_hook.llm_client.LLMClient.generate_commit_summary + (self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None) + generate_commit_summary + penify_hook.llm_client.LLMClient.generate_commit_summary + + self + self + + + str + diff + + + str + message + + + bool + generate_description + + + Dict + repo_details + + + Dict + jira_context + None + + + + +Generate a commit summary using the LLM. + +This function generates a concise and descriptive commit summary based +on the provided Git diff, user instructions, repository details, and +optional JIRA context. It constructs a prompt for the LLM to produce a +commit title and an optional detailed description, adhering to Semantic +Commit Messages guidelines. If the JIRA context is provided, it enriches +the prompt with relevant issue information. + +Args: + diff (str): Git diff of changes. + message (str): User-provided commit message or instructions. + generate_description (bool): Flag indicating whether to include a detailed description in the + summary. + repo_details (Dict): Details about the repository. + jira_context (Dict?): Optional JIRA issue context to enhance the summary. + +Returns: + Dict: A dictionary containing the title and description for the commit. If + generate_description is False, + the 'description' key may be absent. + +Raises: + ValueError: If the LLM model is not configured. + + + + + + penify_hook.llm_client.LLMClient.litellm + penify_hook.llm_client.LLMClient.model + penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + + + + +Client for interacting with LLM models using LiteLLM. + + + + + + + + + + + penify_hook::llm_client::LLMClient__init__ + penify_hook::llm_client::LLMClient_litellm + penify_hook::llm_client::LLMClientgenerate_commit_summary + penify_hook::llm_client::LLMClientlitellm + penify_hook::llm_client::LLMClientmodel + + + diff --git a/docs345/xml/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml b/docs345/xml/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml new file mode 100644 index 0000000..f40e622 --- /dev/null +++ b/docs345/xml/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.xml @@ -0,0 +1,38 @@ + + + + penify_hook::utils::GitRepoNotFoundError + Exception + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml b/docs345/xml/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml new file mode 100644 index 0000000..74c6a42 --- /dev/null +++ b/docs345/xml/classtests_1_1test__commit__commands_1_1TestCommitCommands.xml @@ -0,0 +1,551 @@ + + + + tests::test_commit_commands::TestCommitCommands + + + def + def tests.test_commit_commands.TestCommitCommands.mock_api_client + (self) + mock_api_client + tests.test_commit_commands.TestCommitCommands.mock_api_client + + self + self + + + + +Mocks an instance of APIClient using unittest.mock. + +This function creates a mock object for APIClient and yields it along +with the mocked instance. It is useful for testing purposes where real +API calls should be avoided. + +Yields: + tuple: A tuple containing the mock of APIClient and the mocked instance of + APIClient. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.mock_llm_client + (self) + mock_llm_client + tests.test_commit_commands.TestCommitCommands.mock_llm_client + + self + self + + + + +Mock an instance of LLMClient for testing purposes. + +This function yields a mock object representing an instance of +LLMClient, which can be used to simulate interactions with a language +model during testing. The mock is patched to replace the actual +LLMClient class from the penify_hook module. + +Yields: + tuple: A tuple containing two elements: + - mock (MagicMock): The mock object for LLMClient. + - llm_client_instance (MagicMock): An instance of the mocked LLMClient. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.mock_jira_client + (self) + mock_jira_client + tests.test_commit_commands.TestCommitCommands.mock_jira_client + + self + self + + + + +Create a mock JIRA client for testing purposes. + +This function yields a tuple containing a mock JIRA client instance and +its `is_connected` method. The mock client is configured to simulate an +active connection. This is useful for unit tests that require +interaction with a JIRA client without making actual network calls. + +Yields: + tuple: A tuple containing the mocked JIRA client instance and its + `is_connected` method. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen + (self) + mock_commit_doc_gen + tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen + + self + self + + + + +Mocks the CommitDocGenHook class and returns a MagicMock instance. + +This function uses the `patch` decorator from the `unittest.mock` module +to create a mock of the `CommitDocGenHook` class. It then sets up this +mock to return a new `MagicMock` instance when invoked. The function +yields both the mock object and the mocked instance, allowing for easy +testing of functions that rely on `CommitDocGenHook`. + +Returns: + tuple: A tuple containing two elements: + - mock (patch): The patch object used to mock the `CommitDocGenHook` + class. + - doc_gen_instance (MagicMock): The mocked instance of + `CommitDocGenHook`. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.mock_git_folder_search + (self) + mock_git_folder_search + tests.test_commit_commands.TestCommitCommands.mock_git_folder_search + + self + self + + + + +Mock the `recursive_search_git_folder` function to return a predefined +git folder path. + +This function uses the `patch` decorator from the `unittest.mock` module +to intercept calls to `penify_hook.utils.recursive_search_git_folder`. +When called, it will return '/mock/git/folder' instead of performing an +actual search. This is useful for testing purposes where you need a +consistent response without interacting with the file system. + +Yields: + MagicMock: A mock object that simulates the `recursive_search_git_folder` function. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.mock_print_functions + (self) + mock_print_functions + tests.test_commit_commands.TestCommitCommands.mock_print_functions + + self + self + + + + +Mocks the print functions from `penify_hook.ui_utils` for testing +purposes. + +This function uses Python's `unittest.mock.patch` to replace the actual +print functions (`print`, `print_warning`, and `print_error`) with mock +objects. These mock objects can be used in tests to capture calls made +to these print functions without actually printing anything. + +Yields: + tuple: A tuple containing three mock objects corresponding to `print_info`, + `print_warning`, + and `print_error`. + + + + + + + + def + def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client + (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client) + test_commit_code_with_llm_client + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client + + self + self + + + mock_error + mock_error + + + mock_warning + mock_warning + + + mock_info + mock_info + + + mock_git_folder_search + mock_git_folder_search + + + mock_doc_gen + mock_doc_gen + + + mock_llm_client + mock_llm_client + + + mock_api_client + mock_api_client + + + + +Test committing code using an LLM client. + +This function sets up mock objects for various components and then calls +the `commit_code` function with specified parameters. It verifies that +the correct mocks are created and called with the appropriate arguments. + +Args: + mock_error (MagicMock): Mock object for error handling. + mock_warning (MagicMock): Mock object for warning logging. + mock_info (MagicMock): Mock object for info logging. + mock_git_folder_search (MagicMock): Mock object to simulate git folder search. + mock_doc_gen (MagicMock): Mock object for document generation. + mock_llm_client (MagicMock): Mock object for LLM client interaction. + mock_api_client (MagicMock): Mock object for API client interaction. + + + + + + penify_hook.commands.commit_commands.commit_code + + + def + def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client + (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client) + test_commit_code_with_jira_client + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client + + self + self + + + mock_error + mock_error + + + mock_warning + mock_warning + + + mock_info + mock_info + + + mock_git_folder_search + mock_git_folder_search + + + mock_doc_gen + mock_doc_gen + + + mock_jira_client + mock_jira_client + + + mock_llm_client + mock_llm_client + + + mock_api_client + mock_api_client + + + + +Test committing code using a JIRA client. + +This function tests the commit_code function with various parameters, +including API and JIRA credentials. It sets up mock objects for +dependencies such as the JIRA client, LLM client, and doc generator to +simulate the behavior of the real classes. The function then calls +commit_code and verifies that the JIRA client and doc generator are +called with the correct parameters. + +Args: + mock_error (MagicMock): A MagicMock object for simulating error logging. + mock_warning (MagicMock): A MagicMock object for simulating warning logging. + mock_info (MagicMock): A MagicMock object for simulating info logging. + mock_git_folder_search (MagicMock): A MagicMock object for simulating the git folder search function. + mock_doc_gen (MagicMock): A MagicMock object for simulating the doc generator function. + mock_jira_client (MagicMock): A MagicMock object for simulating the JIRA client class. + mock_llm_client (MagicMock): A MagicMock object for simulating the LLM client class. + mock_api_client (MagicMock): A MagicMock object for simulating the API client class. + + + + + + penify_hook.commands.commit_commands.commit_code + + + def + def tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure + (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client) + test_commit_code_with_jira_connection_failure + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure + + self + self + + + mock_error + mock_error + + + mock_warning + mock_warning + + + mock_info + mock_info + + + mock_git_folder_search + mock_git_folder_search + + + mock_doc_gen + mock_doc_gen + + + mock_jira_client + mock_jira_client + + + mock_api_client + mock_api_client + + + + +Test the commit_code function when JIRA connection fails. + +This function tests the scenario where the JIRA connection fails during +a code commit. It sets up various mocks to simulate different components +of the system and then calls the `commit_code` function with specific +parameters. The function is expected to handle the JIRA connection +failure gracefully by logging an appropriate warning. + +Args: + mock_error (MagicMock): Mock for error logging. + mock_warning (MagicMock): Mock for warning logging. + mock_info (MagicMock): Mock for info logging. + mock_git_folder_search (MagicMock): Mock for searching the Git folder. + mock_doc_gen (MagicMock): Mock for generating documentation. + mock_jira_client (MagicMock): Mock for creating a JIRA client. + mock_api_client (MagicMock): Mock for creating an API client. + + + + + + penify_hook.commands.commit_commands.commit_code + + + def + def tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling + (self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client) + test_commit_code_error_handling + tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling + + self + self + + + mock_print + mock_print + + + mock_exit + mock_exit + + + mock_git_folder_search + mock_git_folder_search + + + mock_doc_gen + mock_doc_gen + + + mock_api_client + mock_api_client + + + + +Test the error handling in the test_commit_code function. + +This function sets up mocks to simulate exceptions and test the error +handling of the commit_code function. It verifies that the function +correctly prints an error message and exits with a status code of 1 when +an exception occurs during documentation generation. + +Args: + mock_print (MagicMock): Mock for the print function, used to verify error message output. + mock_exit (MagicMock): Mock for the sys.exit function, used to verify exit behavior. + mock_git_folder_search (MagicMock): Mock for the git_folder_search function, returning a mock Git folder + path. + mock_doc_gen (MagicMock): Mock for the doc_gen function, simulating an exception during + documentation generation. + mock_api_client (MagicMock): Mock for the API client class, not directly used but referenced in the + function signature. + + + + + + penify_hook.commands.commit_commands.commit_code + + + def + def tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser + (self) + test_setup_commit_parser + tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser + + self + self + + + + +Set up the argument parser for the commit command. + +This function configures an argument parser to handle various options +for committing changes. It adds three arguments: - '-m' or '--message': +An optional argument to specify a contextual commit message with a +default value of "N/A". - '-e' or '--terminal': A boolean flag to open +an edit terminal before committing. - '-d' or '--description': A boolean +flag that, when set to False, indicates the generation of a commit +message with title and description. + +Args: + parser (MagicMock): The argument parser to be configured. + + + + + + penify_hook.commands.commit_commands.setup_commit_parser + + + def + def tests.test_commit_commands.TestCommitCommands.test_handle_commit + (self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config) + test_handle_commit + tests.test_commit_commands.TestCommitCommands.test_handle_commit + + self + self + + + mock_print_info + mock_print_info + + + mock_commit_code + mock_commit_code + + + mock_get_token + mock_get_token + + + mock_get_llm_config + mock_get_llm_config + + + mock_get_jira_config + mock_get_jira_config + + + + +Test the handle_commit function with various mock objects. + +This function sets up mocks for retrieving LLM configuration, JIRA +configuration, and commit code. It then creates an argument object and +calls the handle_commit function. Finally, it verifies that the mock +functions were called with the expected arguments. + +Args: + mock_print_info (MagicMock): Mock object for printing information. + mock_commit_code (MagicMock): Mock object for committing code. + mock_get_token (MagicMock): Mock object for retrieving API token. + mock_get_llm_config (MagicMock): Mock object for retrieving LLM configuration. + mock_get_jira_config (MagicMock): Mock object for retrieving JIRA configuration. + + + + + + penify_hook.commands.commit_commands.handle_commit + + + + + + + + + + + + + + + tests::test_commit_commands::TestCommitCommandsmock_api_client + tests::test_commit_commands::TestCommitCommandsmock_commit_doc_gen + tests::test_commit_commands::TestCommitCommandsmock_git_folder_search + tests::test_commit_commands::TestCommitCommandsmock_jira_client + tests::test_commit_commands::TestCommitCommandsmock_llm_client + tests::test_commit_commands::TestCommitCommandsmock_print_functions + tests::test_commit_commands::TestCommitCommandstest_commit_code_error_handling + tests::test_commit_commands::TestCommitCommandstest_commit_code_with_jira_client + tests::test_commit_commands::TestCommitCommandstest_commit_code_with_jira_connection_failure + tests::test_commit_commands::TestCommitCommandstest_commit_code_with_llm_client + tests::test_commit_commands::TestCommitCommandstest_handle_commit + tests::test_commit_commands::TestCommitCommandstest_setup_commit_parser + + + diff --git a/docs345/xml/classtests_1_1test__config__commands_1_1TestConfigCommands.xml b/docs345/xml/classtests_1_1test__config__commands_1_1TestConfigCommands.xml new file mode 100644 index 0000000..dacd0b1 --- /dev/null +++ b/docs345/xml/classtests_1_1test__config__commands_1_1TestConfigCommands.xml @@ -0,0 +1,578 @@ + + + + tests::test_config_commands::TestConfigCommands + + + def + def tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir + (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) + test_get_penify_config_existing_dir + tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir + + self + self + + + mock_file_open + mock_file_open + + + mock_makedirs + mock_makedirs + + + mock_path + mock_path + + + mock_git_folder + mock_git_folder + + + + +Test the get_penify_config function when the .penify config directory +exists. + +It should not create a new directory and assert that all mocked +functions were called correctly. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the open() function. + mock_makedirs (MagicMock): A MagicMock object simulating the os.makedirs() function. + mock_path (MagicMock): A MagicMock object simulating the Path class from pathlib module. + mock_git_folder (MagicMock): A MagicMock object simulating the git_folder_search() function. + + + + + + penify_hook.commands.config_commands.get_penify_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir + (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder) + test_get_penify_config_new_dir + tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir + + self + self + + + mock_file_open + mock_file_open + + + mock_makedirs + mock_makedirs + + + mock_path + mock_path + + + mock_git_folder + mock_git_folder + + + + +Test the behavior of get_penify_config when the .penify directory does +not exist. + +This function mocks various system calls to simulate a scenario where +the .penify directory is not present. It then asserts that the +appropriate actions are taken to create the directory and write an empty +JSON file. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the `open` function. + mock_makedirs (MagicMock): A MagicMock object simulating the `os.makedirs` function. + mock_path (MagicMock): A MagicMock object simulating the `Path` class from `pathlib`. + mock_git_folder (MagicMock): A MagicMock object simulating a git folder search function. + + + + + + penify_hook.commands.config_commands.get_penify_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists + (self, mock_file_open, mock_get_config) + test_get_llm_config_exists + tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists + + self + self + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test the get_llm_config function when the configuration file exists. + +This function sets up a mock configuration file that exists and returns +it when called. It then calls the get_llm_config function and asserts +that it returns the correct configuration dictionary. Additionally, it +checks that the mock_file_open function was called with the correct +arguments. + +Args: + mock_file_open (MagicMock): A mock for the open() function. + mock_get_config (MagicMock): A mock for the get_config() function. + + + + + + penify_hook.commands.config_commands.get_llm_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty + (self, mock_file_open, mock_get_config) + test_get_llm_config_empty + tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty + + self + self + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test the behavior of get_llm_config when called with an empty +configuration file. + +This function sets up a mock configuration file that exists but returns +no content. It then calls the `get_llm_config` function and asserts that +it returns an empty dictionary and that the file open method was called +exactly once with the correct arguments. + +Args: + mock_file_open (MagicMock): A MagicMock object simulating the built-in open function. + mock_get_config (MagicMock): A MagicMock object simulating the get_config function. + + + + + + penify_hook.commands.config_commands.get_llm_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json + (self, mock_print, mock_file_open, mock_get_config) + test_get_llm_config_invalid_json + tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json + + self + self + + + mock_print + mock_print + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test function to verify the behavior of get_llm_config when reading an +invalid JSON file. + +It sets up a mock configuration file that exists but contains invalid +JSON. The function is expected to handle this gracefully by printing an +error message and returning an empty dictionary. + +Args: + mock_print (MagicMock): Mock for the print function. + mock_file_open (MagicMock): Mock for the open function. + mock_get_config (MagicMock): Mock for the get_config function, which returns the mock configuration + file. + + + + + + penify_hook.commands.config_commands.get_llm_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists + (self, mock_file_open, mock_get_config) + test_get_jira_config_exists + tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists + + self + self + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test that get_jira_config returns the correct JIRA configuration when +the configuration file exists. + +It sets up a mock for the configuration file to simulate its existence +and verifies that the function reads from the correct file and returns +the expected JIRA configuration dictionary. Additionally, it checks that +the mock file open is called with the appropriate arguments. + +Args: + mock_file_open (MagicMock): A mock for the `open` function. + mock_get_config (MagicMock): A mock for the `get_config` function, which is expected to return a mock + configuration file object. + +Returns: + None: This test function does not explicitly return anything. Its assertions + serve as the verification of its correctness. + + + + + + penify_hook.commands.config_commands.get_jira_config + + + def + def tests.test_config_commands.TestConfigCommands.test_save_llm_config_success + (self, mock_print, mock_json_dump, mock_file_open, mock_get_config) + test_save_llm_config_success + tests.test_config_commands.TestConfigCommands.test_save_llm_config_success + + self + self + + + mock_print + mock_print + + + mock_json_dump + mock_json_dump + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test the save_llm_config function successfully. + +This function tests that the save_llm_config function correctly saves an +LLM configuration and handles various mock objects and side effects. It +ensures that the function returns True upon successful execution, writes +the expected configuration to a file, and prints a confirmation message. + +Args: + mock_print (MagicMock): A mock object for the print function. + mock_json_dump (MagicMock): A mock object for json.dump. + mock_file_open (MagicMock): A mock object for file opening. + mock_get_config (MagicMock): A mock object to return a configuration file mock. + + + + + + penify_hook.commands.config_commands.save_llm_config + + + def + def tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure + (self, mock_print, mock_file_open, mock_get_config) + test_save_llm_config_failure + tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure + + self + self + + + mock_print + mock_print + + + mock_file_open + mock_file_open + + + mock_get_config + mock_get_config + + + + +Test function to verify that the save_llm_config function returns False +and prints an error message when it fails to save the LLM configuration +due to a permission error. + +It sets up a mock configuration file that exists and calls the +save_llm_config function with valid parameters. The function is expected +to return False and print "Error saving LLM configuration: Permission +denied" in case of a failure. + +Args: + self (TestLLMConfig): An instance of the test class. + mock_print (MagicMock): A MagicMock object representing the print function, which will be used + to assert that it was called with the expected error message. + mock_file_open (MagicMock): A MagicMock object representing the open function, which is not used in + this test but is included as a parameter for completeness. + mock_get_config (MagicMock): A MagicMock object representing the get_config function, which will be + used to return the mock configuration file. + + + + + + penify_hook.commands.config_commands.save_llm_config + + + def + def tests.test_config_commands.TestConfigCommands.test_save_jira_config_success + (self, mock_print, mock_json_dump, mock_file_open, mock_path) + test_save_jira_config_success + tests.test_config_commands.TestConfigCommands.test_save_jira_config_success + + self + self + + + mock_print + mock_print + + + mock_json_dump + mock_json_dump + + + mock_file_open + mock_file_open + + + mock_path + mock_path + + + + +Test the save_jira_config function to ensure it saves JIRA configuration +successfully. + +This function sets up mocks for various dependencies and tests the +functionality of saving a JIRA configuration. It asserts that the +function returns `True`, the JSON dump is called with the correct +configuration, and the print statement contains the expected message. + +Args: + mock_print (MagicMock): Mock for the print function. + mock_json_dump (MagicMock): Mock for the json.dump function. + mock_file_open (MagicMock): Mock for the open function. + mock_path (MagicMock): Mock for the path module. + + + + + + penify_hook.commands.config_commands.save_jira_config + + + def + def tests.test_config_commands.TestConfigCommands.test_get_token_from_env + (self, mock_file_open, mock_path, mock_getenv) + test_get_token_from_env + tests.test_config_commands.TestConfigCommands.test_get_token_from_env + + self + self + + + mock_file_open + mock_file_open + + + mock_path + mock_path + + + mock_getenv + mock_getenv + + + + +Test retrieving a token from the environment variable. + +This function tests the behavior of `get_token` when an environment +variable is set. It verifies that if the 'PENIFY_API_TOKEN' environment +variable exists, the function returns its value without attempting to +read a file. + +Args: + mock_file_open (MagicMock): A MagicMock object for simulating file operations. + mock_path (MagicMock): A MagicMock object for simulating path operations. + mock_getenv (MagicMock): A MagicMock object for simulating environment variable retrieval. + + + + + + penify_hook.commands.config_commands.get_token + + + def + def tests.test_config_commands.TestConfigCommands.test_get_token_from_config + (self, mock_file_open, mock_path, mock_getenv) + test_get_token_from_config + tests.test_config_commands.TestConfigCommands.test_get_token_from_config + + self + self + + + mock_file_open + mock_file_open + + + mock_path + mock_path + + + mock_getenv + mock_getenv + + + + +Test retrieving a token from the configuration. + +This function sets up mocks for environment variables and configuration +files, calls the `get_token` function, and asserts its behavior. It +verifies that when the environment variable is not found, the function +reads a token from a configuration file located in the user's home +directory. + +Args: + mock_file_open (MagicMock): A mock for the `open` function. + mock_path (MagicMock): A mock for the `pathlib.Path` class. + mock_getenv (MagicMock): A mock for the `os.getenv` function. + + + + + + penify_hook.commands.config_commands.get_token + + + def + def tests.test_config_commands.TestConfigCommands.test_get_token_not_found + (self, mock_file_open, mock_path, mock_getenv) + test_get_token_not_found + tests.test_config_commands.TestConfigCommands.test_get_token_not_found + + self + self + + + mock_file_open + mock_file_open + + + mock_path + mock_path + + + mock_getenv + mock_getenv + + + + +Test the get_token function when the API token environment variable is +not found. + +This function tests the scenario where the `PENIFY_API_TOKEN` +environment variable is not set. It mocks the environment variable to +return `None`, and verifies that the function returns `None`. The test +also checks that the environment variable is accessed once and that a +file open operation is attempted on a configuration file located in the +user's home directory. + +Args: + mock_file_open (MagicMock): Mock for the built-in `open` function. + mock_path (MagicMock): Mock for the `pathlib.Path` module. + mock_getenv (MagicMock): Mock for the `os.getenv` function. + +Returns: + None: The function does not return anything; it asserts conditions to verify + correctness. + + + + + + penify_hook.commands.config_commands.get_token + + + + + + + + + + + + + + + tests::test_config_commands::TestConfigCommandstest_get_jira_config_exists + tests::test_config_commands::TestConfigCommandstest_get_llm_config_empty + tests::test_config_commands::TestConfigCommandstest_get_llm_config_exists + tests::test_config_commands::TestConfigCommandstest_get_llm_config_invalid_json + tests::test_config_commands::TestConfigCommandstest_get_penify_config_existing_dir + tests::test_config_commands::TestConfigCommandstest_get_penify_config_new_dir + tests::test_config_commands::TestConfigCommandstest_get_token_from_config + tests::test_config_commands::TestConfigCommandstest_get_token_from_env + tests::test_config_commands::TestConfigCommandstest_get_token_not_found + tests::test_config_commands::TestConfigCommandstest_save_jira_config_success + tests::test_config_commands::TestConfigCommandstest_save_llm_config_failure + tests::test_config_commands::TestConfigCommandstest_save_llm_config_success + + + diff --git a/docs345/xml/classtests_1_1test__web__config_1_1TestWebConfig.xml b/docs345/xml/classtests_1_1test__web__config_1_1TestWebConfig.xml new file mode 100644 index 0000000..d218b6d --- /dev/null +++ b/docs345/xml/classtests_1_1test__web__config_1_1TestWebConfig.xml @@ -0,0 +1,112 @@ + + + + tests::test_web_config::TestWebConfig + + + def + def tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup + (self, mock_resource_filename, mock_server, mock_webbrowser) + test_config_llm_web_server_setup + tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup + + self + self + + + mock_resource_filename + mock_resource_filename + + + mock_server + mock_server + + + mock_webbrowser + mock_webbrowser + + + + +Set up and test the web server configuration for an LLM (Large Language +Model) web interface. + +This function configures a mock web server for testing purposes, +including setting up resource filenames, mocking server behavior, and +verifying that the web browser is opened and the server starts +correctly. The function uses various mocks to simulate external +dependencies such as `resource_filename` and `server`. + +Args: + mock_resource_filename (MagicMock): A MagicMock object simulating the `resource_filename` function. + mock_server (MagicMock): A MagicMock object simulating the context manager for the web server. + mock_webbrowser (MagicMock): A MagicMock object simulating the `webbrowser` module. + + + + + + penify_hook.commands.config_commands.config_llm_web + + + def + def tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup + (self, mock_resource_filename, mock_server, mock_webbrowser) + test_config_jira_web_server_setup + tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup + + self + self + + + mock_resource_filename + mock_resource_filename + + + mock_server + mock_server + + + mock_webbrowser + mock_webbrowser + + + + +Test the configuration and setup of a JIRA web server. + +This function tests the entire process of setting up a JIRA web server, +including mocking necessary resources, configuring the server to shut +down after handling one request, and verifying that the web browser is +opened with the correct URL. The function uses several mocks to simulate +external dependencies such as resource files, servers, and web browsers. + +Args: + mock_resource_filename (MagicMock): A MagicMock object for simulating the `resource_filename` function. + mock_server (MagicMock): A MagicMock object for simulating the server setup. + mock_webbrowser (MagicMock): A MagicMock object for simulating the web browser opening. + + + + + + penify_hook.commands.config_commands.config_jira_web + + + + + + + + + + + + + + + tests::test_web_config::TestWebConfigtest_config_jira_web_server_setup + tests::test_web_config::TestWebConfigtest_config_llm_web_server_setup + + + diff --git a/docs345/xml/combine.xslt b/docs345/xml/combine.xslt new file mode 100644 index 0000000..3bfa82c --- /dev/null +++ b/docs345/xml/combine.xslt @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/docs345/xml/commit-commands_8md.xml b/docs345/xml/commit-commands_8md.xml new file mode 100644 index 0000000..4ff7b63 --- /dev/null +++ b/docs345/xml/commit-commands_8md.xml @@ -0,0 +1,174 @@ + + + + commit-commands.md + + + + + +#PenifyCLI-CommitCommands + +The`commit`commandallowsyoutogeneratesmart,AI-poweredcommitmessagesforyourGitchanges.Thisdocumentexplainsallavailableoptionsandcombinations. + +##BasicUsage + +```bash +penifycommit +``` + +Bydefault,thiscommand: +-AnalyzesyourstagedGitchanges +-Generatesaconcisecommittitleonly +-UseslocalLLMifconfigured,orfallsbacktoPenifyAPI + +##CommandOptions + +###`-m,--message` + +Providecontextforthecommitmessagegeneration: + +```bash +penifycommit-m"Fixloginflow" +``` + +ThishinthelpstheAIunderstandyourintentionandimprovesthequalityofthegeneratedmessage. + +###`-e,--terminal` + +Openaneditortoreviewandeditthegeneratedcommitmessagebeforecommitting: + +```bash +penifycommit-e +``` + +ThisopensyourdefaultGiteditorwiththegeneratedmessageforreview. + +###`-d,--description` + +Generateadetailedcommitmessagewithbothtitleanddescription: + +```bash +penifycommit-d +``` + +Withoutthisflag,onlythecommittitleisgenerated. + +##OptionCombinations + +Youcancombinetheseoptionsfordifferentworkflows: + +###GenerateTitleOnlywithContext + +```bash +penifycommit-m"UpdateloginUI" +``` + +###GenerateTitleandDescriptionwithContext + +```bash +penifycommit-m"UpdateloginUI"-d +``` + +###GenerateandEditFullCommitMessage + +```bash +penifycommit-d-e +``` + +###Generate,Edit,andProvideContext + +```bash +penifycommit-m"Refactorauthentication"-d-e +``` + +##LLMandJIRAIntegration + +###UsingLocalLLM + +Ifyou'veconfiguredalocalLLMusing`penifyconfigllm`,thecommitcommandwillautomaticallyuseitformessagegeneration. + +Benefits: +-Privacy:yourcodechangesdon'tleaveyourmachine +-Speed:nonetworklatency +-Worksoffline + +###JIRAEnhancement + +Ifyou'veconfiguredJIRAintegrationusing`penifyconfigjira`,thecommitcommandwill: + +1.DetectJIRAissuereferencesinyourchanges +2.FetchissuedetailsfromyourJIRAinstance +3.Includeissueinformationinthecommitmessage +4.FormatthecommitmessageaccordingtoJIRA'ssmartcommitformat + +Exampleoutput: +``` +PROJ-123:Fixauthenticationbuginloginflow + +-UpdatedOAuthtokenvalidation +-Fixedsessiontimeouthandling +-Addedunittestsforedgecases + +[PROJ-123] +``` + +##ConfigurationRequirements + +Forthe`commit`commandtowork: + +1.Youmusthaveconfiguredeither: +-LocalLLMvia`penifyconfigllm`,OR +-Loggedinvia`penifylogin` + +2.ForJIRAenhancement(optional): +-ConfigureJIRAvia`penifyconfigjira` + +##Examples + +###BasicCommitwithDefaultSettings + +```bash +#Stageyourchanges +gitadd. + +#Generatecommitmessage +penifycommit + +#Commitwiththegeneratedmessage +gitcommit-m"Generatedmessagehere" +``` + +###FullWorkflowwithAllFeatures + +```bash +#Stageyourchanges +gitadd. + +#GeneratedetailedcommitmessagewithJIRAintegration, +#providecontext,andopeneditorforreview +penifycommit-m"Fixloginissue"-d-e + +#Thecommitisautomaticallycompletedafteryousaveandexittheeditor +``` + +##Troubleshooting + +###CommonIssues + +1.**"NoLLMmodelorAPItokenprovided"** +-Run`penifyconfigllm`toconfigurealocalLLM,or +-Run`penifylogin`toauthenticatewithPenify + +2.**"FailedtoconnecttoJIRA"** +-CheckyourJIRAconfigurationwith`cat~/.penify` +-Verifyyournetworkconnection +-EnsureyourJIRAcredentialsarevalid + +3.**"ErrorinitializingLLMclient"** +-VerifyyourLLMconfigurationsettings +-EnsuretheLLMAPIisaccessible + + + + diff --git a/docs345/xml/commit__analyzer_8py.xml b/docs345/xml/commit__analyzer_8py.xml new file mode 100644 index 0000000..07676b8 --- /dev/null +++ b/docs345/xml/commit__analyzer_8py.xml @@ -0,0 +1,198 @@ + + + + commit_analyzer.py + penify_hook::commit_analyzer::CommitDocGenHook + penify_hook + penify_hook::commit_analyzer + + + + + +importos +importre +importsubprocess +importtempfile +fromtypingimportOptional,List +fromgitimportRepo +fromtqdmimporttqdm + +frompenify_hook.base_analyzerimportBaseAnalyzer +frompenify_hook.jira_clientimportJiraClient +frompenify_hook.ui_utilsimportprint_info,print_success,print_warning +from.api_clientimportAPIClient + +classCommitDocGenHook(BaseAnalyzer): +def__init__(self,repo_path:str,api_client:APIClient,llm_client=None,jira_client=None): +super().__init__(repo_path,api_client) + +self.llm_client=llm_client#AddLLMclientasanoptionalparameter +self.jira_client:JiraClient=jira_client#AddJIRAclientasanoptionalparameter + +defget_summary(self,instruction:str,generate_description:bool)->dict: +"""Generateasummaryforthecommitbasedonthestagedchanges. + +Thisfunctionretrievesthedifferencesofthestagedchangesinthe +repositoryandgeneratesacommitsummaryusingtheprovided +instruction.Iftherearenochangesstagedforcommit,anexceptionis +raised.IfaJIRAclientisconnected,itwillattempttoextractissue +keysfromthecurrentbranchandusethemtofetchcontext.Thesummary +canbegeneratedeitherwithaLanguageModel(LLM)clientorthrough +theAPIclient. + +Args: +instruction(str):Astringcontaininginstructionsforgeneratingthecommitsummary. +generate_description(bool):Whethertoincludedetaileddescriptionsinthesummary. + +Returns: +dict:Thegeneratedcommitsummarybasedonthestagedchanges,provided +instruction,andanyrelevantJIRAcontext.Thedictionarycontainskeys +suchas'summary','description',etc.,dependingonwhethera +descriptionwasrequested. + +Raises: +ValueError:Iftherearenochangesstagedforcommit. +""" +diff=self.repo.git.diff('--cached') +ifnotdiff: +raiseValueError("Nochangestocommit") + +#GetJIRAcontextifavailable +jira_context=None +ifself.jira_clientandself.jira_client.is_connected(): +try: +#CheckbranchnameforJIRAissues +current_branch=self.repo.active_branch.name +issue_keys=self.jira_client.extract_issue_keys_from_branch(current_branch) + +#Ifissuesfoundinbranch,getcontext +ifissue_keys: +jira_context=self.jira_client.get_commit_context_from_issues(issue_keys) +exceptExceptionase: +print(f"CouldnotgetJIRAcontext:{e}") + +#UseLLMclientifprovided,otherwiseuseAPIclient +print_info("FetchingcommitsummaryfromLLM...") +ifself.llm_client: +returnself.api_client.generate_commit_summary_with_llm( +diff,instruction,generate_description,self.repo_details,self.llm_client,jira_context +) +else: +returnself.api_client.generate_commit_summary(diff,instruction,self.repo_details,jira_context) + + +defrun(self,msg:Optional[str],edit_commit_message:bool,generate_description:bool): +"""Runthepost-commithook. + +Thismethodprocessesthemodifiedfilesfromthelastcommit,stages +them,andcreatesanauto-commitwithanoptionalmessage.Italso +handlesJIRAintegrationifavailable.Ifthereisanerrorgenerating +thecommitsummary,anexceptionisraised. + +Args: +msg(Optional[str]):Anoptionalmessagetoincludeinthecommit. +edit_commit_message(bool):Aflagindicatingwhethertoopenthegitcommiteditterminalafter +committing. +generate_description(bool):Aflagindicatingwhethertoincludeadescriptioninthecommit +message. + +Raises: +Exception:Ifthereisanerrorgeneratingthecommitsummary. +""" +summary:dict=self.get_summary(msg,True) +ifnotsummary: +raiseException("Errorgeneratingcommitsummary") + +title=summary.get('title',"") +description=summary.get('description',"") + +#IfJIRAclientisavailable,integrateJIRAinformation +ifself.jira_clientandself.jira_client.is_connected(): +#AddJIRAinformationtocommitmessage +self.process_jira_integration(title,description,msg) + +#committhechangestotherepositorywithabovedetails +commit_msg=f"{title}\n\n{description}"ifgenerate_descriptionelsetitle +self.repo.git.commit('-m',commit_msg) +print_success(f"Commit:{commit_msg}") + +ifedit_commit_message: +#Openthegitcommiteditterminal +print_info("Openinggitcommiteditterminal...") +self._amend_commit() + +defprocess_jira_integration(self,title:str,description:str,msg:str)->tuple: +"""ProcessJIRAintegrationforthecommitmessage. + +Args: +title(str):Generatedcommittitle. +description(str):Generatedcommitdescription. +msg(str):OriginalusermessagethatmightcontainJIRAreferences. + +Returns: +tuple:Atuplecontainingtheupdatedcommittitleanddescriptionwith +includedJIRAinformation. +""" +#LookforJIRAissuekeysincommitmessage,title,descriptionandusermessage +issue_keys=[] +ifself.jira_client: +#Extractfrommessagecontent +issue_keys=self.jira_client.extract_issue_keys(f"{title}{description}{msg}") + +#Alsocheckthebranchname(whichoftenfollowsJIRAnamingconventions) +try: +current_branch=self.repo.active_branch.name +branch_issue_keys=self.jira_client.extract_issue_keys_from_branch(current_branch) + +#Addanynewkeysfoundinbranchname +forkeyinbranch_issue_keys: +ifkeynotinissue_keys: +issue_keys.append(key) +print_info(f"AddedJIRAissue{key}frombranchname:{current_branch}") +exceptExceptionase: +print_warning(f"CouldnotextractJIRAissuesfrombranchname:{e}") + +ifissue_keys: +print_info(f"FoundJIRAissues:{','.join(issue_keys)}") + +#FormatcommitmessagewithJIRAinfo + +#AddcommentstoJIRAissues +forissue_keyinissue_keys: +comment=( +f"Commitrelatedtothisissue:\n\n" +f"**{title}**\n\n" +f"{description}\n\n" +) +self.jira_client.add_comment(issue_key,comment) +else: +print_warning("NoJIRAissuesfoundincommitmessageorbranchname") + +returntitle,description + +def_amend_commit(self): +"""Openthedefaultgiteditorforeditingthecommitmessage. + +Thisfunctionchangesthecurrentworkingdirectorytotherepository +path,runsthegitcommandtoamendthelastcommit,andopensthe +defaulteditorfortheusertomodifythecommitmessage.Afterthe +operation,itreturnstotheoriginaldirectory. +""" +try: +#Changetotherepositorydirectory +os.chdir(self.repo_path) + +#Rungitcommit--amend +subprocess.run(['git','commit','--amend'],check=True) + +print("Commitmessageamendedsuccessfully.") +exceptsubprocess.CalledProcessErrorase: +print(f"Erroramendingcommitmessage:{e}") +finally: +#Changebacktotheoriginaldirectory +os.chdir(os.path.dirname(os.path.abspath(__file__))) + + + + diff --git a/docs345/xml/commit__commands_8py.xml b/docs345/xml/commit__commands_8py.xml new file mode 100644 index 0000000..91f0914 --- /dev/null +++ b/docs345/xml/commit__commands_8py.xml @@ -0,0 +1,184 @@ + + + + commit_commands.py + penify_hook + penify_hook::commands + penify_hook::commands::commit_commands + + + + + +importos +importsys +importargparse + +frompenify_hook.ui_utilsimportprint_info,print_warning + + +defcommit_code(api_url,token,message,open_terminal,generate_description, +llm_model=None,llm_api_base=None,llm_api_key=None, +jira_url=None,jira_user=None,jira_api_token=None): +"""EnhanceGitcommitswithAI-poweredcommitmessages. + +Thisfunctionallowsforthegenerationofenhancedcommitmessages +usingnaturallanguageprocessingmodelsandoptionallyintegrateswith +JIRAforadditionalcontext.ItprocessesthecurrentGitfoldertofind +relevantfilesandgeneratesadetailedcommitmessagebasedonthe +providedparameters. + +Args: +api_url(str):URLoftheAPIendpoint. +token(str):AuthenticationtokenfortheAPI. +message(str):Initialcommitmessageprovidedbytheuser. +open_terminal(bool):Whethertoopentheterminalaftercommitting. +generate_description(bool):Whethertogenerateadetaileddescriptioninthecommitmessage. +llm_model(str?):Thelanguagemodeltouseforgeneratingthecommitmessage.Defaultsto +None. +llm_api_base(str?):BaseURLoftheLLMAPI.DefaultstoNone. +llm_api_key(str?):APIkeyforaccessingtheLLMservice.DefaultstoNone. +jira_url(str?):URLoftheJIRAinstance.DefaultstoNone. +jira_user(str?):UsernameforauthenticatingwithJIRA.DefaultstoNone. +jira_api_token(str?):APItokenforaccessingJIRA.DefaultstoNone. +""" + +frompenify_hook.ui_utilsimportprint_error +frompenify_hook.utilsimportrecursive_search_git_folder +from..commit_analyzerimportCommitDocGenHook +from..api_clientimportAPIClient + +#Tryimportingoptionaldependencies +try: +from..llm_clientimportLLMClient +exceptImportError: +LLMClient=None + +try: +from..jira_clientimportJiraClient +exceptImportError: +JiraClient=None +#CreateAPIclient +api_client=APIClient(api_url,token) + +#InitializeLLMclientifLLMparametersareprovidedandLLMClientisavailable +llm_client=None +ifLLMClientisnotNoneandllm_model: +try: +llm_client=LLMClient( +model=llm_model, +api_base=llm_api_base, +api_key=llm_api_key +) +print_info(f"UsingLLMmodel:{llm_model}") +exceptExceptionase: +print_error(f"ErrorinitializingLLMclient:{e}") +print_error("FallingbacktoAPIforcommitsummarygeneration") +else: +ifnottoken: +print_error("NoLLMmodelorAPItokenprovided.PleaseprovideanLLMmodelorAPItoken.") + +#InitializeJIRAclientifparametersareprovidedandJiraClientisavailable +jira_client=None +ifJiraClientisnotNoneandjira_urlandjira_userandjira_api_token: +try: +jira_client=JiraClient( +jira_url=jira_url, +jira_user=jira_user, +jira_api_token=jira_api_token +) +ifjira_client.is_connected(): +print_info(f"ConnectedtoJIRA:{jira_url}") +else: +print_warning(f"FailedtoconnecttoJIRA:{jira_url}") +jira_client=None +exceptExceptionase: +print_warning(f"ErrorinitializingJIRAclient:{e}") +jira_client=None + +try: +#PasstheLLMclientandJIRAclienttoCommitDocGenHook +gf_path=recursive_search_git_folder(os.getcwd()) +analyzer=CommitDocGenHook(gf_path,api_client,llm_client,jira_client) +analyzer.run(message,open_terminal,generate_description) +exceptExceptionase: +print(f"Error:{e}") +sys.exit(1) + + + + + +defsetup_commit_parser(parser): +"""Generatesaparserforsettingupacommandtogeneratesmartcommit +messages. + +Thisfunctionsetsupanargumentparserthatcanbeusedtogenerate +commitmessageswithcontextualinformation.Itallowsuserstospecify +optionssuchasincludingamessage,openinganeditterminalbefore +committing,andgeneratingadetailedcommitmessage. + +Args: +parser(argparse.ArgumentParser):TheArgumentParserobjecttobeconfigured. +""" + +commit_parser_description=""" +Itgeneratessmartcommitmessages.Bydefault,itwilljustgeneratejusttheTitleofthecommitmessage. +1.IfyouhavenotconfiguredLLM,itwillgiveanerror.YoueitherneedtoconfigureLLMorusetheAPIkey. +2.IfyouhavenotconfiguredJIRA.ItwillnotenhancethecommitmessagewithJIRAissuedetails. +3.Formoreinformation,visithttps://penify.wiki/dcsgc1 +""" +parser.help="Generatesmartcommitmessagesusinglocal-LLM(nologinrequired)." +parser.description=commit_parser_description +parser.formatter_class=argparse.RawDescriptionHelpFormatter + +#Addthemessageargumentwithbetterhelp +parser.add_argument("-m","--message",required=False,help="Commitwithcontextualcommitmessage.",default="N/A") +parser.add_argument("-e","--terminal",action="store_true",help="Openeditterminalbeforecommitting.") +parser.add_argument("-d","--description",action="store_false",help="Itwillgeneratecommitmessagewithtitleanddescription.",default=False) + +defhandle_commit(args): +"""Handlethecommitfunctionalitybyprocessingargumentsandinvokingthe +appropriatecommands. + +Thisfunctionprocessestheprovidedcommand-lineargumentstoconfigure +settingsforcommitoperations,includingLLM(LanguageModel)andJira +configurations.Itthencallsthe`commit_code`functionwiththese +configurationstoperformtheactualcommitoperation. + +Args: +args(argparse.Namespace):Theparsedcommand-lineargumentscontainingoptionsliketerminal, +description,message,etc. +""" + +frompenify_hook.commands.commit_commandsimportcommit_code +frompenify_hook.commands.config_commandsimportget_jira_config,get_llm_config,get_token +frompenify_hook.constantsimportAPI_URL + +#Onlyimportdependenciesneededforcommitfunctionalityhere +open_terminal=args.terminal +generate_description=args.description +print_info(f"GenerateCommitDescription:{generate_description}") +#Trytogetfromconfig +llm_config=get_llm_config() +llm_model=llm_config.get('model') +llm_api_base=llm_config.get('api_base') +llm_api_key=llm_config.get('api_key') +token=get_token() + + + +#Trytogetfromconfig +jira_config=get_jira_config() +jira_url=jira_config.get('url') +jira_user=jira_config.get('username') +jira_api_token=jira_config.get('api_token') + + +commit_code(API_URL,token,args.message,open_terminal,generate_description, +llm_model,llm_api_base,llm_api_key, +jira_url,jira_user,jira_api_token) + + + + diff --git a/docs345/xml/compound.xsd b/docs345/xml/compound.xsd new file mode 100644 index 0000000..e0ffe43 --- /dev/null +++ b/docs345/xml/compound.xsd @@ -0,0 +1,1290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The mentioned file will be located in the directory as specified by XML_OUTPUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/config-commands_8md.xml b/docs345/xml/config-commands_8md.xml new file mode 100644 index 0000000..4eb0949 --- /dev/null +++ b/docs345/xml/config-commands_8md.xml @@ -0,0 +1,179 @@ + + + + config-commands.md + + + + + +#PenifyCLI-ConfigurationCommands + +The`config`commandallowsyoutosetupandmanageconfigurationsettingsforPenifyCLI.Thisdocumentexplainsallavailableconfigurationoptionsandhowtousethem. + +##ConfigurationOverview + +PenifyCLIstoresconfigurationinaJSONfileat`~/.penify/config.json`.Theconfigurationincludes: + +-LLM(LargeLanguageModel)settingsforlocalcommitmessagegeneration +-JIRAintegrationsettingsforenhancedcommitmessages +-APItokensandothercredentials + +##BasicUsage + +```bash +#ConfigureLLMsettings +penifyconfigllm + +#ConfigureJIRAintegration +penifyconfigjira +``` + +##LLMConfiguration + +###WebInterface + +Running`penifyconfigllm`opensawebinterfaceinyourbrowserwhereyoucanconfigure: + +1.**Model**:TheLLMmodeltouse(e.g.,`gpt-3.5-turbo`) +2.**APIBaseURL**:TheendpointURLforyourLLMAPI(e.g.,`https://api.openai.com/v1`) +3.**APIKey**:YourauthenticationkeyfortheLLMAPI + +###SupportedLLMs + +PenifyCLIsupportsvariousLLMproviders: + +####OpenAI +-Model:`gpt-3.5-turbo`or`gpt-4` +-APIBase:`https://api.openai.com/v1` +-APIKey:YourOpenAIAPIkey + +####Anthropic +-Model:`claude-instant-1`or`claude-2` +-APIBase:`https://api.anthropic.com/v1` +-APIKey:YourAnthropicAPIkey + +####Ollama(Local) +-Model:`llama2`oranymodelyouhaveinstalled +-APIBase:`http://localhost:11434` +-APIKey:(leaveblank) + +####AzureOpenAI +-Model:Yourdeployedmodelname +-APIBase:YourAzureendpoint +-APIKey:YourAzureAPIkey + +###ConfigurationFileStructure + +Afterconfiguration,your`~/.penify/config.json`willcontain: + +```json +{ +"llm":{ +"model":"gpt-3.5-turbo", +"api_base":"https://api.openai.com/v1", +"api_key":"sk-..." +} +} +``` + +##JIRAConfiguration + +###WebInterface + +Running`penifyconfigjira`opensawebinterfacewhereyoucanconfigure: + +1.**JIRAURL**:YourJIRAinstanceURL(e.g.,`https://yourcompany.atlassian.net`) +2.**Username**:YourJIRAusername(typicallyyouremail) +3.**APIToken**:YourJIRAAPItoken + +###CreatingaJIRAAPIToken + +1.Loginto[https://id.atlassian.com/manage-profile/security/api-tokens](https://id.atlassian.com/manage-profile/security/api-tokens) +2.Click"CreateAPItoken" +3.Giveitaname(e.g.,"PenifyCLI") +4.Copythegeneratedtokenandpasteitintotheconfiguration + +###ConfigurationFileStructure + +Afterconfiguration,your`~/.penify/config.json`willcontain: + +```json +{ +"jira":{ +"url":"https://yourcompany.atlassian.net", +"username":"your.email@example.com", +"api_token":"your-jira-api-token" +} +} +``` + +##ConfigurationLocations + +PenifyCLIlooksforconfigurationinmultiplelocations: + +1.Project-specific:`.penify/config.json`intheGitrepositoryroot +2.User-specific:`~/.penify/config.json`inyourhomedirectory + +Theproject-specificconfigurationtakesprecedenceifbothexist. + +##EnvironmentVariables + +Youcanoverrideconfigurationsettingsusingenvironmentvariables: + +-`PENIFY_API_TOKEN`:OverridethestoredAPItoken +-`PENIFY_LLM_MODEL`:OverridetheconfiguredLLMmodel +-`PENIFY_LLM_API_BASE`:OverridetheconfiguredLLMAPIbaseURL +-`PENIFY_LLM_API_KEY`:OverridetheconfiguredLLMAPIkey +-`PENIFY_JIRA_URL`:OverridetheconfiguredJIRAURL +-`PENIFY_JIRA_USER`:OverridetheconfiguredJIRAusername +-`PENIFY_JIRA_TOKEN`:OverridetheconfiguredJIRAAPItoken + +Example: +```bash +exportPENIFY_LLM_MODEL="gpt-4" +penifycommit +``` + +##Command-LineConfiguration + +Foradvancedusersorscripting,youcandirectlyedittheconfigurationfile: + +```bash +#Viewcurrentconfiguration +cat~/.penify/config.json + +#Editconfigurationwithyourpreferrededitor +nano~/.penify/config.json +``` + +##SharingConfiguration + +Youcanshareconfigurationbetweenmachinesbycopyingthe`.penify/config.json`file.However,becautiouswithAPIkeysandcredentials. + +Forteamsettings,consider: +1.Usingaproject-specific`.penify/config.json`withsharedsettings +2.ExcludingAPIkeysfromsharedconfiguration +3.Usingenvironmentvariablesforsensitivecredentials + +##Troubleshooting + +###CommonIssues + +1.**"Errorreadingconfigurationfile"** +-Checkifthefileexists:`ls-la~/.penify` +-EnsureitcontainsvalidJSON:`cat~/.penify/config.json` + +2.**"FailedtoconnecttoLLMAPI"** +-VerifyAPIbaseURLandAPIkey +-ChecknetworkconnectivitytotheAPIendpoint +-Ensureyouraccounthasaccesstothespecifiedmodel + +3.**"FailedtoconnecttoJIRA"** +-CheckJIRAURLformat(shouldinclude`https://`) +-VerifyusernameandAPItoken +-EnsureyourJIRAaccounthasAPIaccesspermissions + + + + diff --git a/docs345/xml/config__command_8py.xml b/docs345/xml/config__command_8py.xml new file mode 100644 index 0000000..4bf3e78 --- /dev/null +++ b/docs345/xml/config__command_8py.xml @@ -0,0 +1,112 @@ + + + + config_command.py + penify_hook + penify_hook::config_command + + + + + + + + +defsetup_config_parser(parent_parser): +"""Setupaconfigurationparserwithsubparsersfordifferenttypesof +configurations. + +Thisfunctionconfiguresandaddssubcommandstotheparentparser.Each +subcommandcorrespondstoaspecifictypeofconfiguration,suchasLLM +(LanguageModel)orJIRA.Itallowsuserstoconfiguresettingsfor +thesesystemsthroughcommand-linearguments. + +Args: +parent_parser(argparse.ArgumentParser):Theparentparsertowhichtheconfigsubparserswillbeadded. +""" + +#Configsubcommand:Createsubparsersforconfigtypes +parser=parent_parser.add_subparsers(title="config_type",dest="config_type") + +#Configsubcommand:llm +llm_config_parser=parser.add_parser("llm-cmd",help="ConfigureLLMsettings.") +llm_config_parser.add_argument("--model",required=True,help="LLMmodeltouse") +llm_config_parser.add_argument("--api-base",help="APIbaseURLfortheLLMservice") +llm_config_parser.add_argument("--api-key",help="APIkeyfortheLLMservice") + +#Configsubcommand:llm-web +parser.add_parser("llm",help="ConfigureLLMsettingsthroughawebinterface") + +#Configsubcommand:jira +jira_config_parser=parser.add_parser("jira-cmd",help="ConfigureJIRAsettings.") +jira_config_parser.add_argument("--url",required=True,help="JIRAbaseURL") +jira_config_parser.add_argument("--username",required=True,help="JIRAusernameoremail") +jira_config_parser.add_argument("--api-token",required=True,help="JIRAAPItoken") +jira_config_parser.add_argument("--verify",action="store_true",help="VerifyJIRAconnection") + +#Configsubcommand:jira-web +parser.add_parser("jira",help="ConfigureJIRAsettingsthroughawebinterface") + +#Addallothernecessaryargumentsforconfigcommand + +defhandle_config(args): +"""Handleconfigurationsettingsbasedonthespecifiedconfigtype. + +ThisfunctionprocessesdifferenttypesofconfigurationssuchasLLM +(LanguageModel)andJIRA.Itsavesconfigurations,setsupweb-based +configurations,andverifiesJIRAconnections. + +Args: +args(argparse.Namespace):Command-lineargumentscontainingthetypeofconfigurationtohandle. + +Returns: +int:Exitcodeindicatingsuccessorfailure. +""" + +#Onlyimportdependenciesneededforconfigfunctionalityhere + + + +ifargs.config_type=="llm-cmd": +frompenify_hook.commands.config_commandsimportsave_llm_config +save_llm_config(args.model,args.api_base,args.api_key) +print(f"LLMconfigurationset:Model={args.model},APIBase={args.api_baseor'default'}") + +elifargs.config_type=="llm": +frompenify_hook.commands.config_commandsimportconfig_llm_web +config_llm_web() + +elifargs.config_type=="jira-cmd": +frompenify_hook.commands.config_commandsimportsave_jira_config +save_jira_config(args.url,args.username,args.api_token) +print(f"JIRAconfigurationset:URL={args.url},Username={args.username}") +frompenify_hook.jira_clientimportJiraClient#Importmovedhere + +#Verifyconnectionifrequested +ifargs.verify: +ifJiraClient: +jira_client=JiraClient( +jira_url=args.url, +jira_user=args.username, +jira_api_token=args.api_token +) +ifjira_client.is_connected(): +print("JIRAconnectionverifiedsuccessfully!") +else: +print("FailedtoconnecttoJIRA.Pleasecheckyourcredentials.") +else: +print("JIRApackagenotinstalled.Cannotverifyconnection.") + +elifargs.config_type=="jira": +frompenify_hook.commands.config_commandsimportconfig_jira_web +config_jira_web() + +else: +print("Pleasespecifyaconfigtype:llm,jira") +return1 + +return0 + + + + diff --git a/docs345/xml/config__commands_8py.xml b/docs345/xml/config__commands_8py.xml new file mode 100644 index 0000000..34725a6 --- /dev/null +++ b/docs345/xml/config__commands_8py.xml @@ -0,0 +1,597 @@ + + + + config_commands.py + penify_hook + penify_hook::commands + penify_hook::commands::config_commands + + + + + +importjson +importos +importrandom +importwebbrowser +importhttp.server +importsocketserver +importpkg_resources +frompathlibimportPath +fromthreadingimportThread +importlogging +importsys +fromtypingimportDict,Any,Optional,Union + +#Trytoimportdotenv,butdon'tfailifit'snotavailable +try: +fromdotenvimportload_dotenv +DOTENV_AVAILABLE=True +exceptImportError: +DOTENV_AVAILABLE=False + + +defload_env_files()->None: +""" +Loadenvironmentvariablesfrom.envfilesinvariouslocations, +withproperpriority(laterfilesoverrideearlierones): +1.Userhomedirectory.env(lowestpriority) +2.Gitreporootdirectory.env(ifinagitrepo) +3.Currentdirectory.env(highestpriority) + +Thisfunctioniscalledwhenthemoduleisimported,ensuringenvvariables +areavailablethroughouttheapplicationlifecycle. +""" +ifnotDOTENV_AVAILABLE: +logging.warning("python-dotenvisnotinstalled..envfileloadingisdisabled.") +logging.warning("Run'pipinstallpython-dotenv'toenable.envfilesupport.") +return + +#Loadfromuserhomedirectory(lowestpriority) +try: +home_env=Path.home()/'.env' +ifhome_env.exists(): +load_dotenv(dotenv_path=home_env,override=False) +exceptExceptionase: +logging.warning(f"Failedtoload.envfromhomedirectory:{str(e)}") + +#LoadfromGitreporoot(mediumpriority) +try: +frompenify_hook.utilsimportrecursive_search_git_folder +current_dir=os.getcwd() +repo_root=recursive_search_git_folder(current_dir) +ifrepo_rootandrepo_root!=str(Path.home()): +repo_env=Path(repo_root)/'.env' +ifrepo_env.exists()andrepo_env!=home_env: +load_dotenv(dotenv_path=repo_env,override=True) +exceptExceptionase: +logging.warning(f"Failedtoload.envfromGitrepo:{str(e)}") + +#Loadfromcurrentdirectory(highestpriority) +current_env=Path(os.getcwd())/'.env' +ifcurrent_env.exists()and(notrepo_rootorcurrent_env!=Path(repo_root)/'.env'): +load_dotenv(dotenv_path=current_env,override=True) + + +#Loadenvironmentvariableswhenmoduleisimported +load_env_files() + + +defget_penify_config()->Path: +"""Getthehomedirectoryforthe.penifyconfigurationfile. + +Thisfunctionsearchesforthe`.penify`fileinthecurrentdirectory +anditsparentdirectoriesuntilitfindsitorreachesthehome +directory.Ifnotfound,itcreatesthe`.penify`directoryandanempty +`config.json`file. + +Returns: +Path:Thepathtothe`config.json`filewithinthe`.penify`directory. +""" +current_dir=os.getcwd() +frompenify_hook.utilsimportrecursive_search_git_folder +home_dir=recursive_search_git_folder(current_dir) + + +ifnothome_dir: +home_dir=Path.home() +else: +home_dir=Path(home_dir) + +penify_dir=home_dir/'.penify' +ifpenify_dir.exists(): +returnpenify_dir/'config.json' +else: +#Createthe.penifydirectoryifitdoesn'texist +os.makedirs(penify_dir,exist_ok=True) + + +#Createthe.penifydirectory +os.makedirs(penify_dir,exist_ok=True) +#Createanemptyconfig.jsonfile +withopen(penify_dir/'config.json','w')asf: +json.dump({},f) +returnpenify_dir/'config.json' + + +defget_env_var_or_default(env_var:str,default:Any=None)->Any: +""" +Getenvironmentvariableorreturndefaultvalue. + +Args: +env_var:Theenvironmentvariablename +default:Defaultvalueifenvironmentvariableisnotset + +Returns: +Valueoftheenvironmentvariableordefault +""" +returnos.environ.get(env_var,default) + + +defsave_llm_config(model,api_base,api_key): +""" +SaveLLMconfigurationsettingsto.envfile. + +ThisfunctionsavesLLMconfigurationinthefollowingpriority: +1.Gitreporoot.env(ifinsideagitrepo) +2.Userhomedirectory.env +""" +frompathlibimportPath +importos + +ifnotDOTENV_AVAILABLE: +print("python-dotenvisnotinstalled.Run'pipinstallpython-dotenv'toenable.envfilesupport.") +returnFalse + +#TrytofindGitreporoot +try: +frompenify_hook.utilsimportrecursive_search_git_folder +current_dir=os.getcwd() +repo_root=recursive_search_git_folder(current_dir) +env_file=Path(repo_root)/'.env'ifrepo_rootelsePath.home()/'.env' +exceptExceptionase: +print(f"FailedtodetermineGitreporoot:{str(e)}") +env_file=Path.home()/'.env' + +#Readexisting.envcontent +env_content={} +ifenv_file.exists(): +withopen(env_file,'r')asf: +forlineinf: +line=line.strip() +iflineandnotline.startswith('#')and'='inline: +key,value=line.split('=',1) +env_content[key.strip()]=value.strip() + +#UpdateLLMconfiguration +env_content['PENIFY_LLM_MODEL']=model +env_content['PENIFY_LLM_API_BASE']=api_base +env_content['PENIFY_LLM_API_KEY']=api_key + +#Writebackto.envfile +try: +withopen(env_file,'w')asf: +forkey,valueinenv_content.items(): +f.write(f"{key}={value}\n") +print(f"LLMconfigurationsavedto{env_file}") + +#Reloadenvironmentvariablestomakechangesimmediatelyavailable +ifDOTENV_AVAILABLE: +fromdotenvimportload_dotenv +load_dotenv(dotenv_path=env_file,override=True) + +returnTrue +exceptExceptionase: +print(f"ErrorsavingLLMconfiguration:{str(e)}") +returnFalse + + +defsave_jira_config(url,username,api_token): +""" +SaveJIRAconfigurationsettingsto.envfile. + +ThisfunctionsavesJIRAconfigurationinthefollowingpriority: +1.Gitreporoot.env(ifinsideagitrepo) +2.Userhomedirectory.env +""" +frompathlibimportPath +importos + +ifnotDOTENV_AVAILABLE: +print("python-dotenvisnotinstalled.Run'pipinstallpython-dotenv'toenable.envfilesupport.") +returnFalse + +#TrytofindGitreporoot +try: +frompenify_hook.utilsimportrecursive_search_git_folder +current_dir=os.getcwd() +repo_root=recursive_search_git_folder(current_dir) +env_file=Path(repo_root)/'.env'ifrepo_rootelsePath.home()/'.env' +exceptExceptionase: +print(f"FailedtodetermineGitreporoot:{str(e)}") +env_file=Path.home()/'.env' + +#Readexisting.envcontent +env_content={} +ifenv_file.exists(): +withopen(env_file,'r')asf: +forlineinf: +line=line.strip() +iflineandnotline.startswith('#')and'='inline: +key,value=line.split('=',1) +env_content[key.strip()]=value.strip() + +#UpdateJIRAconfiguration +env_content['PENIFY_JIRA_URL']=url +env_content['PENIFY_JIRA_USER']=username +env_content['PENIFY_JIRA_TOKEN']=api_token + +#Writebackto.envfile +try: +withopen(env_file,'w')asf: +forkey,valueinenv_content.items(): +f.write(f"{key}={value}\n") +print(f"JIRAconfigurationsavedto{env_file}") + +#Reloadenvironmentvariablestomakechangesimmediatelyavailable +ifDOTENV_AVAILABLE: +fromdotenvimportload_dotenv +load_dotenv(dotenv_path=env_file,override=True) + +returnTrue +exceptExceptionase: +print(f"ErrorsavingJIRAconfiguration:{str(e)}") +returnFalse + + +defget_llm_config()->Dict[str,str]: +""" +GetLLMconfigurationfromenvironmentvariables. + +Environmentvariables: +-PENIFY_LLM_MODEL:Modelname +-PENIFY_LLM_API_BASE:APIbaseURL +-PENIFY_LLM_API_KEY:APIkey + +Returns: +dict:Configurationdictionarywithmodel,api_base,andapi_key +""" +#Ensureenvironmentvariablesareloaded +ifDOTENV_AVAILABLE: +load_env_files() + +#Getvaluesfromenvironmentvariables +config={ +'model':get_env_var_or_default('PENIFY_LLM_MODEL',''), +'api_base':get_env_var_or_default('PENIFY_LLM_API_BASE',''), +'api_key':get_env_var_or_default('PENIFY_LLM_API_KEY','') +} + +#Removeemptyvalues +config={k:vfork,vinconfig.items()ifv} + +returnconfig + + +defget_jira_config()->Dict[str,str]: +""" +GetJIRAconfigurationfromenvironmentvariables. + +Environmentvariables: +-PENIFY_JIRA_URL:JIRAURL +-PENIFY_JIRA_USER:JIRAusername +-PENIFY_JIRA_TOKEN:JIRAAPItoken + +Returns: +dict:Configurationdictionarywithurl,username,andapi_token +""" +#Ensureenvironmentvariablesareloaded +ifDOTENV_AVAILABLE: +load_env_files() + +#Getvaluesfromenvironmentvariables +config={ +'url':get_env_var_or_default('PENIFY_JIRA_URL',''), +'username':get_env_var_or_default('PENIFY_JIRA_USER',''), +'api_token':get_env_var_or_default('PENIFY_JIRA_TOKEN','') +} + +#Removeemptyvalues +config={k:vfork,vinconfig.items()ifv} + +returnconfig + + +defconfig_llm_web(): +"""OpenawebbrowserinterfaceforconfiguringLLMsettings. + +ThisfunctionstartsatemporaryHTTPserverthatservesanHTML +templateforconfiguringLargeLanguageModel(LLM)settings.Ithandles +GETandPOSTrequeststoretrievethecurrentconfiguration,savenew +configurations,andsuppresslogmessages.Theserverrunsonarandom +portbetween30000and50000,anditisaccessibleviaaURLlike +http://localhost:<redirect_port>.ThefunctionopensthisURLinthe +defaultwebbrowserforconfiguration.Onceconfigured,theservershuts +down. +""" +redirect_port=random.randint(30000,50000) +server_url=f"http://localhost:{redirect_port}" + +print(f"Startingconfigurationserveron{server_url}") + +classConfigHandler(http.server.SimpleHTTPRequestHandler): +defdo_GET(self): +"""HandleHTTPGETrequests. + +ThisfunctionprocessesincomingGETrequestsandsendsappropriate +responsesbasedontherequestedpath.ItservesanHTMLtemplatefor +therootpath("/")andreturnsaJSONresponsewiththecurrentLLM +configurationforthe"/get_config"path.Foranyotherpaths,it +returnsa"NotFound"error. +""" + +ifself.path=="/": +self.send_response(200) +self.send_header("Content-type","text/html") +self.end_headers() + +#ReadthetemplateHTMLfile +template_path=pkg_resources.resource_filename( +"penify_hook","templates/llm_config.html" +) + +withopen(template_path,'r')asf: +content=f.read() + +self.wfile.write(content.encode()) +elifself.path=="/get_config": +self.send_response(200) +self.send_header("Content-type","application/json") +self.end_headers() + +#GetcurrentLLMconfiguration +current_config=get_llm_config() + +ifcurrent_config: +response={ +"success":True, +"config":current_config +} +else: +response={ +"success":False, +"message":"Noconfigurationfound" +} + +self.wfile.write(json.dumps(response).encode()) +else: +self.send_response(404) +self.send_header("Content-type","text/plain") +self.end_headers() +self.wfile.write(b"NotFound") + +defdo_POST(self): +"""HandlePOSTrequestsonthe/saveendpoint. + +ThismethodprocessesincomingPOSTrequeststosavelanguagemodel +configurationdata.Itextractsthenecessaryparametersfromthe +requestbody,savestheconfigurationusingtheprovideddetails,and +thenschedulestheservertoshutdownafterasuccessfulsave. + +Args: +self(HTTPRequestHandler):TheinstanceoftheHTTPRequestHandlerclasshandlingtherequest. +""" + +ifself.path=="/save": +content_length=int(self.headers['Content-Length']) +post_data=self.rfile.read(content_length) +data=json.loads(post_data.decode()) + +model=data.get('model') +api_base=data.get('api_base') +api_key=data.get('api_key') + +try: +save_llm_config(model,api_base,api_key) + +self.send_response(200) +self.send_header("Content-type","application/json") +self.end_headers() +response={ +"success":True, +"message":f"LLMconfigurationsavedsuccessfully.Usingmodel:{model}" +} +self.wfile.write(json.dumps(response).encode()) + +#Scheduletheservershutdown +thread=Thread(target=self.server.shutdown) +thread.daemon=True +thread.start() + +exceptExceptionase: +self.send_response(500) +self.send_header("Content-type","application/json") +self.end_headers() +response={"success":False,"message":f"Errorsavingconfiguration:{str(e)}"} +self.wfile.write(json.dumps(response).encode()) +else: +self.send_response(404) +self.send_header("Content-type","application/json") +self.end_headers() +self.wfile.write(json.dumps({"success":False,"message":"NotFound"}).encode()) + +deflog_message(self,format,*args): +#Suppresslogmessages +return + +withsocketserver.TCPServer(("",redirect_port),ConfigHandler)ashttpd: +print(f"Openingconfigurationpageinyourbrowser...") +webbrowser.open(server_url) +print(f"Waitingforconfigurationtobesubmitted...") +httpd.serve_forever() + +print("Configurationcompleted.") + + +defconfig_jira_web(): +"""OpenawebbrowserinterfaceforconfiguringJIRAsettings. + +ThisfunctionsetsupasimpleHTTPserverusingPython'sbuilt-in +`http.server`moduletohandleGETandPOSTrequests.Theserverserves +anHTMLpageforconfigurationandhandlessavingtheJIRAconfiguration +detailsthroughAPItokensandURLs.Uponsuccessfulconfiguration,it +shutsdowntheservergracefully. +""" +redirect_port=random.randint(30000,50000) +server_url=f"http://localhost:{redirect_port}" + +print(f"Startingconfigurationserveron{server_url}") + +classConfigHandler(http.server.SimpleHTTPRequestHandler): +defdo_GET(self): +"""HandleGETrequestsfordifferentpaths. + +ThisfunctionprocessesGETrequestsbasedonthepathrequested.It +servesanHTMLtemplatefortherootpath,returnsaJSONconfiguration +foraspecificendpoint,andhandlesanyotherpathsbyreturninga404 +error. +""" + +ifself.path=="/": +self.send_response(200) +self.send_header("Content-type","text/html") +self.end_headers() + +#ReadthetemplateHTMLfile +template_path=pkg_resources.resource_filename( +"penify_hook","templates/jira_config.html" +) + +withopen(template_path,'r')asf: +content=f.read() + +self.wfile.write(content.encode()) +elifself.path=="/get_config": +self.send_response(200) +self.send_header("Content-type","application/json") +self.end_headers() + +#GetcurrentJIRAconfiguration +current_config=get_jira_config() + +ifcurrent_config: +response={ +"success":True, +"config":current_config +} +else: +response={ +"success":False, +"message":"NoJIRAconfigurationfound" +} + +self.wfile.write(json.dumps(response).encode()) +else: +self.send_response(404) +self.send_header("Content-type","text/plain") +self.end_headers() +self.wfile.write(b"NotFound") + +defdo_POST(self): +"""HandleHTTPPOSTrequeststosaveJIRAconfiguration. + +ThismethodprocessesincomingPOSTrequeststosaveJIRAconfiguration +details.ItreadsJSONdatafromtherequestbody,extractsnecessary +parameters(URL,username,APItoken,andverify),savesthe +configurationusingthe`save_jira_config`function,andrespondswith +successorerrormessages.Ifanexceptionoccursduringtheprocess,it +sendsa500InternalServerErrorresponse. +""" + +ifself.path=="/save": +content_length=int(self.headers['Content-Length']) +post_data=self.rfile.read(content_length) +data=json.loads(post_data.decode()) + +url=data.get('url') +username=data.get('username') +api_token=data.get('api_token') +verify=data.get('verify',False) + +try: +#Savetheconfiguration +save_jira_config(url,username,api_token) + +#Verifyconnectionoptionishandledinmain.py +self.send_response(200) +self.send_header("Content-type","application/json") +self.end_headers() +response={ +"success":True, +"message":f"JIRAconfigurationsavedsuccessfully." +} +self.wfile.write(json.dumps(response).encode()) + +#Scheduletheservershutdown +thread=Thread(target=self.server.shutdown) +thread.daemon=True +thread.start() + +exceptExceptionase: +self.send_response(500) +self.send_header("Content-type","application/json") +self.end_headers() +response={"success":False,"message":f"Errorsavingconfiguration:{str(e)}"} +self.wfile.write(json.dumps(response).encode()) +else: +self.send_response(404) +self.send_header("Content-type","application/json") +self.end_headers() +self.wfile.write(json.dumps({"success":False,"message":"NotFound"}).encode()) + +deflog_message(self,format,*args): +#Suppresslogmessages +return + +withsocketserver.TCPServer(("",redirect_port),ConfigHandler)ashttpd: +print(f"Openingconfigurationpageinyourbrowser...") +webbrowser.open(server_url) +print(f"Waitingforconfigurationtobesubmitted...") +httpd.serve_forever() + +print("Configurationcompleted.") + + +defget_token()->Optional[str]: +""" +GettheAPItokenbasedonpriority: +1.EnvironmentvariablePENIFY_API_TOKENfromany.envfile +2.Configfile'api_keys'value + +Returns: +strorNone:APItokeniffound,Noneotherwise +""" +#Ensureenvironmentvariablesareloadedfromall.envfiles +ifDOTENV_AVAILABLE: +load_env_files() + +#Checkenvironmentvariablefirst +env_token=get_env_var_or_default('PENIFY_API_TOKEN') +ifenv_token: +returnenv_token + +#Checkconfigfile +config_file=get_penify_config() +ifconfig_file.exists(): +try: +withopen(config_file,'r')asf: +config=json.load(f) +returnconfig.get('api_keys') +except(json.JSONDecodeError,Exception)ase: +print(f"Errorreading.penifyconfigfile:{str(e)}") + +returnNone + + + + diff --git a/docs345/xml/conftest_8py.xml b/docs345/xml/conftest_8py.xml new file mode 100644 index 0000000..1f83991 --- /dev/null +++ b/docs345/xml/conftest_8py.xml @@ -0,0 +1,23 @@ + + + + conftest.py + tests + tests::conftest + + + + + +importpytest +importos +importsys + +#Addprojectroottosys.pathforimportstowork +sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(__file__),'..'))) + +#Commonfixturescanbeaddedhere + + + + diff --git a/docs345/xml/constants_8py.xml b/docs345/xml/constants_8py.xml new file mode 100644 index 0000000..ba635e1 --- /dev/null +++ b/docs345/xml/constants_8py.xml @@ -0,0 +1,17 @@ + + + + constants.py + penify_hook + penify_hook::constants + + + + + +API_URL='http://localhost:8000/api' +DASHBOARD_URL="https://dashboard.penify.dev/auth/localhost/login" + + + + diff --git a/docs345/xml/detailed-usage_8md.xml b/docs345/xml/detailed-usage_8md.xml new file mode 100644 index 0000000..cb55f77 --- /dev/null +++ b/docs345/xml/detailed-usage_8md.xml @@ -0,0 +1,173 @@ + + + + detailed-usage.md + + + + + +#PenifyCLI-DetailedUsageGuide + +Thisdocumentprovidesin-depthinformationaboutallfeaturesandcapabilitiesofthePenifyCLItool. + +##TableofContents + +-[PenifyCLI-DetailedUsageGuide](#penify-cli---detailed-usage-guide) +-[TableofContents](#table-of-contents) +-[Authentication](#authentication) +-[LoginProcess](#login-process) +-[APITokenStorage](#api-token-storage) +-[TokenPrecedence](#token-precedence) +-[CommandOverview](#command-overview) +-[CommitMessageGeneration](#commit-message-generation) +-[CodeDocumentationGeneration](#code-documentation-generation) +-[UseCases](#use-cases) +-[AuthenticationRequirement](#authentication-requirement) +-[ConfigurationSettings](#configuration-settings) +-[GitHooks](#git-hooks) +-[Post-CommitHook](#post-commit-hook) +-[CustomHookLocation](#custom-hook-location) +-[AdvancedUseCases](#advanced-use-cases) +-[CI/CDIntegration](#cicd-integration) +-[RemoteRepositoryDocumentation](#remote-repository-documentation) +-[Troubleshooting](#troubleshooting) +-[CommonIssues](#common-issues) +-[Logs](#logs) +-[Support](#support) + +##Authentication + +###LoginProcess + +Whenyourun`penifylogin`,thetool: + +1.Opensyourdefaultwebbrowser +2.RedirectsyoutoPenify'sloginpage +3.Capturestheauthenticationtokenaftersuccessfullogin +4.Savesthetokenin`~/.penify`file + +###APITokenStorage + +APItokensarestoredinyourhomedirectoryinthe`.penify`file.ThisJSONfilecontains: + +```json +{ +"api_keys":"your-api-token", +"llm":{"model":"...","api_base":"...","api_key":"..."}, +"jira":{"url":"...","username":"...","api_token":"..."} +} +``` + +###TokenPrecedence + +1.Environmentvariable`PENIFY_API_TOKEN`(highestpriority) +2.Tokenin`~/.penify`file + +##CommandOverview + +``` +penify +├──commitGeneratesmartcommitmessages +├──configConfigurelocalLLMandJIRA +│├──llmConfigurelocalLLMsettings +│└──jiraConfigureJIRAintegration +├──loginLogintoPenifyaccount +└──docgenGeneratecodedocumentation +├──install-hookInstallGitpost-commithook +└──uninstall-hookRemoveGitpost-commithook +``` + +##CommitMessageGeneration + +The`commit`commandanalyzesyourstagedchangesandgeneratesmeaningfulcommitmessages.Itcan: + +-UsealocalLLMifconfigured +-EnhancemessageswithJIRAissuedetails +-Providebothtitleanddescription + +Forspecificoptionsandexamples,see[docs/commit-commands.md](commit-commands.md). + +##CodeDocumentationGeneration + +The`docgen`commandgeneratesdocumentationforyourcode: + +###UseCases + +1.**CurrentGitDiff**:Defaultbehavior,documentsonlychangedfiles +2.**SpecificFile**:Passafilepathwith`-lpath/to/file.py` +3.**EntireFolder**:Passafolderpathwith`-lpath/to/folder` + +###AuthenticationRequirement + +ThisfeaturerequiresauthenticationwithaPenifyaccount.Run`penifylogin`beforeusingdocumentationfeatures. + +##ConfigurationSettings + +Configurelocalsettingsusingthe`config`command: + +-**LLMSettings**:ConfigurealocalLLMforcommitmessagegeneration +-**JIRASettings**:SetupJIRAintegrationforenhancedcommitmessages + +Fordetailedconfigurationoptions,see[docs/config-commands.md](config-commands.md). + +##GitHooks + +PenifycaninstallGithookstoautomatedocumentationgeneration: + +###Post-CommitHook + +-**Install**:`penifydocgeninstall-hook` +-**Whatitdoes**:Automaticallygeneratesdocumentationforchangedfilesaftereachcommit +-**Uninstall**:`penifydocgenuninstall-hook` + +###CustomHookLocation + +YoucanspecifyacustomlocationforGithooks: + +```bash +penifydocgeninstall-hook-l/path/to/git/repo +``` + +##AdvancedUseCases + +###CI/CDIntegration + +ForCI/CDpipelines: + +1.Set`PENIFY_API_TOKEN`asanenvironmentvariable +2.Runcommandswithoutrequiringinteractivelogin + +###RemoteRepositoryDocumentation + +Generatedocumentationforanentirerepository: + +```bash +gitclonehttps://github.com/user/repo +cdrepo +penifydocgen-l. +``` + +##Troubleshooting + +###CommonIssues + +1.**APIKeyErrors**:Ensureyou'verun`penifylogin`orset`PENIFY_API_TOKEN` +2.**LLMConfiguration**:CheckyourLLMsettingswith`cat~/.penify` +3.**JIRAIntegration**:VerifyJIRAcredentialsinyourconfiguration + +###Logs + +Formoredetailedlogs,youcansettheenvironmentvariable: + +```bash +exportPENIFY_DEBUG=1 +``` + +###Support + +Foradditionalhelp,visit[https://docs.penify.dev/](https://docs.penify.dev/)orcontactsupport@penify.dev + + + + diff --git a/docs345/xml/dir_063e2d5fe58a131099a7fe4200cca78c.xml b/docs345/xml/dir_063e2d5fe58a131099a7fe4200cca78c.xml new file mode 100644 index 0000000..64ba2d0 --- /dev/null +++ b/docs345/xml/dir_063e2d5fe58a131099a7fe4200cca78c.xml @@ -0,0 +1,17 @@ + + + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + __init__.py + conftest.py + test_commit_commands.py + test_config_commands.py + test_doc_commands.py + test_web_config.py + + + + + + + diff --git a/docs345/xml/dir_1648a057408aae8db85b8e3797335623.xml b/docs345/xml/dir_1648a057408aae8db85b8e3797335623.xml new file mode 100644 index 0000000..300e1cd --- /dev/null +++ b/docs345/xml/dir_1648a057408aae8db85b8e3797335623.xml @@ -0,0 +1,11 @@ + + + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + + + + + + + diff --git a/docs345/xml/dir_624fa2a8bce97f0444ac5cca335d4e23.xml b/docs345/xml/dir_624fa2a8bce97f0444ac5cca335d4e23.xml new file mode 100644 index 0000000..52eaaa8 --- /dev/null +++ b/docs345/xml/dir_624fa2a8bce97f0444ac5cca335d4e23.xml @@ -0,0 +1,17 @@ + + + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + __init__.py + auth_commands.py + commit_commands.py + config_commands.py + doc_commands.py + hook_commands.py + + + + + + + diff --git a/docs345/xml/dir_b3b22d2ab7966b65f6b237e3231b41be.xml b/docs345/xml/dir_b3b22d2ab7966b65f6b237e3231b41be.xml new file mode 100644 index 0000000..2a7c175 --- /dev/null +++ b/docs345/xml/dir_b3b22d2ab7966b65f6b237e3231b41be.xml @@ -0,0 +1,15 @@ + + + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + setup.py + + + + + + + diff --git a/docs345/xml/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml b/docs345/xml/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml new file mode 100644 index 0000000..9f4f478 --- /dev/null +++ b/docs345/xml/dir_f88c3381c1861b3f7ca1f3d63cf244b5.xml @@ -0,0 +1,27 @@ + + + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + __init__.py + api_client.py + base_analyzer.py + commit_analyzer.py + config_command.py + constants.py + file_analyzer.py + folder_analyzer.py + git_analyzer.py + jira_client.py + llm_client.py + login_command.py + main.py + ui_utils.py + utils.py + + + + + + + diff --git a/docs345/xml/doc__commands_8md.xml b/docs345/xml/doc__commands_8md.xml new file mode 100644 index 0000000..839cd71 --- /dev/null +++ b/docs345/xml/doc__commands_8md.xml @@ -0,0 +1,340 @@ + + + + doc_commands.md + + + + + +#PenifyCLI-DocumentationGenerationCommands + +Thisdocumentprovidesadetailedguidetoallpermutationsandcombinationsofthe`docgen`command,includingextensiveinformationaboutGithookcommandsforautomatingdocumentationgeneration. + +##TableofContents + +-[BasicUsage](#basic-usage) +-[CommandOptions](#command-options) +-[OptionCombinations](#option-combinations) +-[GitHookCommands](#git-hook-commands) +-[HookInstallation](#hook-installation) +-[HookCustomization](#hook-customization) +-[HookUninstallation](#hook-uninstallation) +-[AdvancedUseCases](#advanced-use-cases) +-[Troubleshooting](#troubleshooting) + +##BasicUsage + +```bash +penifydocgen +``` + +Bydefault,thiscommand: +-AnalyzesthecurrentGitdiff(changessincelastcommit) +-Generatesdocumentationforchangedfilesonly +-Requiresauthenticationvia`penifylogin` + +##CommandOptions + +###`-l,--location` + +Specifyatargetfordocumentationgeneration: + +```bash +#Generatedocumentationforaspecificfile +penifydocgen-lpath/to/file.py + +#Generatedocumentationforaspecificfolder +penifydocgen-lpath/to/folder +``` + +Withoutthisflag,PenifyanalyzesonlyGit-trackedmodifiedfiles. + +###Subcommands + +####`install-hook` + +InstallaGitpost-commithooktoautomaticallygeneratedocumentation: + +```bash +penifydocgeninstall-hook +``` + +####`uninstall-hook` + +RemovetheGitpost-commithook: + +```bash +penifydocgenuninstall-hook +``` + +##OptionCombinations + +###GenerateDocumentationforCurrentGitDiff + +```bash +#Basicusage-currentGitdiff +penifydocgen +``` + +###GenerateDocumentationforaSpecificFile + +```bash +#Singlefiledocumentation +penifydocgen-lsrc/main.py +``` + +###GenerateDocumentationforaFolder + +```bash +#Folderdocumentation +penifydocgen-lsrc/models/ +``` + +###InstallHookinCurrentRepository + +```bash +#InstallhookincurrentGitrepository +penifydocgeninstall-hook +``` + +###InstallHookinSpecificRepository + +```bash +#InstallhookinaspecificGitrepository +penifydocgeninstall-hook-l/path/to/repo +``` + +###UninstallHookfromCurrentRepository + +```bash +#UninstallhookfromcurrentGitrepository +penifydocgenuninstall-hook +``` + +###UninstallHookfromSpecificRepository + +```bash +#UninstallhookfromaspecificGitrepository +penifydocgenuninstall-hook-l/path/to/repo +``` + +##GitHookCommands + +PenifyprovidesGithookcommandstoautomatedocumentationgenerationaspartofyourGitworkflow. + +###HookInstallation + +####HowHooksWork + +WhenyouinstallaGithookwith`penifydocgeninstall-hook`,Penify: + +1.Createsapost-commithookscriptinthe`.git/hooks`directory +2.Makesthescriptexecutable +3.Configuresthehooktorun`penifydocgen`aftereachcommit + +####HookScriptContent + +Thegeneratedpost-commithookcontains: + +```bash +#!/bin/sh +#Thisisapost-commithookgeneratedbypenify. +#Automaticallygeneratesdocumentationforchangedfilesaftereachcommit. + +penifydocgen-gf/path/to/git/repository-tyour_api_token +``` + +####InstallationLocation + +Bydefault,hooksareinstalledinthecurrentGitrepository.Youcanspecifyadifferentlocation: + +```bash +penifydocgeninstall-hook-l/path/to/repo +``` + +####InstallationRequirements + +Toinstallhooks,youneed: +-AvalidPenifyAPItoken(loginfirstwith`penifylogin`) +-Writepermissionstothe`.git/hooks`directory + +####VerifyingInstallation + +Afterinstallation,youcanverifythatthehookisinstalled: + +```bash +cat.git/hooks/post-commit +``` + +###HookCustomization + +Youcancustomizethepost-commithookafterinstallation: + +####ModifyingHookBehavior + +1.Editthe`.git/hooks/post-commit`file +2.Addadditionaloptionstothe`penifydocgen`command +3.Addothercommandstorunaftercommit + +Exampleofacustomizedhook: + +```bash +#!/bin/sh +#Thisisapost-commithookgeneratedbypenify. +#Automaticallygeneratesdocumentationforchangedfilesaftereachcommit. + +#Generatedocumentation +penifydocgen-gf/path/to/git/repository-tyour_api_token + +#Additionalcustomcommands +echo"Documentationgenerationcomplete!" +``` + +####AdvancedHookScenarios + +**ConditionalDocumentationGeneration**: + +```bash +#!/bin/sh +#Onlygeneratedocumentationforcommitstothemainbranch +BRANCH=$(gitrev-parse--abbrev-refHEAD) +if["$BRANCH"="main"];then +penifydocgen-gf/path/to/git/repository-tyour_api_token +fi +``` + +**DocumentingSpecificFiles/Folders**: + +```bash +#!/bin/sh +#OnlydocumentPythonfilesinthesrcdirectory +penifydocgen-lsrc/-gf/path/to/git/repository-tyour_api_token +``` + +###HookUninstallation + +####StandardUninstallation + +Toremoveahookfromthecurrentrepository: + +```bash +penifydocgenuninstall-hook +``` + +####SpecificRepositoryUninstallation + +Toremoveahookfromaspecificrepository: + +```bash +penifydocgenuninstall-hook-l/path/to/repo +``` + +####ManualHookRemoval + +Ifneeded,youcanmanuallyremovethehook: + +```bash +rm.git/hooks/post-commit +``` + +####VerifyingUninstallation + +Checkthatthehookwassuccessfullyremoved: + +```bash +ls-la.git/hooks/post-commit#Shouldreturn"Nosuchfileordirectory" +``` + +##AdvancedUseCases + +###ContinuousIntegration + +RundocumentationgenerationinCIpipelines: + +```bash +#InyourCIscript +exportPENIFY_API_TOKEN=your_api_token +penifydocgen-lsrc/ +``` + +###BatchDocumentation + +Generatedocumentationformultiplerepositories: + +```bash +#Bashscriptforbatchdocumentation +forrepoinrepo1repo2repo3;do +cd/path/to/$repo +penifydocgen-l. +done +``` + +###CustomGitHookIntegration + +IntegratewithotherGithooks: + +```bash +#In.git/hooks/pre-push +penifydocgen-lsrc/ +``` + +###DocumentingReleaseTags + +Generatedocumentationwhencreatingareleasetag: + +```bash +#Documenteverythingwhencreatingatag +gittag-av1.0.0 +penifydocgen-l.#Documententirecodebase +gitcommit--amend-m"Releasev1.0.0withupdateddocumentation" +``` + +##Troubleshooting + +###CommonIssues + +1.**"Authenticationrequired"** +-Run`penifylogin`beforeusingdocumentationfeatures +-CheckyourAPItokenwith`cat~/.penify` + +2.**"Permissiondeniedwheninstallinghook"** +-CheckGitrepositorypermissions +-Tryrunningwithsudo(ifappropriateforyourenvironment) +-Ensurethe`.git/hooks`directoryexists + +3.**"Hookinstalledbutnotrunning"** +-Checkifthehookisexecutable:`ls-la.git/hooks/post-commit` +-Makeitexecutableifneeded:`chmod+x.git/hooks/post-commit` +-Checkforsyntaxerrorsinthehookscript + +4.**"Fileordirectorynotfound"** +-Verifythepathprovidedtothe`-l`option +-Ensureyou'rerunningthecommandfromthecorrectdirectory + +5.**"Hookuninstallationfailed"** +-Checkpermissionsonthe`.git/hooks`directory +-Trymanualremoval:`rm.git/hooks/post-commit` + +###Debugging + +Fordetailedoutputwhenrunningdocumentationcommands: + +```bash +exportPENIFY_DEBUG=1 +penifydocgen-lsrc/ +``` + +###GettingHelp + +Forcommand-specifichelp: + +```bash +penifydocgen--help +penifydocgeninstall-hook--help +penifydocgenuninstall-hook--help +``` + + + + diff --git a/docs345/xml/doc__commands_8py.xml b/docs345/xml/doc__commands_8py.xml new file mode 100644 index 0000000..86be493 --- /dev/null +++ b/docs345/xml/doc__commands_8py.xml @@ -0,0 +1,173 @@ + + + + doc_commands.py + penify_hook + penify_hook::commands + penify_hook::commands::doc_commands + + + + + + +importargparse +importlogging +importos +importsys +importtime + +defgenerate_doc(api_url,token,location=None): +"""Generatesdocumentationbasedonthegivenparameters. + +ThisfunctioninitializesanAPIclientusingtheprovidedAPIURLand +token.Itthengeneratesdocumentationbyanalyzingthespecified +location,whichcanbeafolder,afile,orthecurrentworking +directoryifnolocationisprovided.Thefunctionhandlesdifferent +typesofanalysisbasedontheinputlocationandreportsanyerrors +encounteredduringtheprocess. + +Args: +api_url(str):TheURLoftheAPItoconnecttofordocumentationgeneration. +token(str):TheauthenticationtokenforaccessingtheAPI. +location(str?):Thepathtoaspecificfileorfoldertoanalyze.Ifnotprovided,the +currentworkingdirectoryisused. +""" +t1=time.time() +from..api_clientimportAPIClient +print(f"TimetakentolaodAPIClinet:{time.time()-t1:.2f}seconds") +"""Generatesdocumentationbasedonthegivenparameters. + +ThisfunctioninitializesanAPIclientusingtheprovidedAPIURLand +token.Itthengeneratesdocumentationbyanalyzingthespecified +location,whichcanbeafolder,afile,orthecurrentworking +directoryifnolocationisprovided.Thefunctionhandlesdifferent +typesofanalysisbasedontheinputlocationandreportsanyerrors +encounteredduringtheprocess. + +Args: +api_url(str):TheURLoftheAPItoconnecttofordocumentationgeneration. +token(str):TheauthenticationtokenforaccessingtheAPI. +location(str?):Thepathtoaspecificfileorfoldertoanalyze. +Ifnotprovided,thecurrentworkingdirectoryisused. +""" +api_client=APIClient(api_url,token) +iflocationisNone: +current_folder_path=os.getcwd() +try: +from..git_analyzerimportGitDocGenHook +analyzer=GitDocGenHook(current_folder_path,api_client) +analyzer.run() +exceptExceptionase: +print(f"Error:{e}") +sys.exit(1) + +#iflocationisafile +eliflen(location.split('.'))>1: +try: +from..file_analyzerimportFileAnalyzerGenHook +analyzer=FileAnalyzerGenHook(location,api_client) +analyzer.run() +exceptExceptionase: +print(f"Error:{e}") +sys.exit(1) + +else: +try: +from..folder_analyzerimportFolderAnalyzerGenHook +analyzer=FolderAnalyzerGenHook(location,api_client) +analyzer.run() +exceptExceptionase: +print(f"Error:{e}") +sys.exit(1) + + +#Definethedocgendescriptiontext +docgen_description="""GeneratecodedocumentationusingPenify. + +ThiscommandrequiresyoutobeloggedintoyourPenifyaccount. +Youcangeneratedocumentationfor: +-CurrentGitdiff(default) +-Specificfile +-Specificfolder +""" + +defsetup_docgen_parser(parser): +"""SetupandconfigureaparserfordocumentationgenerationusingGit +commands. + +Thisfunctionconfiguresaparserwithvarioussubcommandsandarguments +necessaryforgeneratingdocumentationforGitdiffs,files,orfolders. +Italsoinstallsanduninstallscommithookstoautomatedocumentation +generationoncommits. + +Args: +parser(argparse.ArgumentParser):Theparsertoconfigure. +""" + +#Wedon'tneedtocreateanewdocgen_parsersinceit'spassedasaparameter +docgen_parser_description=""" +ItgeneratesDocumentationfortheGitdiff,fileorfolder. +1.Bydefault,itwillgitdiffdocumentation-visithttps://penify.wiki/dcdcformoredetails. +2.Iffileisprovided,itwillgeneratedocumentationforthatfile-visithttps://penify.wiki/dfdc +3.Iffolderisprovided,itwillgeneratedocumentationforthatfolder-visithttps://penify.wiki/drdc +4.CommitHookswillautomaticallygeneratedocumentationfortheGitdiffoncommit-https://penify.wiki/dpchc +5.YouneedtobeloggedintoyourPenifyaccounttousethesecommands. +""" + +parser.description=docgen_parser_description +parser.formatter_class=argparse.RawDescriptionHelpFormatter +docgen_subparsers=parser.add_subparsers(title="docgen_subcommand",dest="docgen_subcommand") + +#Docgenmainoptions(fordirectdocumentationgeneration) +parser.add_argument("-l","--location",help="[Optional]PathtothefolderorfiletoGenerateDocumentation.Bydefaultitwillpicktherootdirectory.",default=None) + +#Subcommand:install-hook(aspartofdocgen) +install_hook_parser=docgen_subparsers.add_parser("install-hook",help="InstalltheGitpost-commithook.") +install_hook_parser.add_argument("-l","--location",required=False, +help="LocationinwhichtoinstalltheGithook.Defaultstocurrentdirectory.", +default=os.getcwd()) + +#Subcommand:uninstall-hook(aspartofdocgen) +uninstall_hook_parser=docgen_subparsers.add_parser("uninstall-hook",help="UninstalltheGitpost-commithook.") +uninstall_hook_parser.add_argument("-l","--location",required=False, +help="LocationfromwhichtouninstalltheGithook.Defaultstocurrentdirectory.", +default=os.getcwd()) + +defhandle_docgen(args): +"""Handlevarioussubcommandsrelatedtodocumentgenerationandhook +management. + +Thisfunctionprocessesdifferentsubcommandssuchasinstallingor +uninstallinggithooks,anddirectlygeneratingdocumentationbasedon +providedarguments. + +Args: +args(Namespace):Parsedcommand-lineargumentscontainingthesubcommandandlocation +details. +""" + +#Onlyimportdependenciesneededfordocgenfunctionalityhere +frompenify_hook.commands.config_commandsimportget_token +importsys +frompenify_hook.commands.doc_commandsimportgenerate_doc +frompenify_hook.commands.hook_commandsimportinstall_git_hook,uninstall_git_hook +frompenify_hook.constantsimportAPI_URL + +token=get_token() +ifnottoken: +logging.error("Error:Unabletoauthenticate.Pleaserun'penifylogin'.") +sys.exit(1) + +ifargs.docgen_subcommand=="install-hook": +install_git_hook(args.location,token) + +elifargs.docgen_subcommand=="uninstall-hook": +uninstall_git_hook(args.location) + +else:#Directdocumentationgeneration +generate_doc(API_URL,token,args.location) + + + + diff --git a/docs345/xml/doxyfile.xsd b/docs345/xml/doxyfile.xsd new file mode 100644 index 0000000..fbfc2c1 --- /dev/null +++ b/docs345/xml/doxyfile.xsd @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/example-workflows_8md.xml b/docs345/xml/example-workflows_8md.xml new file mode 100644 index 0000000..24722e9 --- /dev/null +++ b/docs345/xml/example-workflows_8md.xml @@ -0,0 +1,156 @@ + + + + example-workflows.md + + + + + +#PenifyCLIExampleWorkflows + +ThisdocumentdemonstrateshowtousePenifyCLIinreal-worlddevelopmentworkflowstoimproveyourproductivity. + +##Workflow1:EfficientGitCommitswithAI + +###Setup + +First,configureyourlocalLLMforofflineoperation: + +```bash +penifyconfigllm +``` + +ConfigureyourJIRAintegrationforenhancedcommitmessages: + +```bash +penifyconfigjira +``` + +###DailyWorkflow + +1.Makeyourcodechangesasusual +2.Whenreadytocommit,usePenifytogenerateasmartcommitmessage: + +```bash +penifycommit +``` + +3.Reviewandconfirmthegeneratedcommitmessage +4.Gitcommitandpushasusual + +###Benefits + +-Consistentanddescriptivecommitmessages +-AutomaticinclusionofrelevantJIRAticketinformation +-Timesavedfromwritingdetailedcommitmessages + +##Workflow2:DocumentationGenerationPipeline + +###Setup + +LogintoPenifytoaccessadvanceddocumentationfeatures: + +```bash +penifylogin +``` + +InstalltheGithookforautomaticdocumentationgeneration: + +```bash +penifydocgeninstall-hook +``` + +###DailyWorkflow + +1.Makeyourcodechangesasusual +2.Commityourchanges +3.Documentationisautomaticallygeneratedforchangedfiles +4.Reviewthegenerateddocumentation + +###ManualDocumentation + +Forspecificfilesorfolders: + +```bash +penifydocgen-lsrc/components/authentication +``` + +###Benefits + +-Alwaysup-to-datedocumentation +-Consistentdocumentationstyle +-Timesavedfromwritingdetaileddocumentation + +##Workflow3:CodeReviewEnhancement + +###Setup + +Ensureyou'reloggedintoPenify: + +```bash +penifylogin +``` + +###Workflow + +1.BeforesubmittingaPR,generatedocumentationforchangedfiles: + +```bash +penifydocgen +``` + +2.IncludethegenerateddocumentationinyourPR +3.ReviewerscanbetterunderstandyourchangeswiththeAI-generatedexplanations + +###Benefits + +-ImprovedPRquality +-Fastercodereviews +-Betterteamunderstandingofcodechanges + +##Workflow4:OnboardingNewTeamMembers + +###ForTeamLeads + +Generatecomprehensivedocumentationfortheentirecodebase: + +```bash +penifydocgen-l. +``` + +###ForNewTeamMembers + +Generatefocuseddocumentationforcomponentsyou'reworkingon: + +```bash +penifydocgen-lsrc/components/my-feature +``` + +###Benefits + +-Fasteronboarding +-Betterunderstandingofcodestructure +-Reducedquestionstoseniorteammembers + +##Workflow5:LegacyCodeUnderstanding + +Whenworkingwithunfamiliarlegacycode: + +```bash +#Documentaspecificcomplexfile +penifydocgen-lsrc/legacy/complex_module.py + +#Documentanentirelegacycomponent +penifydocgen-lsrc/legacy/old_component +``` + +###Benefits + +-Quicklyunderstandcomplexlegacysystems +-Reducetimespentdecipheringundocumentedcode +-Makesaferchangestolegacysystems + + + + diff --git a/docs345/xml/file__analyzer_8py.xml b/docs345/xml/file__analyzer_8py.xml new file mode 100644 index 0000000..f47ec12 --- /dev/null +++ b/docs345/xml/file__analyzer_8py.xml @@ -0,0 +1,159 @@ + + + + file_analyzer.py + penify_hook::file_analyzer::FileAnalyzerGenHook + penify_hook + penify_hook::file_analyzer + + + + + +importos +importsys +fromgitimportRepo +fromtqdmimporttqdm +importtime + +frompenify_hook.base_analyzerimportBaseAnalyzer +frompenify_hook.utilsimportget_repo_details,recursive_search_git_folder +from.api_clientimportAPIClient +importlogging +from.ui_utilsimport( +format_highlight,print_info,print_success,print_warning,print_error, +print_status,create_stage_progress_bar, +update_stage,format_file_path +) + +#Setuplogger +logger=logging.getLogger(__name__) + +classFileAnalyzerGenHook(BaseAnalyzer): +def__init__(self,file_path:str,api_client:APIClient): +self.file_path=file_path +super().__init__(file_path,api_client) + + + +defprocess_file(self,file_path,pbar,new_param:str=""): +"""Processesafilebyvalidatingitsextension,readingcontent,generatingdocumentation, +andwritingchangesbacktothefile. + +Args: +file_path(str):Thepathofthefiletobeprocessed. +pbar(tqdm.tqdm):Aprogressbarobjecttoupdatethestatusofprocessingstages.""" +file_abs_path=os.path.join(os.getcwd(),file_path) +file_extension=os.path.splitext(file_path)[1].lower() + +#---STAGE1:Validating--- +update_stage(pbar,"Validating") +ifnotfile_extension: +print_warning(f"Emptyextensionisnotsupported.Skipping'{self.relative_file_path}'.") +returnFalse + +file_extension=file_extension[1:]#Removetheleadingdot + +iffile_extensionnotinself.supported_file_types: +print_warning(f"Filetype'{file_extension}'isnotsupported.Skipping'{self.relative_file_path}'.") +returnFalse + +#Updateprogressbartoindicatewe'removingtonextstage +pbar.update(1) + +#---STAGE2:Readingcontent--- +update_stage(pbar,"Readingcontent") +try: +withopen(file_abs_path,'r')asfile: +content=file.read() +exceptExceptionase: +logger.error(f"Errorreadingfile{file_path}:{str(e)}") +returnFalse + +modified_lines=[iforiinrange(len(content.splitlines()))] + +#Updateprogressbartoindicatewe'removingtonextstage +pbar.update(1) + +#---STAGE3:Documenting--- +update_stage(pbar,"Documenting") + +response=self.api_client.send_file_for_docstring_generation(self.relative_file_path,content,modified_lines,self.repo_details) + +ifresponseisNone: +returnFalse + +ifresponse==content: +logger.info(f"Nochangesneededfor{file_path}") +returnFalse + +#Updateprogressbartoindicatewe'removingtonextstage +pbar.update(1) + +#---STAGE4:Writingchanges--- +update_stage(pbar,"Writingchanges") + +try: +withopen(file_abs_path,'w')asfile: +file.write(response) +logger.info(f"Updatedfile{file_path}withgenerateddocumentation") + +#Markfinalstageascomplete +pbar.update(1) +returnTrue +exceptExceptionase: +logger.error(f"Errorwritingfile{file_path}:{str(e)}") +returnFalse + +defprint_processing(self,file_path): +"""Printsaformattedmessageindicatingthatafileisbeingprocessed.""" +formatted_path=format_file_path(file_path) +print(f"\n{format_highlight(f'Processingfile:{formatted_path}')}") + +defrun(self): + +#Createaprogressbarwithappropriatestages +"""Runsthedocumentationprocesswithaprogressbar.""" +stages=["Validating","Readingcontent","Documenting","Writingchanges","Completed"] +pbar,_=create_stage_progress_bar(stages,f"Startingdocumenting") + +try: +#Printaclearindicationofwhichfileisbeingprocessed +#self.print_processing(self.file_path) + +#Processthefile +result=self.process_file(self.file_path,pbar) + +#Ensureallstagesarecompleted +remaining_steps=len(stages)-pbar.n +pbar.update(remaining_steps) + + +#Displayappropriatemessagebasedonresult +remaining=len(stages)-pbar.n +ifremaining>0: +pbar.update(remaining) +update_stage(pbar,"Complete") +pbar.clear() +pbar.close() + +exceptExceptionase: +remaining=len(stages)-pbar.n +ifremaining>0: +pbar.update(remaining) +update_stage(pbar,"Complete") +pbar.clear() +pbar.close() +print_status('error',e) +sys.exit(1) + +#Ensureprogressbarcompletesevenonerror +ifresult: +print_success(f"\n✓Documentationupdatedfor{self.relative_file_path}") +else: +print_success(f"\n✓Nochangesneededfor{self.relative_file_path}") + + + + + diff --git a/docs345/xml/folder__analyzer_8py.xml b/docs345/xml/folder__analyzer_8py.xml new file mode 100644 index 0000000..37829c6 --- /dev/null +++ b/docs345/xml/folder__analyzer_8py.xml @@ -0,0 +1,82 @@ + + + + folder_analyzer.py + penify_hook::folder_analyzer::FolderAnalyzerGenHook + penify_hook + penify_hook::folder_analyzer + + + + + +importos +fromgitimportRepo + +frompenify_hook.base_analyzerimportBaseAnalyzer +from.api_clientimportAPIClient +from.file_analyzerimportFileAnalyzerGenHook +fromtqdmimporttqdm + +classFolderAnalyzerGenHook(BaseAnalyzer): +def__init__(self,dir_path:str,api_client:APIClient): +self.dir_path=dir_path +super().__init__(dir_path,api_client) + +deflist_all_files_in_dir(self,dir_path:str): +"""Listallnon-hiddenfilesinadirectoryanditssubdirectories. + +Thisfunctionrecursivelytraversesthespecifieddirectoryandits +subdirectories,collectingpathsofallnon-hiddenfiles.Itfiltersout +hiddendirectoriesandfiles(thosestartingwithadot)toensureonly +visiblefilesarereturned. + +Args: +dir_path(str):Thepathtothedirectorywhosefilesandsubdirectoryfilesneedtobe +listed. + +Returns: +list:Alistcontainingthefullpathsofallnon-hiddenfileswithinthe +specifieddirectoryanditssubdirectories. +""" + +files=[] +fordirpath,dirnames,filenamesinos.walk(dir_path): +dirnames[:]=[dfordindirnamesifnotd.startswith(".")] +forfilenameinfilenames: +#Constructthefullfilepath +full_path=os.path.join(dirpath,filename) +files.append(full_path) +returnfiles + +defrun(self): +"""Runthepost-commithook. + +Thisfunctionprocessesallfilesinaspecifieddirectoryusinga +progressbar.Itlistsallfiles,initializesa`FileAnalyzerGenHook` +foreachfile,andrunsit.Errorsduringprocessingofindividualfiles +arecaughtandlogged,butdonotstoptheprocessingofotherfiles.A +progressbarisdisplayedindicatingthenumberoffilesprocessed. + +Args: +self(PostCommitHook):Theinstanceofthepost-commithookclass. +""" +try: +file_list=self.list_all_files_in_dir(self.dir_path) +total_files=len(file_list) +print(f"Processing{total_files}filesinfolder[{self.dir_path}]") + +withtqdm(total=total_files,desc="Processingfiles",unit="file",ncols=80,ascii=True)aspbar: +forfile_pathinfile_list: +try: +analyzer=FileAnalyzerGenHook(file_path,self.api_client) +analyzer.run() +exceptExceptionasfile_error: +print(f"Errorprocessingfile[{file_path}]:{file_error}") +pbar.update(1)#Evenifthereisanerror,movetheprogressbarforward +exceptExceptionase: +print(f"File[{self.dir_path}]wasnotprocessedduetoerror:{e}") + + + + diff --git a/docs345/xml/git__analyzer_8py.xml b/docs345/xml/git__analyzer_8py.xml new file mode 100644 index 0000000..0414b73 --- /dev/null +++ b/docs345/xml/git__analyzer_8py.xml @@ -0,0 +1,212 @@ + + + + git_analyzer.py + penify_hook::git_analyzer::GitDocGenHook + penify_hook + penify_hook::git_analyzer + + + + + +importos +importre +fromgitimportRepo +fromtqdmimporttqdm + +frompenify_hook.base_analyzerimportBaseAnalyzer +frompenify_hook.utilsimportget_repo_details,recursive_search_git_folder +from.api_clientimportAPIClient +importlogging +from.ui_utilsimport( +print_info,print_success,print_warning,print_error, +print_processing,print_status,create_progress_bar, +format_file_path +) + +#Setuplogger +logger=logging.getLogger(__name__) + +classGitDocGenHook(BaseAnalyzer): +def__init__(self,repo_path:str,api_client:APIClient): +super().__init__(repo_path,api_client) + +defget_modified_files_in_last_commit(self): +"""Getthelistoffilesmodifiedinthelastcommit. + +Thisfunctionretrievesthefilesthatweremodifiedinthemostrecent +commitoftherepository.Itaccessesthelastcommitanditerates +throughthedifferencestocompilealistofuniquefilepathsthatwere +changed.Thefunctionreturnsthislistforfurtherprocessingor +analysis. + +Returns: +list:Alistoffilepathsthatweremodifiedinthelastcommit. +""" +last_commit=self.repo.head.commit +modified_files=[] +fordiffinlast_commit.diff('HEAD~1'): +ifdiff.a_pathnotinmodified_files: +modified_files.append(diff.a_path) +returnmodified_files + +defget_modified_lines(self,diff_text): +"""Extractmodifiedlinenumbersfromadifftext. + +Thisfunctionprocessesadifftexttoidentifyandextracttheline +numbersthathavebeenmodified.Itdistinguishesbetweenaddedand +deletedlinesandkeepstrackofthecurrentlinenumberasitparses +throughthediff.Thefunctionhandleshunkheadersandensuresthatany +deletionsattheendofthefilearealsocaptured. + +Args: +diff_text(str):Astringcontainingthedifftexttobeprocessed. + +Returns: +list:Asortedlistofuniquelinenumbersthathavebeenmodified. +""" +modified_lines=[] +current_line=0 +deletion_start=None + +forlineindiff_text.splitlines(): +ifline.startswith('@@'): +#Parsethehunkheader +_,old,new,_=line.split('',3) +current_line=int(new.split(',')[0].strip('+')) +deletion_start=None +elifline.startswith('-'): +#Thisisadeletedline +ifdeletion_startisNone: +deletion_start=current_line +elifline.startswith('+'): +#Thisisanaddedline +modified_lines.append(current_line) +current_line+=1 +ifdeletion_startisnotNone: +modified_lines.append(deletion_start) +deletion_start=None +else: +#Thisisanunchangedline +current_line+=1 +ifdeletion_startisnotNone: +modified_lines.append(deletion_start) +deletion_start=None + +#Handlecasewheredeletionisattheendofthefile +ifdeletion_startisnotNone: +modified_lines.append(deletion_start) + +returnsorted(set(modified_lines))#Removeduplicatesandsort + +defprocess_file(self,file_path): +"""Processafilebycheckingitstype,readingitscontent,andsendingit +toanAPI. + +Thismethodconstructstheabsolutepathofthespecifiedfileand +verifiesifthefilehasavalidextension.Ifthefiletypeis +supported,itreadsthecontentofthefileandretrievesthe +differencesfromthelastcommitintherepository.Ifchangesare +detected,itsendsthefilecontentalongwiththemodifiedlinestoan +APIforfurtherprocessing.IftheAPIresponseindicatesnochanges, +theoriginalfilewillnotbeoverwritten. + +Args: +file_path(str):Therelativepathtothefiletobeprocessed. + +Returns: +bool:Trueifthefilewassuccessfullyprocessedandupdated,False +otherwise. +""" +file_abs_path=os.path.join(self.repo_path,file_path) +file_extension=os.path.splitext(file_path)[1].lower() + +ifnotfile_extension: +logger.info(f"File{file_path}hasnoextension.Skipping.") +returnFalse + +file_extension=file_extension[1:]#Removetheleadingdot + +iffile_extensionnotinself.supported_file_types: +logger.info(f"Filetype{file_extension}isnotsupported.Skipping{file_path}.") +returnFalse + +withopen(file_abs_path,'r')asfile: +content=file.read() + +#Getthediffofthefileinthelastcommit +last_commit=self.repo.head.commit +prev_commit=last_commit.parents[0]iflast_commit.parentselselast_commit + +#Usegitcommandtogetthediff +diff_text=self.repo.git.diff(prev_commit.hexsha,last_commit.hexsha,'--',file_path) + +ifnotdiff_text: +logger.info(f"Nochangesdetectedfor{file_path}") +returnFalse + +modified_lines=self.get_modified_lines(diff_text) +#SenddatatoAPI +response=self.api_client.send_file_for_docstring_generation(file_path,content,modified_lines,self.repo_details) +ifresponseisNone: +returnFalse + +ifresponse==content: +logger.info(f"Nochangesdetectedfor{file_path}") +returnFalse +#Iftheresponseissuccessful,replacethefilecontent +withopen(file_abs_path,'w')asfile: +file.write(response) +logger.info(f"Updatedfile{file_path}withgenerateddocumentation") +returnTrue + +defrun(self): +"""Runthepost-commithook. + +Thismethodretrievesthelistofmodifiedfilesfromthelastcommit +andprocesseseachfile.Itstagesanyfilesthathavebeenmodified +duringprocessingandcreatesanauto-commitifchangesweremade.A +progressbarisdisplayedtoindicatetheprocessingstatusofeach +file.Themethodhandlesanyexceptionsthatoccurduringfile +processing,printinganerrormessageforeachfilethatfailsto +process.Ifanymodificationsaremadetothefiles,anauto-commitis +createdtosavethosechanges. +""" +logger.info("Startingdoc_gen_hookprocessing") +print_info("Startingdoc_gen_hookprocessing") + +modified_files=self.get_modified_files_in_last_commit() +changes_made=False +total_files=len(modified_files) + +withcreate_progress_bar(total_files,"Processingfiles","file")aspbar: +forfileinmodified_files: +print_processing(file) +logging.info(f"Processingfile:{file}") +try: +ifself.process_file(file): +#Stagethemodifiedfile +self.repo.git.add(file) +changes_made=True +print_status('success',"Documentationupdated") +else: +print_status('warning',"Nochangesneeded") +exceptExceptionasfile_error: +error_msg=f"Errorprocessingfile[{file}]:{file_error}" +logger.error(error_msg) +print_status('error',error_msg) +pbar.update(1)#Updatetheprogressbar + +#Ifanyfilewasmodified,createanewcommit +ifchanges_made: +#self.repo.git.commit('-m','Auto-commit:Updatedfilesafterdoc_gen_hookprocessing.') +logger.info("Auto-commitcreatedwithchanges.") +print_success("\n✓Auto-commitcreatedwithchanges") +else: +logger.info("doc_gen_hookcomplete.Nochangesmade.") +print_info("\n✓doc_gen_hookcomplete.Nochangesmade.") + + + + diff --git a/docs345/xml/hook__commands_8py.xml b/docs345/xml/hook__commands_8py.xml new file mode 100644 index 0000000..4f9c773 --- /dev/null +++ b/docs345/xml/hook__commands_8py.xml @@ -0,0 +1,69 @@ + + + + hook_commands.py + penify_hook + penify_hook::commands + penify_hook::commands::hook_commands + + + + + +importsys +frompathlibimportPath + +HOOK_FILENAME="post-commit" +HOOK_TEMPLATE="""#!/bin/sh +#Thisisapost-commithookgeneratedbypenify. +#Automaticallygeneratesdocumentationforchangedfilesaftereachcommit. + +penifydocgen-gf{git_folder_path}-t{token} +""" + +definstall_git_hook(location,token): +"""Installapost-commithookinthespecifiedlocationthatgenerates +documentation +forchangedfilesaftereachcommit. + +Args: +location(str):ThepathtotheGitrepositorywherethehookshouldbeinstalled. +token(str):Theauthenticationtokenrequiredtoaccessthedocumentationgeneration +service. +""" +hooks_dir=Path(location)/".git/hooks" +hook_path=hooks_dir/HOOK_FILENAME + +ifnothooks_dir.exists(): +print(f"Error:Thehooksdirectory{hooks_dir}doesnotexist.") +sys.exit(1) + +hook_content=HOOK_TEMPLATE.format(token=token,git_folder_path=location) +hook_path.write_text(hook_content) +hook_path.chmod(0o755)#Makethehookscriptexecutable + +print(f"Post-commithookinstalledin{hook_path}") +print(f"Documentationwillnowbeautomaticallygeneratedaftereachcommit.") + +defuninstall_git_hook(location): +"""Uninstallsthepost-commithookfromthespecifiedlocation. + +Thisfunctionattemptstoremoveapost-commitgithooklocatedatthe +givenpath.Itconstructsthepathtothehookandchecksifitexists. +Ifthehookisfound,itisdeleted,andaconfirmationmessageis +printed.Ifnohookisfound,amessageindicatingthisisalsoprinted. + +Args: +location(Path):Thebasedirectorywherethe.git/hooksdirectoryislocated. +""" +hook_path=Path(location)/".git/hooks"/HOOK_FILENAME + +ifhook_path.exists(): +hook_path.unlink() +print(f"Post-commithookuninstalledfrom{hook_path}") +else: +print(f"Nopost-commithookfoundin{hook_path}") + + + + diff --git a/docs345/xml/index.xml b/docs345/xml/index.xml new file mode 100644 index 0000000..01b2ebc --- /dev/null +++ b/docs345/xml/index.xml @@ -0,0 +1,351 @@ + + + penify_hook::api_client::APIClient + api_url + AUTH_TOKEN + BEARER_TOKEN + __init__ + send_file_for_docstring_generation + generate_commit_summary + get_supported_file_types + generate_commit_summary_with_llm + get_api_key + + penify_hook::base_analyzer::BaseAnalyzer + folder_path + repo_path + repo + repo_details + relative_file_path + api_client + supported_file_types + __init__ + + penify_hook::commit_analyzer::CommitDocGenHook + llm_client + __init__ + get_summary + run + process_jira_integration + _amend_commit + + Exception + + penify_hook::file_analyzer::FileAnalyzerGenHook + file_path + __init__ + process_file + print_processing + run + + penify_hook::folder_analyzer::FolderAnalyzerGenHook + dir_path + __init__ + list_all_files_in_dir + run + + penify_hook::git_analyzer::GitDocGenHook + __init__ + get_modified_files_in_last_commit + get_modified_lines + process_file + run + + penify_hook::utils::GitRepoNotFoundError + + penify_hook::jira_client::JiraClient + jira_url + jira_user + jira_api_token + jira_client + __init__ + is_connected + extract_issue_keys_from_branch + extract_issue_keys + get_issue_details + add_comment + update_issue_status + format_commit_message_with_jira_info + get_detailed_issue_context + get_commit_context_from_issues + enhance_commit_message + + penify_hook::llm_client::LLMClient + model + _litellm + __init__ + litellm + generate_commit_summary + + tests::test_commit_commands::TestCommitCommands + mock_api_client + mock_llm_client + mock_jira_client + mock_commit_doc_gen + mock_git_folder_search + mock_print_functions + test_commit_code_with_llm_client + test_commit_code_with_jira_client + test_commit_code_with_jira_connection_failure + test_commit_code_error_handling + test_setup_commit_parser + test_handle_commit + + tests::test_config_commands::TestConfigCommands + test_get_penify_config_existing_dir + test_get_penify_config_new_dir + test_get_llm_config_exists + test_get_llm_config_empty + test_get_llm_config_invalid_json + test_get_jira_config_exists + test_save_llm_config_success + test_save_llm_config_failure + test_save_jira_config_success + test_get_token_from_env + test_get_token_from_config + test_get_token_not_found + + tests::test_web_config::TestWebConfig + test_config_llm_web_server_setup + test_config_jira_web_server_setup + + penify_hook + + penify_hook::api_client + + penify_hook::base_analyzer + + penify_hook::commands + + penify_hook::commands::auth_commands + save_credentials + login + + penify_hook::commands::commit_commands + commit_code + setup_commit_parser + handle_commit + + penify_hook::commands::config_commands + DOTENV_AVAILABLE + path + load_env_files + get_penify_config + get_env_var_or_default + save_llm_config + save_jira_config + get_llm_config + get_jira_config + config_llm_web + config_jira_web + get_token + + penify_hook::commands::doc_commands + docgen_description + generate_doc + setup_docgen_parser + handle_docgen + + penify_hook::commands::hook_commands + HOOK_FILENAME + HOOK_TEMPLATE + install_git_hook + uninstall_git_hook + + penify_hook::commit_analyzer + + penify_hook::config_command + setup_config_parser + handle_config + + penify_hook::constants + API_URL + DASHBOARD_URL + + penify_hook::file_analyzer + logger + + penify_hook::folder_analyzer + + penify_hook::git_analyzer + logger + + penify_hook::jira_client + JIRA_AVAILABLE + + penify_hook::llm_client + + penify_hook::login_command + setup_login_parser + handle_login + + penify_hook::main + main + + penify_hook::ui_utils + autoreset + INFO_COLOR + SUCCESS_COLOR + WARNING_COLOR + ERROR_COLOR + HIGHLIGHT_COLOR + NEUTRAL_COLOR + SUCCESS_SYMBOL + WARNING_SYMBOL + ERROR_SYMBOL + PROCESSING_SYMBOL + format_info + format_success + format_warning + format_error + format_highlight + format_file_path + print_info + print_success + print_warning + print_error + print_processing + print_status + create_progress_bar + create_stage_progress_bar + update_stage + + penify_hook::utils + logger + get_repo_details + recursive_search_git_folder + find_git_parent + + setup + name + version + packages + install_requires + entry_points + author + author_email + description + long_description + long_description_content_type + url + classifiers + python_requires + + std + + tests + + tests::conftest + + tests::test_commit_commands + + tests::test_config_commands + + tests::test_doc_commands + test_generate_doc_no_location + test_generate_doc_file_location + test_generate_doc_folder_location + test_generate_doc_error_handling + test_setup_docgen_parser + test_handle_docgen_install_hook + test_handle_docgen_uninstall_hook + test_handle_docgen_generate + test_handle_docgen_no_token + test_generate_doc_with_file_exception + test_generate_doc_with_folder_exception + + tests::test_web_config + + commit-commands.md + + config-commands.md + + detailed-usage.md + + doc_commands.md + + example-workflows.md + + penify-cli-documentation.md + + api_client.py + + base_analyzer.py + + __init__.py + + __init__.py + + __init__.py + + auth_commands.py + + commit_commands.py + + config_commands.py + + doc_commands.py + + hook_commands.py + + commit_analyzer.py + + config_command.py + + constants.py + + file_analyzer.py + + folder_analyzer.py + + git_analyzer.py + + jira_client.py + + llm_client.py + + login_command.py + + main.py + + ui_utils.py + + utils.py + + README.md + + setup.py + + conftest.py + + test_commit_commands.py + + test_config_commands.py + + test_doc_commands.py + + test_web_config.py + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + + /tmp/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + + diff --git a/docs345/xml/index.xsd b/docs345/xml/index.xsd new file mode 100644 index 0000000..cfb7041 --- /dev/null +++ b/docs345/xml/index.xsd @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs345/xml/jira__client_8py.xml b/docs345/xml/jira__client_8py.xml new file mode 100644 index 0000000..d7cc43a --- /dev/null +++ b/docs345/xml/jira__client_8py.xml @@ -0,0 +1,472 @@ + + + + jira_client.py + penify_hook::jira_client::JiraClient + penify_hook + penify_hook::jira_client + + + + + +importre +importlogging +fromtypingimportOptional,Dict,List,Any + +frompenify_hook.ui_utilsimportprint_info,print_success +try: +fromjiraimportJIRA +JIRA_AVAILABLE=True +exceptImportError: +JIRA_AVAILABLE=False + +classJiraClient: +""" +ClientforinteractingwithJIRAAPI +""" + +def__init__(self,jira_url:str=None,jira_user:str=None,jira_api_token:str=None): +""" +InitializetheJIRAclient. + +Args: +jira_url:BaseURLforJIRAinstance(e.g.,"https://your-domain.atlassian.net") +jira_user:JIRAusernameoremail +jira_api_token:JIRAAPItoken +""" +self.jira_url=jira_url +self.jira_user=jira_user +self.jira_api_token=jira_api_token +self.jira_client=None + +ifnotJIRA_AVAILABLE: +logging.warning("JIRApackagenotavailable.JIRAintegrationwillnotwork.") +return + +ifjira_urlandjira_userandjira_api_token: +try: +self.jira_client=JIRA( +server=jira_url, +basic_auth=(jira_user,jira_api_token) +) +logging.info("JIRAclientinitializedsuccessfully") +exceptExceptionase: +logging.error(f"FailedtoinitializeJIRAclient:{e}") +self.jira_client=None + +defis_connected(self)->bool: +"""CheckiftheJIRAclientisconnected. + +ThisfunctionverifieswhethertheJIRAclienthassuccessfully +establishedaconnection.Itreturns`True`iftheclientisconnected, +and`False`otherwise. + +Returns: +bool:TrueiftheJIRAclientisconnected,Falseotherwise +""" +returnself.jira_clientisnotNone + +defextract_issue_keys_from_branch(self,branch_name:str)->List[str]: +"""ExtractsJIRAissuekeysfromabranchname. + +Thisfunctionsearchesthroughagivengitbranchnametofindand +returnanyJIRAissuekeysthatmatchthepattern.Commonconventions +forJIRAissuekeysinbranchnamesinclude:- +feature/PROJECT-123-description-bugfix/PROJECT-123-fix-something- +hotfix/PROJECT-123/short-desc + +Args: +branch_name(str):ThenameofthegitbranchtosearchforJIRAissuekeys. + +Returns: +List[str]:AlistofuniqueJIRAissuekeysfoundinthebranchname. + +Examples: +extract_issue_keys_from_branch("feature/PROJ-456-add-new-feature") +#Output:['PROJ-456'] +""" +#CommonJIRAissuekeypattern:PROJECT-123 +pattern=r'[A-Z][A-Z0-9_]+-[0-9]+' +matches=re.findall(pattern,branch_name) +ifmatches: +print_info(f"FetchingrelevantJIRAissues") +returnlist(set(matches))#Removeduplicates + +defextract_issue_keys(self,text:str)->List[str]: +"""ExtractJIRAissuekeysfromagiventext. + +Thisfunctionsearchesthroughtheprovidedtexttofindandreturnall +uniqueJIRAissuekeys.AJIRAissuekeytypicallyfollowsthepattern +ofPROJECT-123,wherePROJECTisalphanumericandconsistsofatleast +oneuppercaseletterfollowedbyoneormorealphanumericcharacters, +and123isanumericsequence. + +Args: +text(str):ThetextinwhichtosearchforJIRAissuekeys. + +Returns: +List[str]:AlistofuniqueJIRAissuekeysfoundinthetext. +""" +#CommonJIRAissuekeypattern:PROJECT-123 +pattern=r'[A-Z][A-Z0-9_]+-[0-9]+' +matches=re.findall(pattern,text) +returnlist(set(matches))#Removeduplicates + +defget_issue_details(self,issue_key:str)->Optional[Dict[str,Any]]: +"""RetrievedetailsofaJIRAissuebasedonitskey. + +ThisfunctionfetchesdetailedinformationaboutaspecifiedJIRAissue +usingtheprovidedissuekey.ItchecksiftheJIRAclientisconnected +beforeattemptingtoretrievetheissue.Iftheclientisnotconnected, +itlogsawarningandreturns`None`.Thefunctionthenattemptsto +fetchtheissuefromtheJIRAserverandconstructsadictionary +containingvariousdetailsabouttheissuesuchasitskey,summary, +status,description,assignee,reporter,type,priority,andURL.Ifany +errorsoccurduringthisprocess,theyarelogged,and`None`is +returned. + +Args: +issue_key(str):TheJIRAissuekey(e.g.,"PROJECT-123"). + +Returns: +Dict[str,Any]orNone:AdictionarycontainingthedetailsoftheJIRA +issueiffound,otherwise`None`. +""" +ifnotself.is_connected(): +logging.warning("JIRAclientnotconnected") +returnNone + +try: +issue=self.jira_client.issue(issue_key) +return{ +'key':issue.key, +'summary':issue.fields.summary, +'status':issue.fields.status.name, +'description':issue.fields.description, +'assignee':issue.fields.assignee.displayNameifissue.fields.assigneeelseNone, +'reporter':issue.fields.reporter.displayNameifissue.fields.reporterelseNone, +'type':issue.fields.issuetype.name, +'priority':issue.fields.priority.nameifhasattr(issue.fields,'priority')andissue.fields.priorityelseNone, +'url':f"{self.jira_url}/browse/{issue.key}" +} +exceptExceptionase: +logging.error(f"Errorfetchingissue{issue_key}:{e}") +returnNone + +defadd_comment(self,issue_key:str,comment:str)->bool: +"""AddacommenttoaJIRAissue. + +Args: +issue_key(str):JIRAissuekey(e.g.,"PROJECT-123") +comment(str):Commenttexttoadd + +Returns: +bool:Trueifthecommentwasaddedsuccessfully,Falseotherwise +""" +ifnotself.is_connected(): +logging.warning("JIRAclientnotconnected") +returnFalse + +try: +self.jira_client.add_comment(issue_key,comment) +logging.info(f"Commentaddedto{issue_key}") +returnTrue +exceptExceptionase: +logging.error(f"Erroraddingcommentto{issue_key}:{e}") +returnFalse + +defupdate_issue_status(self,issue_key:str,transition_name:str)->bool: +"""UpdatethestatusofaJIRAissue. + +Args: +issue_key(str):ThekeyoftheJIRAissuetobeupdated. +transition_name(str):Thenameofthedesiredtransition. + +Returns: +bool:Trueifthestatuswassuccessfullyupdated,Falseotherwise. +""" +ifnotself.is_connected(): +logging.warning("JIRAclientnotconnected") +returnFalse + +try: +#Getavailabletransitions +transitions=self.jira_client.transitions(issue_key) + +#FindthetransitionIDbasedonname +transition_id=None +fortintransitions: +ift['name'].lower()==transition_name.lower(): +transition_id=t['id'] +break + +iftransition_id: +self.jira_client.transition_issue(issue_key,transition_id) +logging.info(f"Updated{issue_key}statusto{transition_name}") +returnTrue +else: +logging.warning(f"Transition'{transition_name}'notfoundfor{issue_key}") +returnFalse + +exceptExceptionase: +logging.error(f"Errorupdatingstatusfor{issue_key}:{e}") +returnFalse + +defformat_commit_message_with_jira_info(self,commit_title:str,commit_description:str,issue_keys:List[str]=None)->tuple: +"""FormatcommitmessagewithJIRAissueinformation. + +Args: +commit_title(str):Theoriginalcommittitle. +commit_description(str):Theoriginalcommitdescription. +issue_keys(List[str]?):AlistofJIRAissuekeystoincludeinthecommitmessage.Ifnot +provided,issuekeyswillbeextractedfromboththetitleandthe +description. + +Returns: +tuple:AtuplecontainingtheupdatedcommittitleanddescriptionwithJIRA +informationincluded. +""" +#Ifnoissuekeysprovided,extractthemfromtitleanddescription +ifnotissue_keys: +title_keys=self.extract_issue_keys(commit_title) +desc_keys=self.extract_issue_keys(commit_description) +issue_keys=list(set(title_keys+desc_keys)) + +ifnotissue_keysornotself.is_connected(): +returncommit_title,commit_description + +#Formatthetitletoincludetheissuekeyifnotalreadythere +updated_title=commit_title +ifissue_keysandnotany(keyincommit_titleforkeyinissue_keys): +#Addthefirstissuekeytothetitle +updated_title=f"{issue_keys[0]}:{commit_title}" + +#Addissuedetailstothedescription +updated_description=commit_description + +issue_details_section="\n\n##RelatedJIRAIssues\n\n" +has_issue_details=False + +forissue_keyinissue_keys: +details=self.get_issue_details(issue_key) +ifdetails: +has_issue_details=True +issue_details_section+=( +f"***[{details['key']}]({details['url']})**:{details['summary']}\n" +f"*Status:{details['status']}\n" +f"*Type:{details['type']}\n" +) + +ifhas_issue_details: +updated_description+=issue_details_section + +returnupdated_title,updated_description + +defget_detailed_issue_context(self,issue_key:str)->Dict[str,Any]: +"""RetrievecomprehensivedetailsaboutaJIRAissueincludingcontextfor +bettercommitmessages. + +ThisfunctionfetchesdetailedinformationfromaspecifiedJIRAissue +andconstructsadictionarycontainingvariouscontextfieldssuchas +theissuesummary,description,type,status,priority,comments,URL, +andadditionalcustomfieldslikeacceptancecriteriaandsprint +information.Ifanyerrorsoccurduringthefetchingprocess, +appropriatewarningsorerrorsarelogged. + +Args: +issue_key(str):TheJIRAissuekey(e.g.,"PROJECT-123"). + +Returns: +Dict[str,Any]:Adictionarycontainingbusinessandtechnicalcontextfromtheissue. +""" +ifnotself.is_connected(): +logging.warning("JIRAclientnotconnected") +return{} + +try: +issue=self.jira_client.issue(issue_key) + +#Getissuehistoryandcommentsforcontext +comments=[] +try: +forcommentinself.jira_client.comments(issue): +comments.append(comment.body) +exceptExceptionase: +logging.warning(f"Couldnotfetchcommentsfor{issue_key}:{e}") + +#Buildacomprehensivecontextobject +context={ +'key':issue.key, +'summary':issue.fields.summary, +'description':issue.fields.descriptionor"", +'type':issue.fields.issuetype.name, +'status':issue.fields.status.name, +'priority':issue.fields.priority.nameifhasattr(issue.fields,'priority')andissue.fields.priorityelse"None", +'comments':comments[:3],#Limittolatest3comments +'url':f"{self.jira_url}/browse/{issue.key}" +} + +#Addacceptancecriteriaifavailable(commoncustomfields) +#FieldnamesmayvarybyJIRAinstance +acceptance_criteria=None +try: +forfield_namein['customfield_10001','acceptance_criteria','customfield_10207']: +ifhasattr(issue.fields,field_name): +field_value=getattr(issue.fields,field_name) +iffield_value: +acceptance_criteria=field_value +break +exceptException: +pass + +ifacceptance_criteria: +context['acceptance_criteria']=acceptance_criteria + +#Trytoextractsprintinformation +try: +sprint_field=None +forfield_nameindir(issue.fields): +if'sprint'infield_name.lower(): +sprint_field=field_name +break + +ifsprint_field: +sprint_value=getattr(issue.fields,sprint_field) +ifsprint_value: +ifisinstance(sprint_value,list)andlen(sprint_value)>0: +context['sprint']=sprint_value[0] +else: +context['sprint']=str(sprint_value) +exceptExceptionase: +logging.debug(f"Couldnotextractsprintinformation:{e}") + +returncontext + +exceptExceptionase: +logging.error(f"Errorfetchingdetailedinformationfor{issue_key}:{e}") +return{} + +defget_commit_context_from_issues(self,issue_keys:List[str])->Dict[str,Any]: +"""GathercontextualinformationfromJIRAissuestoimprovecommit +messages. + +ThisfunctionprocessesalistofJIRAissuekeys,retrievesdetailed +contextforeachissue,andaggregatesitintoadictionarythatcanbe +usedtoenhancecommitmessages.Itfirstretrievestheprimaryissue +(thefirstkeyinthelist)andthengathersbasicdetailsforany +relatedissues.Theresultingcontextincludesinformationfromboththe +primaryandrelatedissues,alongwithallissuekeys. + +Args: +issue_keys:ListofJIRAissuekeystogatherinformationfrom + +Returns: +Dictcontainingbusinessandtechnicalcontextfromtheissues +""" +ifnotissue_keysornotself.is_connected(): +return{} + +#Gettheprimaryissue(firstinthelist) +primary_issue=self.get_detailed_issue_context(issue_keys[0]) + +#Getbasicinfoforrelatedissues +related_issues=[] +forkeyinissue_keys[1:]:#Skipthefirstoneasit'stheprimary +details=self.get_issue_details(key) +ifdetails: +related_issues.append(details) + +#Buildcontextdictionaryforcommitmessageenhancement +context={ +'primary_issue':primary_issue, +'related_issues':related_issues, +'all_keys':issue_keys +} + +returncontext + +defenhance_commit_message(self,title:str,description:str,issue_keys:List[str])->tuple: +"""EnhanceacommitmessagewithbusinessandtechnicalcontextfromJIRA +issues. + +Args: +title(str):Originalcommittitle. +description(str):Originalcommitdescription. +issue_keys(List[str]):ListofJIRAissuekeystoincludeintheenhancedcommitmessage. + +Returns: +tuple:Atuplecontainingtheenhancedcommittitleanddescriptionwithadded +contextfromJIRAissues. +""" +ifnotissue_keysornotself.is_connected(): +returntitle,description + +#Getcontextinformationfromissues +context=self.get_commit_context_from_issues(issue_keys) +ifnotcontextornotcontext.get('primary_issue'): +returnself.format_commit_message_with_jira_info(title,description,issue_keys) + +#Getprimaryissue +primary=context['primary_issue'] + +#Enhancetitlewithprimaryissuekeyandsummaryifnotalreadyincluded +enhanced_title=title +ifnotany(keyintitleforkeyinissue_keys): +key=primary['key'] +#Keeporiginaltitle,butprefixwithissuekey +enhanced_title=f"{key}:{title}" + +#Enhancedescriptionwithbusinessandtechnicalcontext +enhanced_description=description + +#Addbusinesscontextsection +business_section="\n\n##BusinessContext\n\n" +business_section+=f"**Issue**:[{primary['key']}]({primary['url']})-{primary['summary']}\n" +business_section+=f"**Type**:{primary['type']}\n" +business_section+=f"**Status**:{primary['status']}\n" +business_section+=f"**Priority**:{primary['priority']}\n" + +if'sprint'inprimary: +business_section+=f"**Sprint**:{primary['sprint']}\n" + +if'acceptance_criteria'inprimary: +business_section+=f"\n**AcceptanceCriteria**:\n{primary['acceptance_criteria']}\n" + +ifprimary.get('description'): +#Includeacondensedversionofthedescriptionifit'snottoolong +desc=primary['description'] +iflen(desc)>300: +desc=desc[:300]+"..." +business_section+=f"\n**IssueDescription**:\n{desc}\n" + +#Addtechnicalcontextfromcommentsifavailable +ifprimary.get('comments'): +tech_section="\n##TechnicalNotes\n\n" + +#Extracttechnicaldetailsfromcomments(oftendevsdiscussimplementationdetailshere) +forcommentinprimary['comments']: +iflen(comment)>200:#Onlyincludeshortertechnicalnotes +comment=comment[:200]+"..." +tech_section+=f"-{comment}\n\n" + +iflen(tech_section)>50:#Onlyaddifthere'ssubstantialcontent +enhanced_description+=business_section+tech_section +else: +enhanced_description+=business_section +else: +enhanced_description+=business_section + +#Addrelatedissuessection +ifcontext.get('related_issues'): +related_section="\n##RelatedIssues\n\n" +forissueincontext['related_issues']: +related_section+=f"-[{issue['key']}]({issue['url']}):{issue['summary']}({issue['status']})\n" + +enhanced_description+=related_section + +returnenhanced_title,enhanced_description + + + + diff --git a/docs345/xml/llm__client_8py.xml b/docs345/xml/llm__client_8py.xml new file mode 100644 index 0000000..e41b329 --- /dev/null +++ b/docs345/xml/llm__client_8py.xml @@ -0,0 +1,192 @@ + + + + llm_client.py + penify_hook::llm_client::LLMClient + penify_hook + penify_hook::llm_client + + + + + +importjson +importos +importsys +fromtypingimportDict,Optional,List,Any,Union +importtime + +#Removedeagerlitellmimportandtimingcode +#Willlazyloadlitellmonlywhenneeded + +classLLMClient: +""" +ClientforinteractingwithLLMmodelsusingLiteLLM. +""" + +def__init__(self,model:str=None,api_base:str=None,api_key:str=None): +""" +InitializetheLLMclient. + +Args: +model:LLMmodeltouse(e.g.,"gpt-4","ollama/llama2",etc.) +api_base:BaseURLforAPIrequests(e.g.,"http://localhost:11434"forOllama) +api_key:APIkeyfortheLLMservice +""" +#Configurelitellmifparametersareprovided +self.model=model +ifapi_base: +os.environ["OPENAI_API_BASE"]=api_base +ifapi_key: +os.environ["OPENAI_API_KEY"]=api_key +self._litellm=None + +@property +deflitellm(self): +"""Lazyloadlitellmonlywhenneeded.""" +ifself._litellmisNone: +importlitellm +self._litellm=litellm +returnself._litellm + +defgenerate_commit_summary(self,diff:str,message:str,generate_description:bool,repo_details:Dict,jira_context:Dict=None)->Dict: +"""GenerateacommitsummaryusingtheLLM. + +Thisfunctiongeneratesaconciseanddescriptivecommitsummarybased +ontheprovidedGitdiff,userinstructions,repositorydetails,and +optionalJIRAcontext.ItconstructsapromptfortheLLMtoproducea +committitleandanoptionaldetaileddescription,adheringtoSemantic +CommitMessagesguidelines.IftheJIRAcontextisprovided,itenriches +thepromptwithrelevantissueinformation. + +Args: +diff(str):Gitdiffofchanges. +message(str):User-providedcommitmessageorinstructions. +generate_description(bool):Flagindicatingwhethertoincludeadetaileddescriptioninthe +summary. +repo_details(Dict):Detailsabouttherepository. +jira_context(Dict?):OptionalJIRAissuecontexttoenhancethesummary. + +Returns: +Dict:Adictionarycontainingthetitleanddescriptionforthecommit.If +generate_descriptionisFalse, +the'description'keymaybeabsent. + +Raises: +ValueError:IftheLLMmodelisnotconfigured. +""" +ifnotself.model: +raiseValueError("LLMmodelnotconfigured.PleaseprovideamodelwheninitializingLLMClient.") + +#Limitdiffsizetoavoidtokenlimits +max_diff_chars=10000 +iflen(diff)>max_diff_chars: +diff=diff[:max_diff_chars]+f"\n...(difftruncated,total{len(diff)}characters)" + +#CreatepromptfortheLLM +prompt=f""" +BasedontheGitdiffbelow,generateaconciseanddescriptivecommitsummary. + +Userinstructions:{message} +""" + +#AddJIRAcontextifavailable +ifjira_contextandjira_context.get('primary_issue'): +primary=jira_context['primary_issue'] +prompt+=f""" + +JIRAISSUEINFORMATION: +IssueKey:{primary['key']} +Summary:{primary['summary']} +Type:{primary['type']} +Status:{primary['status']} +""" + +if'description'inprimaryandprimary['description']: +#Includeacondensedversionofthedescription +description=primary['description'] +iflen(description)>500: +description=description[:500]+"..." +prompt+=f"Description:{description}\n" + +if'acceptance_criteria'inprimary: +prompt+=f"AcceptanceCriteria:{primary['acceptance_criteria']}\n" + +prompt+=""" + +PleasemakesureyourcommitmessageaddressesthebusinessrequirementsintheJIRAissue +whileaccuratelydescribingthetechnicalchangesinthediff. +""" + +prompt+=f""" + +Gitdiff: +``` +{diff} +``` + +Pleaseprovide: +1.Ashort,focusedcommittitle(50-72characters)inaSemanticCommitMessagesformat.Format:<type>(<scope>):<subject> +{'2.Adetaileddescriptionthatexplainswhatwaschanged,whyitwaschangedinbothbusinessandtechnicalaspects,andanyimportantcontext'ifgenerate_descriptionelse''} + +ListofSemanticCommitMessagetypesthatyoucanuse: +feat:(newfeaturefortheuser,notanewfeatureforbuildscript) +fix:(bugfixfortheuser,notafixtoabuildscript) +docs:(changestothedocumentation) +style:(formatting,missingsemicolons,etc;noproductioncodechange) +refactor:(refactoringproductioncode,eg.renamingavariable) +test:(addingmissingtests,refactoringtests;noproductioncodechange) +chore:(updatinggrunttasksetc;noproductioncodechange) + +FormatyourresponseasvalidJSONwith'title'{"and'description'"ifgenerate_descriptionelse''}keys. +""" + +try: +#CalltheLLMusinglitellm-nowusingthelazy-loadedproperty +response=self.litellm.completion( +model=self.model, +messages=[{"role":"user","content":prompt}], +temperature=0.2, +max_tokens=800#Increasedtokenlimittoaccommodatedetaileddescriptions +) +content=response.choices[0].message.content + +#ExtractJSONfromtheresponse +try: +#TrytoparsetheentirecontentasJSON +result=json.loads(content) +ifnotisinstance(result,dict)or'title'notinresultor'description'notinresult: +raiseValueError("InvalidJSONstructure") + +exceptjson.JSONDecodeError: +#Ifthatfails,trytoextractJSONfromthecontent +importre +json_match=re.search(r'```json\s*(.*?)\s*```',content,re.DOTALL) +ifjson_match: +result=json.loads(json_match.group(1)) +else: +#Lastresort:extracttitleanddescriptiondirectly +lines=content.split('\n') +title=next((lineforlineinlinesifline.strip()),"Generatedcommit").strip() +description="\n".join(lineforlineinlines[1:]ifline.strip()) +result={ +"title":title, +"description":description +} + +ifnotgenerate_descriptionand'description'inresult: +#Ifdescriptionismissinganduserrequestedit,addaplaceholder +delresult['description'] +returnresult + +exceptExceptionase: +sys.exit(f"Errorgeneratingcommitsummary:{e}") +#FallbacktoabasicsummaryifLLMfails +print(f"ErrorgeneratingcommitsummarywithLLM:{e}") +return{ +"title":"Updatecode", +} + + + + diff --git a/docs345/xml/login__command_8py.xml b/docs345/xml/login__command_8py.xml new file mode 100644 index 0000000..c498a49 --- /dev/null +++ b/docs345/xml/login__command_8py.xml @@ -0,0 +1,40 @@ + + + + login_command.py + penify_hook + penify_hook::login_command + + + + + +defsetup_login_parser(parser): +parser.add_argument("--token",help="SpecifyAPItokendirectly") +#Addallothernecessaryargumentsforlogincommand + +defhandle_login(args): +"""Handlethelogincommand. + +Initiatesauserloginprocessbycallingthe`login`functionfromthe +`penify_hook.commands.auth_commands`moduleusingpredefinedconstants +`API_URL`and`DASHBOARD_URL`fromthe`penify_hook.constants`module. + +Args: +args(argparse.Namespace):Parsedargumentscontainingnecessaryparametersforthelogincommand. + +Returns: +None:Thisfunctiondoesnotreturnanyvalue;itisexpectedtohandlethe +loginprocessinternally. +""" + +frompenify_hook.constantsimportAPI_URL,DASHBOARD_URL +frompenify_hook.commands.auth_commandsimportlogin + + +#Onlyimportdependenciesneededforloginfunctionalityhere +returnlogin(API_URL,DASHBOARD_URL) + + + + diff --git a/docs345/xml/main_8py.xml b/docs345/xml/main_8py.xml new file mode 100644 index 0000000..83db594 --- /dev/null +++ b/docs345/xml/main_8py.xml @@ -0,0 +1,104 @@ + + + + main.py + penify_hook + penify_hook::main + + + + + +importargparse +importsys +importtime + + +defmain(): +"""Mainfunctiontohandlecommand-lineinterface(CLI)interactionswith +Penifyservices. + +Thistoolprovidesacommand-lineinterfaceforgeneratingsmartcommit +messages,configuringlocal-LLMandJIRA,andgeneratingcode +documentation.Itsupportsbasiccommandsthatdonotrequireloginand +advancedcommandsthatrequireuserauthentication.The`--version`flag +canbeusedtodisplaytheversioninformation. + +Returns: +int:Exitstatusoftheprogram(0forsuccess,1forerror). +""" + +parser=argparse.ArgumentParser( +description="""PenifyCLItoolfor: +1.AIcommitmessagegenerationwithJIRAintegrationtoenhancecommitmessages. +2.GeneratingCodeDocumentation,itrequiresSignUptoPenify +3.Formoreinformation,visithttps://penify.wiki/dpc1""", +formatter_class=argparse.RawDescriptionHelpFormatter +) + +#Addversionflag +parser.add_argument('--version','-v',action='store_true',help='Showversioninformation') + +subparsers=parser.add_subparsers(title="options",dest="subcommands") + +#Groupcommandslogically +basic_title="BasicCommands(Nologinrequired)" +advanced_title="AdvancedCommands(Loginrequired)" + +#Creategroupedsubparsers(visuallyseparatedinhelpoutput) +parser.add_argument_group(basic_title) +parser.add_argument_group(advanced_title) + +#Setupsubparserswithproperimportsupfront +commit_parser=subparsers.add_parser("commit",help="Generatesmartcommitmessagesusinglocal-LLM(nologinrequired).") +from.commands.commit_commandsimportsetup_commit_parser +setup_commit_parser(commit_parser) + +config_parser=subparsers.add_parser("config",help="Configurelocal-LLMandJIRA.") +from.config_commandimportsetup_config_parser +setup_config_parser(config_parser) + +login_parser=subparsers.add_parser("login",help="LogintoPenifytouseadvancedfeatureslike'docgen'generation.") +from.login_commandimportsetup_login_parser +setup_login_parser(login_parser) + +docgen_parser=subparsers.add_parser("docgen",help="[REQUIRESLOGIN]GeneratecodedocumentationfortheGitdiff,fileorfolder.") +from.commands.doc_commandsimportsetup_docgen_parser +setup_docgen_parser(docgen_parser) + +#Parseargswithoutvalidationfirsttocheckforsimpleflagslike--version +if'--version'insys.argvor'-v'insys.argv: +fromimportlib.metadataimportversion +try: +print(f"penifyversion{version('penify')}") +except: +print("penifyversion0.2.2") +return0 + +#Parsetheargumentstodeterminewhichcommandwasrequested +args=parser.parse_args() +#Handlethecommands +ifargs.subcommands=="commit": +frompenify_hook.ui_utilsimportprint_info +print_info("Pleasewaitwhilewegeneratethecommitmessage...") +from.commands.commit_commandsimporthandle_commit +returnhandle_commit(args) +elifargs.subcommands=="config": +from.config_commandimporthandle_config +returnhandle_config(args) +elifargs.subcommands=="login": +from.login_commandimporthandle_login +returnhandle_login(args) +elifargs.subcommands=="docgen": +from.commands.doc_commandsimporthandle_docgen +returnhandle_docgen(args) +else: +parser.print_help() +return1 + +if__name__=="__main__": +sys.exit(main()) + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml new file mode 100644 index 0000000..3f93092 --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README.xml @@ -0,0 +1,163 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_README + Penify CLI Tool + + + +Tests + Coverage + +A CLI tool to generate smart commit messages, code documentation, and more. + +Features + +Automatically generate documentation for your code +Support for multiple programming languages +Git hook integration for automatic documentation on commits +Folder and file analysis + + + + +Installation +Install from PyPI: +pipinstallpenify + + + +Usage +Penify CLI provides several subcommands for different functionalities, organized into basic commands (no login required) and advanced commands (login required). + + +Basic Commands (No login required) + +Commit +Generate smart commit messages using local LLM: +penifycommit[-m"Optionalmessage"][-e][-d] + +Options: +-m, --message: Optional custom commit message +-e, --terminal: Open editor to modify commit message before committing +-d, --description: Generate commit message with both title and description (without this flag, only title is generated) + + + + +Config +Configure local LLM and JIRA settings: +#ConfigureLLMsettings +penifyconfigllm--modelMODEL_NAME[--api-baseAPI_URL][--api-keyAPI_KEY] + +#ConfigureLLMsettingsthroughwebinterface +penifyconfigllm-web + +#ConfigureJIRAsettings +penifyconfigjira--urlJIRA_URL--usernameUSERNAME--api-tokenTOKEN[--verify] + +#ConfigureJIRAsettingsthroughwebinterface +penifyconfigjira-web + + + + +Advanced Commands (Login required) + +Login +To log in and obtain an API token: +penifylogin + +This command will open a browser window for authentication. After successful login, the API key will be saved locally for future use. + + +Documentation Generation +Generate documentation for Git diff, files or folders: +#GeneratedocumentationforlatestGitcommitdiff +penifydocgen + +#Generatedocumentationforspecificfileorfolder +penifydocgen-l/path/to/file/or/folder + +Options: +-l, --location: Path to specific file or folder for documentation generation (defaults to current directory) + + + + +Git Hook Management +Install or uninstall Git post-commit hooks: +#InstallGithook +penifydocgeninstall-hook[-l/path/to/repo] + +#UninstallGithook +penifydocgenuninstall-hook[-l/path/to/repo] + +Options: +-l, --location: Path to the Git repository (defaults to current directory) + + + + + +Authentication +Penify CLI uses an API token for authentication with advanced features. +If no token is available and you try to access an advanced feature, you'll be prompted to log in. + + +Local LLM Configuration +For commit message generation, Penify can use a local LLM. Configure it using: +penifyconfigllm--modelMODEL_NAME--api-baseAPI_URL--api-keyAPI_KEY + +Common configurations: +OpenAI: --model gpt-3.5-turbo --api-base https://api.openai.com/v1 --api-key YOUR_KEY +Anthropic: --model claude-2 --api-base https://api.anthropic.com --api-key YOUR_KEY + + + + +JIRA Integration +Configure JIRA integration to enhance commit messages with issue details: +penifyconfigjira--urlhttps://your-domain.atlassian.net--usernameyour-email@example.com--api-tokenYOUR_API_TOKEN + + + +Development +To set up the development environment: + +Clone the repository: gitclonehttps://github.com/SingularityX-ai/penify-cli.git + +Install the package in editable mode: pipinstall-e. + + + + +Running Tests +pytest + + + + +License +This project is licensed under the MIT License. + + +Author +Suman Saurabh (ss.sumansaurabh92@gmail.com) + + +Contributing +Contributions are welcome! Please feel free to submit a Pull Request. + + +Issues +If you encounter any problems or have suggestions, please file an issue on the GitHub repository. + + +Support +For automated API Documentation, Architecture Documentation, Code Documentation, Pull Request Documentation, or if you need a demo, please join our Discord support channel. + + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml new file mode 100644 index 0000000..ddb149f --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands.xml @@ -0,0 +1,172 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_commit_commands + Penify CLI - Commit Commands + + + +The commit command allows you to generate smart, AI-powered commit messages for your Git changes. This document explains all available options and combinations. + +Basic Usage +penifycommit + +By default, this command: +Analyzes your staged Git changes +Generates a concise commit title only +Uses local LLM if configured, or falls back to Penify API + + + + +Command Options + +<tt>-m, --message</tt> +Provide context for the commit message generation: +penifycommit-m"Fixloginflow" + +This hint helps the AI understand your intention and improves the quality of the generated message. + + +<tt>-e, --terminal</tt> +Open an editor to review and edit the generated commit message before committing: +penifycommit-e + +This opens your default Git editor with the generated message for review. + + +<tt>-d, --description</tt> +Generate a detailed commit message with both title and description: +penifycommit-d + +Without this flag, only the commit title is generated. + + + +Option Combinations +You can combine these options for different workflows: + +Generate Title Only with Context +penifycommit-m"UpdateloginUI" + + + +Generate Title and Description with Context +penifycommit-m"UpdateloginUI"-d + + + +Generate and Edit Full Commit Message +penifycommit-d-e + + + +Generate, Edit, and Provide Context +penifycommit-m"Refactorauthentication"-d-e + + + + +LLM and JIRA Integration + +Using Local LLM +If you've configured a local LLM using penify config llm, the commit command will automatically use it for message generation. +Benefits: +Privacy: your code changes don't leave your machine +Speed: no network latency +Works offline + + + + +JIRA Enhancement +If you've configured JIRA integration using penify config jira, the commit command will: + +Detect JIRA issue references in your changes +Fetch issue details from your JIRA instance +Include issue information in the commit message +Format the commit message according to JIRA's smart commit format + + +Example output: PROJ-123:Fixauthenticationbuginloginflow + +-UpdatedOAuthtokenvalidation +-Fixedsessiontimeouthandling +-Addedunittestsforedgecases + +[PROJ-123] + + + + +Configuration Requirements +For the commit command to work: + +You must have configured either: +Local LLM via penify config llm, OR +Logged in via penify login + + +For JIRA enhancement (optional): +Configure JIRA via penify config jira + + + + + + +Examples + +Basic Commit with Default Settings +#Stageyourchanges +gitadd. + +#Generatecommitmessage +penifycommit + +#Commitwiththegeneratedmessage +gitcommit-m"Generatedmessagehere" + + + +Full Workflow with All Features +#Stageyourchanges +gitadd. + +#GeneratedetailedcommitmessagewithJIRAintegration, +#providecontext,andopeneditorforreview +penifycommit-m"Fixloginissue"-d-e + +#Thecommitisautomaticallycompletedafteryousaveandexittheeditor + + + + +Troubleshooting + +Common Issues + +**"No LLM model or API token provided"** +Run penify config llm to configure a local LLM, or +Run penify login to authenticate with Penify + + +**"Failed to connect to JIRA"** +Check your JIRA configuration with cat ~/.penify +Verify your network connection +Ensure your JIRA credentials are valid + + +**"Error initializing LLM client"** +Verify your LLM configuration settings +Ensure the LLM API is accessible + + + + + + + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml new file mode 100644 index 0000000..6606065 --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands.xml @@ -0,0 +1,205 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_config_commands + Penify CLI - Configuration Commands + + + +The config command allows you to set up and manage configuration settings for Penify CLI. This document explains all available configuration options and how to use them. + +Configuration Overview +Penify CLI stores configuration in a JSON file at ~/.penify/config.json. The configuration includes: + +LLM (Large Language Model) settings for local commit message generation +JIRA integration settings for enhanced commit messages +API tokens and other credentials + + + + +Basic Usage +#ConfigureLLMsettings +penifyconfigllm + +#ConfigureJIRAintegration +penifyconfigjira + + + +LLM Configuration + +Web Interface +Running penify config llm opens a web interface in your browser where you can configure: + +Model: The LLM model to use (e.g., gpt-3.5-turbo) +API Base URL: The endpoint URL for your LLM API (e.g., https://api.openai.com/v1) +API Key: Your authentication key for the LLM API + + + + +Supported LLMs +Penify CLI supports various LLM providers: + +OpenAI + +Model: gpt-3.5-turbo or gpt-4 +API Base: https://api.openai.com/v1 +API Key: Your OpenAI API key + + + + +Anthropic + +Model: claude-instant-1 or claude-2 +API Base: https://api.anthropic.com/v1 +API Key: Your Anthropic API key + + + + +Ollama (Local) + +Model: llama2 or any model you have installed +API Base: http://localhost:11434 +API Key: (leave blank) + + + + +Azure OpenAI + +Model: Your deployed model name +API Base: Your Azure endpoint +API Key: Your Azure API key + + + + + +Configuration File Structure +After configuration, your ~/.penify/config.json will contain: +{ +"llm":{ +"model":"gpt-3.5-turbo", +"api_base":"https://api.openai.com/v1", +"api_key":"sk-..." +} +} + + + + +JIRA Configuration + +Web Interface +Running penify config jira opens a web interface where you can configure: + +JIRA URL: Your JIRA instance URL (e.g., https://yourcompany.atlassian.net) +Username: Your JIRA username (typically your email) +API Token: Your JIRA API token + + + + +Creating a JIRA API Token + +Log in to https://id.atlassian.com/manage-profile/security/api-tokens +Click "Create API token" +Give it a name (e.g., "Penify CLI") +Copy the generated token and paste it into the configuration + + + + +Configuration File Structure +After configuration, your ~/.penify/config.json will contain: +{ +"jira":{ +"url":"https://yourcompany.atlassian.net", +"username":"your.email@example.com", +"api_token":"your-jira-api-token" +} +} + + + + +Configuration Locations +Penify CLI looks for configuration in multiple locations: + +Project-specific: .penify/config.json in the Git repository root +User-specific: ~/.penify/config.json in your home directory + + +The project-specific configuration takes precedence if both exist. + + +Environment Variables +You can override configuration settings using environment variables: + +PENIFY_API_TOKEN: Override the stored API token +PENIFY_LLM_MODEL: Override the configured LLM model +PENIFY_LLM_API_BASE: Override the configured LLM API base URL +PENIFY_LLM_API_KEY: Override the configured LLM API key +PENIFY_JIRA_URL: Override the configured JIRA URL +PENIFY_JIRA_USER: Override the configured JIRA username +PENIFY_JIRA_TOKEN: Override the configured JIRA API token + + +Example: exportPENIFY_LLM_MODEL="gpt-4" +penifycommit + + + +Command-Line Configuration +For advanced users or scripting, you can directly edit the configuration file: +#Viewcurrentconfiguration +cat~/.penify/config.json + +#Editconfigurationwithyourpreferrededitor +nano~/.penify/config.json + + + +Sharing Configuration +You can share configuration between machines by copying the .penify/config.json file. However, be cautious with API keys and credentials. +For team settings, consider: +Using a project-specific .penify/config.json with shared settings +Excluding API keys from shared configuration +Using environment variables for sensitive credentials + + + + +Troubleshooting + +Common Issues + +**"Error reading configuration file"** +Check if the file exists: ls -la ~/.penify +Ensure it contains valid JSON: cat ~/.penify/config.json + + +**"Failed to connect to LLM API"** +Verify API base URL and API key +Check network connectivity to the API endpoint +Ensure your account has access to the specified model + + +**"Failed to connect to JIRA"** +Check JIRA URL format (should include https://) +Verify username and API token +Ensure your JIRA account has API access permissions + + + + + + + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml new file mode 100644 index 0000000..e1fa5b4 --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage.xml @@ -0,0 +1,197 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_detailed_usage + Penify CLI - Detailed Usage Guide + + + +This document provides in-depth information about all features and capabilities of the Penify CLI tool. + +Table of Contents + +Penify CLI - Detailed Usage Guide +Table of Contents +Authentication +Login Process +API Token Storage +Token Precedence + + +Command Overview +Commit Message Generation +Code Documentation Generation +Use Cases +Authentication Requirement + + +Configuration Settings +Git Hooks +Post-Commit Hook +Custom Hook Location + + +Advanced Use Cases +CI/CD Integration +Remote Repository Documentation + + +Troubleshooting +Common Issues +Logs +Support + + + + + + + + +Authentication + +Login Process +When you run penify login, the tool: + +Opens your default web browser +Redirects you to Penify's login page +Captures the authentication token after successful login +Saves the token in ~/.penify file + + + + +API Token Storage +API tokens are stored in your home directory in the .penify file. This JSON file contains: +{ +"api_keys":"your-api-token", +"llm":{"model":"...","api_base":"...","api_key":"..."}, +"jira":{"url":"...","username":"...","api_token":"..."} +} + + + +Token Precedence + +Environment variable PENIFY_API_TOKEN (highest priority) +Token in ~/.penify file + + + + + +Command Overview +penify +├──commitGeneratesmartcommitmessages +├──configConfigurelocalLLMandJIRA +│├──llmConfigurelocalLLMsettings +│└──jiraConfigureJIRAintegration +├──loginLogintoPenifyaccount +└──docgenGeneratecodedocumentation +├──install-hookInstallGitpost-commithook +└──uninstall-hookRemoveGitpost-commithook + + + +Commit Message Generation +The commit command analyzes your staged changes and generates meaningful commit messages. It can: + +Use a local LLM if configured +Enhance messages with JIRA issue details +Provide both title and description + + +For specific options and examples, see docs/commit-commands.md. + + +Code Documentation Generation +The docgen command generates documentation for your code: + +Use Cases + +Current Git Diff: Default behavior, documents only changed files +Specific File: Pass a file path with -l path/to/file.py +Entire Folder: Pass a folder path with -l path/to/folder + + + + +Authentication Requirement +This feature requires authentication with a Penify account. Run penify login before using documentation features. + + + +Configuration Settings +Configure local settings using the config command: + +LLM Settings: Configure a local LLM for commit message generation +JIRA Settings: Set up JIRA integration for enhanced commit messages + + +For detailed configuration options, see docs/config-commands.md. + + +Git Hooks +Penify can install Git hooks to automate documentation generation: + +Post-Commit Hook + +Install: penify docgen install-hook +What it does: Automatically generates documentation for changed files after each commit +Uninstall: penify docgen uninstall-hook + + + + +Custom Hook Location +You can specify a custom location for Git hooks: +penifydocgeninstall-hook-l/path/to/git/repo + + + + +Advanced Use Cases + +CI/CD Integration +For CI/CD pipelines: + +Set PENIFY_API_TOKEN as an environment variable +Run commands without requiring interactive login + + + + +Remote Repository Documentation +Generate documentation for an entire repository: +gitclonehttps://github.com/user/repo +cdrepo +penifydocgen-l. + + + + +Troubleshooting + +Common Issues + +API Key Errors: Ensure you've run penify login or set PENIFY_API_TOKEN +LLM Configuration: Check your LLM settings with cat ~/.penify +JIRA Integration: Verify JIRA credentials in your configuration + + + + +Logs +For more detailed logs, you can set the environment variable: +exportPENIFY_DEBUG=1 + + + +Support +For additional help, visit https://docs.penify.dev/ or contact support@penify.dev + + + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml new file mode 100644 index 0000000..7107276 --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands.xml @@ -0,0 +1,317 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_doc_commands + Penify CLI - Documentation Generation Commands + + + +This document provides a detailed guide to all permutations and combinations of the docgen command, including extensive information about Git hook commands for automating documentation generation. + +Table of Contents + +Basic Usage +Command Options +Option Combinations +Git Hook Commands +Hook Installation +Hook Customization +Hook Uninstallation + + +Advanced Use Cases +Troubleshooting + + + + +Basic Usage +penifydocgen + +By default, this command: +Analyzes the current Git diff (changes since last commit) +Generates documentation for changed files only +Requires authentication via penify login + + + + +Command Options + +<tt>-l, --location</tt> +Specify a target for documentation generation: +#Generatedocumentationforaspecificfile +penifydocgen-lpath/to/file.py + +#Generatedocumentationforaspecificfolder +penifydocgen-lpath/to/folder + +Without this flag, Penify analyzes only Git-tracked modified files. + + +Subcommands + +<tt>install-hook</tt> +Install a Git post-commit hook to automatically generate documentation: +penifydocgeninstall-hook + + + +<tt>uninstall-hook</tt> +Remove the Git post-commit hook: +penifydocgenuninstall-hook + + + + + +Option Combinations + +Generate Documentation for Current Git Diff +#Basicusage-currentGitdiff +penifydocgen + + + +Generate Documentation for a Specific File +#Singlefiledocumentation +penifydocgen-lsrc/main.py + + + +Generate Documentation for a Folder +#Folderdocumentation +penifydocgen-lsrc/models/ + + + +Install Hook in Current Repository +#InstallhookincurrentGitrepository +penifydocgeninstall-hook + + + +Install Hook in Specific Repository +#InstallhookinaspecificGitrepository +penifydocgeninstall-hook-l/path/to/repo + + + +Uninstall Hook from Current Repository +#UninstallhookfromcurrentGitrepository +penifydocgenuninstall-hook + + + +Uninstall Hook from Specific Repository +#UninstallhookfromaspecificGitrepository +penifydocgenuninstall-hook-l/path/to/repo + + + + +Git Hook Commands +Penify provides Git hook commands to automate documentation generation as part of your Git workflow. + +Hook Installation + +How Hooks Work +When you install a Git hook with penify docgen install-hook, Penify: + +Creates a post-commit hook script in the .git/hooks directory +Makes the script executable +Configures the hook to run penify docgen after each commit + + + + +Hook Script Content +The generated post-commit hook contains: +#!/bin/sh +#Thisisapost-commithookgeneratedbypenify. +#Automaticallygeneratesdocumentationforchangedfilesaftereachcommit. + +penifydocgen-gf/path/to/git/repository-tyour_api_token + + + +Installation Location +By default, hooks are installed in the current Git repository. You can specify a different location: +penifydocgeninstall-hook-l/path/to/repo + + + +Installation Requirements +To install hooks, you need: +A valid Penify API token (login first with penify login) +Write permissions to the .git/hooks directory + + + + +Verifying Installation +After installation, you can verify that the hook is installed: +cat.git/hooks/post-commit + + + + +Hook Customization +You can customize the post-commit hook after installation: + +Modifying Hook Behavior + +Edit the .git/hooks/post-commit file +Add additional options to the penify docgen command +Add other commands to run after commit + + +Example of a customized hook: +#!/bin/sh +#Thisisapost-commithookgeneratedbypenify. +#Automaticallygeneratesdocumentationforchangedfilesaftereachcommit. + +#Generatedocumentation +penifydocgen-gf/path/to/git/repository-tyour_api_token + +#Additionalcustomcommands +echo"Documentationgenerationcomplete!" + + + +Advanced Hook Scenarios +Conditional Documentation Generation: +#!/bin/sh +#Onlygeneratedocumentationforcommitstothemainbranch +BRANCH=$(gitrev-parse--abbrev-refHEAD) +if["$BRANCH"="main"];then +penifydocgen-gf/path/to/git/repository-tyour_api_token +fi + +Documenting Specific Files/Folders: +#!/bin/sh +#OnlydocumentPythonfilesinthesrcdirectory +penifydocgen-lsrc/-gf/path/to/git/repository-tyour_api_token + + + + +Hook Uninstallation + +Standard Uninstallation +To remove a hook from the current repository: +penifydocgenuninstall-hook + + + +Specific Repository Uninstallation +To remove a hook from a specific repository: +penifydocgenuninstall-hook-l/path/to/repo + + + +Manual Hook Removal +If needed, you can manually remove the hook: +rm.git/hooks/post-commit + + + +Verifying Uninstallation +Check that the hook was successfully removed: +ls-la.git/hooks/post-commit#Shouldreturn"Nosuchfileordirectory" + + + + + +Advanced Use Cases + +Continuous Integration +Run documentation generation in CI pipelines: +#InyourCIscript +exportPENIFY_API_TOKEN=your_api_token +penifydocgen-lsrc/ + + + +Batch Documentation +Generate documentation for multiple repositories: +#Bashscriptforbatchdocumentation +forrepoinrepo1repo2repo3;do +cd/path/to/$repo +penifydocgen-l. +done + + + +Custom Git Hook Integration +Integrate with other Git hooks: +#In.git/hooks/pre-push +penifydocgen-lsrc/ + + + +Documenting Release Tags +Generate documentation when creating a release tag: +#Documenteverythingwhencreatingatag +gittag-av1.0.0 +penifydocgen-l.#Documententirecodebase +gitcommit--amend-m"Releasev1.0.0withupdateddocumentation" + + + + +Troubleshooting + +Common Issues + +**"Authentication required"** +Run penify login before using documentation features +Check your API token with cat ~/.penify + + +**"Permission denied when installing hook"** +Check Git repository permissions +Try running with sudo (if appropriate for your environment) +Ensure the .git/hooks directory exists + + +**"Hook installed but not running"** +Check if the hook is executable: ls -la .git/hooks/post-commit +Make it executable if needed: chmod +x .git/hooks/post-commit +Check for syntax errors in the hook script + + +**"File or directory not found"** +Verify the path provided to the -l option +Ensure you're running the command from the correct directory + + +**"Hook uninstallation failed"** +Check permissions on the .git/hooks directory +Try manual removal: rm .git/hooks/post-commit + + + + + + +Debugging +For detailed output when running documentation commands: +exportPENIFY_DEBUG=1 +penifydocgen-lsrc/ + + + +Getting Help +For command-specific help: +penifydocgen--help +penifydocgeninstall-hook--help +penifydocgenuninstall-hook--help + + + + + + + diff --git a/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml new file mode 100644 index 0000000..2e80f2e --- /dev/null +++ b/docs345/xml/md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows.xml @@ -0,0 +1,161 @@ + + + + md__tmp_github_reposRepoArchDocGenContext_Penify_dev_penify_cli_docs_example_workflows + Penify CLI Example Workflows + + + +This document demonstrates how to use Penify CLI in real-world development workflows to improve your productivity. + +Workflow 1: Efficient Git Commits with AI + +Setup +First, configure your local LLM for offline operation: +penifyconfigllm + +Configure your JIRA integration for enhanced commit messages: +penifyconfigjira + + + +Daily Workflow + +Make your code changes as usual +When ready to commit, use Penify to generate a smart commit message: + + +penifycommit + + +Review and confirm the generated commit message +Git commit and push as usual + + + + +Benefits + +Consistent and descriptive commit messages +Automatic inclusion of relevant JIRA ticket information +Time saved from writing detailed commit messages + + + + + +Workflow 2: Documentation Generation Pipeline + +Setup +Login to Penify to access advanced documentation features: +penifylogin + +Install the Git hook for automatic documentation generation: +penifydocgeninstall-hook + + + +Daily Workflow + +Make your code changes as usual +Commit your changes +Documentation is automatically generated for changed files +Review the generated documentation + + + + +Manual Documentation +For specific files or folders: +penifydocgen-lsrc/components/authentication + + + +Benefits + +Always up-to-date documentation +Consistent documentation style +Time saved from writing detailed documentation + + + + + +Workflow 3: Code Review Enhancement + +Setup +Ensure you're logged into Penify: +penifylogin + + + +Workflow + +Before submitting a PR, generate documentation for changed files: + + +penifydocgen + + +Include the generated documentation in your PR +Reviewers can better understand your changes with the AI-generated explanations + + + + +Benefits + +Improved PR quality +Faster code reviews +Better team understanding of code changes + + + + + +Workflow 4: Onboarding New Team Members + +For Team Leads +Generate comprehensive documentation for the entire codebase: +penifydocgen-l. + + + +For New Team Members +Generate focused documentation for components you're working on: +penifydocgen-lsrc/components/my-feature + + + +Benefits + +Faster onboarding +Better understanding of code structure +Reduced questions to senior team members + + + + + +Workflow 5: Legacy Code Understanding +When working with unfamiliar legacy code: +#Documentaspecificcomplexfile +penifydocgen-lsrc/legacy/complex_module.py + +#Documentanentirelegacycomponent +penifydocgen-lsrc/legacy/old_component + + +Benefits + +Quickly understand complex legacy systems +Reduce time spent deciphering undocumented code +Make safer changes to legacy systems + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook.xml b/docs345/xml/namespacepenify__hook.xml new file mode 100644 index 0000000..2d5d9d8 --- /dev/null +++ b/docs345/xml/namespacepenify__hook.xml @@ -0,0 +1,26 @@ + + + + penify_hook + penify_hook::api_client + penify_hook::base_analyzer + penify_hook::commands + penify_hook::commit_analyzer + penify_hook::config_command + penify_hook::constants + penify_hook::file_analyzer + penify_hook::folder_analyzer + penify_hook::git_analyzer + penify_hook::jira_client + penify_hook::llm_client + penify_hook::login_command + penify_hook::main + penify_hook::ui_utils + penify_hook::utils + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1api__client.xml b/docs345/xml/namespacepenify__hook_1_1api__client.xml new file mode 100644 index 0000000..763c4c4 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1api__client.xml @@ -0,0 +1,12 @@ + + + + penify_hook::api_client + penify_hook::api_client::APIClient + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1base__analyzer.xml b/docs345/xml/namespacepenify__hook_1_1base__analyzer.xml new file mode 100644 index 0000000..82a8bc2 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1base__analyzer.xml @@ -0,0 +1,12 @@ + + + + penify_hook::base_analyzer + penify_hook::base_analyzer::BaseAnalyzer + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands.xml b/docs345/xml/namespacepenify__hook_1_1commands.xml new file mode 100644 index 0000000..4abe35e --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands.xml @@ -0,0 +1,16 @@ + + + + penify_hook::commands + penify_hook::commands::auth_commands + penify_hook::commands::commit_commands + penify_hook::commands::config_commands + penify_hook::commands::doc_commands + penify_hook::commands::hook_commands + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands_1_1auth__commands.xml b/docs345/xml/namespacepenify__hook_1_1commands_1_1auth__commands.xml new file mode 100644 index 0000000..32d304a --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands_1_1auth__commands.xml @@ -0,0 +1,82 @@ + + + + penify_hook::commands::auth_commands + + + def + def penify_hook.commands.auth_commands.save_credentials + (api_key) + save_credentials + penify_hook.commands.auth_commands.save_credentials + + api_key + api_key + + + + +Save the token and API keys based on priority: +1. .env file in Git repo root (if in a git repo) +2. .penify file in home directory (global fallback) + +Args: + api_key: The API key to save + +Returns: + bool: True if saved successfully, False otherwise + + + + + + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.auth_commands.login + + + def + def penify_hook.commands.auth_commands.login + (api_url, dashboard_url) + login + penify_hook.commands.auth_commands.login + + api_url + api_url + + + dashboard_url + dashboard_url + + + + +Open the login page in a web browser and listen for the redirect URL to +capture the token. + +This function generates a random redirect port, constructs the full +login URL with the provided dashboard URL, opens the login page in the +default web browser, and sets up a simple HTTP server to listen for the +redirect. Upon receiving the redirect, it extracts the token from the +query parameters, fetches API keys using the token, saves them if +successful, and handles login failures by notifying the user. + +Args: + api_url (str): The URL of the API service to fetch API keys. + dashboard_url (str): The URL of the dashboard where the user will be redirected after logging + in. + + + + + + penify_hook.commands.auth_commands.save_credentials + penify_hook.login_command.handle_login + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands_1_1commit__commands.xml b/docs345/xml/namespacepenify__hook_1_1commands_1_1commit__commands.xml new file mode 100644 index 0000000..1179792 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands_1_1commit__commands.xml @@ -0,0 +1,176 @@ + + + + penify_hook::commands::commit_commands + + + def + def penify_hook.commands.commit_commands.commit_code + (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None) + commit_code + penify_hook.commands.commit_commands.commit_code + + api_url + api_url + + + token + token + + + message + message + + + open_terminal + open_terminal + + + generate_description + generate_description + + + llm_model + llm_model + None + + + llm_api_base + llm_api_base + None + + + llm_api_key + llm_api_key + None + + + jira_url + jira_url + None + + + jira_user + jira_user + None + + + jira_api_token + jira_api_token + None + + + + +Enhance Git commits with AI-powered commit messages. + +This function allows for the generation of enhanced commit messages +using natural language processing models and optionally integrates with +JIRA for additional context. It processes the current Git folder to find +relevant files and generates a detailed commit message based on the +provided parameters. + +Args: + api_url (str): URL of the API endpoint. + token (str): Authentication token for the API. + message (str): Initial commit message provided by the user. + open_terminal (bool): Whether to open the terminal after committing. + generate_description (bool): Whether to generate a detailed description in the commit message. + llm_model (str?): The language model to use for generating the commit message. Defaults to + None. + llm_api_base (str?): Base URL of the LLM API. Defaults to None. + llm_api_key (str?): API key for accessing the LLM service. Defaults to None. + jira_url (str?): URL of the JIRA instance. Defaults to None. + jira_user (str?): Username for authenticating with JIRA. Defaults to None. + jira_api_token (str?): API token for accessing JIRA. Defaults to None. + + + + + + penify_hook.ui_utils.print_error + penify_hook.ui_utils.print_info + penify_hook.ui_utils.print_warning + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.commit_commands.handle_commit + tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure + tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client + + + def + def penify_hook.commands.commit_commands.setup_commit_parser + (parser) + setup_commit_parser + penify_hook.commands.commit_commands.setup_commit_parser + + parser + parser + + + + +Generates a parser for setting up a command to generate smart commit +messages. + +This function sets up an argument parser that can be used to generate +commit messages with contextual information. It allows users to specify +options such as including a message, opening an edit terminal before +committing, and generating a detailed commit message. + +Args: + parser (argparse.ArgumentParser): The ArgumentParser object to be configured. + + + + + + penify_hook.main.main + tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser + + + def + def penify_hook.commands.commit_commands.handle_commit + (args) + handle_commit + penify_hook.commands.commit_commands.handle_commit + + args + args + + + + +Handle the commit functionality by processing arguments and invoking the +appropriate commands. + +This function processes the provided command-line arguments to configure +settings for commit operations, including LLM (Language Model) and Jira +configurations. It then calls the `commit_code` function with these +configurations to perform the actual commit operation. + +Args: + args (argparse.Namespace): The parsed command-line arguments containing options like terminal, + description, message, etc. + + + + + + penify_hook.commands.commit_commands.commit_code + penify_hook.commands.config_commands.get_jira_config + penify_hook.commands.config_commands.get_llm_config + penify_hook.commands.config_commands.get_token + penify_hook.ui_utils.print_info + penify_hook.main.main + tests.test_commit_commands.TestCommitCommands.test_handle_commit + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands_1_1config__commands.xml b/docs345/xml/namespacepenify__hook_1_1commands_1_1config__commands.xml new file mode 100644 index 0000000..87c5934 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands_1_1config__commands.xml @@ -0,0 +1,349 @@ + + + + penify_hook::commands::config_commands + + + bool + bool penify_hook::commands::config_commands::DOTENV_AVAILABLE + + DOTENV_AVAILABLE + penify_hook.commands.config_commands.DOTENV_AVAILABLE + = True + + + + + + + + + + + penify_hook::commands::config_commands.path + + path + penify_hook.commands.config_commands.path + + + + + + + + + + + + None + None penify_hook.commands.config_commands.load_env_files + () + load_env_files + penify_hook.commands.config_commands.load_env_files + + + +Load environment variables from .env files in various locations, +with proper priority (later files override earlier ones): +1. User home directory .env (lowest priority) +2. Git repo root directory .env (if in a git repo) +3. Current directory .env (highest priority) + +This function is called when the module is imported, ensuring env variables +are available throughout the application lifecycle. + + + + + + penify_hook.commands.config_commands.load_env_files + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.config_commands.get_jira_config + penify_hook.commands.config_commands.get_llm_config + penify_hook.commands.config_commands.get_token + penify_hook.commands.config_commands.load_env_files + + + Path + Path penify_hook.commands.config_commands.get_penify_config + () + get_penify_config + penify_hook.commands.config_commands.get_penify_config + + + +Get the home directory for the .penify configuration file. + +This function searches for the `.penify` file in the current directory +and its parent directories until it finds it or reaches the home +directory. If not found, it creates the `.penify` directory and an empty +`config.json` file. + +Returns: + Path: The path to the `config.json` file within the `.penify` directory. + + + + + + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.config_commands.get_token + tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir + tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir + + + Any + Any penify_hook.commands.config_commands.get_env_var_or_default + (str env_var, Any default=None) + get_env_var_or_default + penify_hook.commands.config_commands.get_env_var_or_default + + str + env_var + + + Any + default + None + + + + +Get environment variable or return default value. + +Args: + env_var: The environment variable name + default: Default value if environment variable is not set + +Returns: + Value of the environment variable or default + + + + + + penify_hook.commands.config_commands.get_jira_config + penify_hook.commands.config_commands.get_llm_config + penify_hook.commands.config_commands.get_token + + + def + def penify_hook.commands.config_commands.save_llm_config + (model, api_base, api_key) + save_llm_config + penify_hook.commands.config_commands.save_llm_config + + model + model + + + api_base + api_base + + + api_key + api_key + + + + +Save LLM configuration settings to .env file. + +This function saves LLM configuration in the following priority: +1. Git repo root .env (if inside a git repo) +2. User home directory .env + + + + + + penify_hook.utils.recursive_search_git_folder + penify_hook.config_command.handle_config + tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure + tests.test_config_commands.TestConfigCommands.test_save_llm_config_success + + + def + def penify_hook.commands.config_commands.save_jira_config + (url, username, api_token) + save_jira_config + penify_hook.commands.config_commands.save_jira_config + + url + url + + + username + username + + + api_token + api_token + + + + +Save JIRA configuration settings to .env file. + +This function saves JIRA configuration in the following priority: +1. Git repo root .env (if inside a git repo) +2. User home directory .env + + + + + + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.config_commands.config_jira_web + penify_hook.config_command.handle_config + tests.test_config_commands.TestConfigCommands.test_save_jira_config_success + + + Dict[str, str] + Dict[str, str] penify_hook.commands.config_commands.get_llm_config + () + get_llm_config + penify_hook.commands.config_commands.get_llm_config + + + +Get LLM configuration from environment variables. + +Environment variables: +- PENIFY_LLM_MODEL: Model name +- PENIFY_LLM_API_BASE: API base URL +- PENIFY_LLM_API_KEY: API key + +Returns: + dict: Configuration dictionary with model, api_base, and api_key + + + + + + penify_hook.commands.config_commands.get_env_var_or_default + penify_hook.commands.config_commands.load_env_files + penify_hook.commands.commit_commands.handle_commit + tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty + tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists + tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json + + + Dict[str, str] + Dict[str, str] penify_hook.commands.config_commands.get_jira_config + () + get_jira_config + penify_hook.commands.config_commands.get_jira_config + + + +Get JIRA configuration from environment variables. + +Environment variables: +- PENIFY_JIRA_URL: JIRA URL +- PENIFY_JIRA_USER: JIRA username +- PENIFY_JIRA_TOKEN: JIRA API token + +Returns: + dict: Configuration dictionary with url, username, and api_token + + + + + + penify_hook.commands.config_commands.get_env_var_or_default + penify_hook.commands.config_commands.load_env_files + penify_hook.commands.config_commands.config_jira_web + penify_hook.commands.commit_commands.handle_commit + tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists + + + def + def penify_hook.commands.config_commands.config_llm_web + () + config_llm_web + penify_hook.commands.config_commands.config_llm_web + + + +Open a web browser interface for configuring LLM settings. + +This function starts a temporary HTTP server that serves an HTML +template for configuring Large Language Model (LLM) settings. It handles +GET and POST requests to retrieve the current configuration, save new +configurations, and suppress log messages. The server runs on a random +port between 30000 and 50000, and it is accessible via a URL like +http://localhost:<redirect_port>. The function opens this URL in the +default web browser for configuration. Once configured, the server shuts +down. + + + + + + penify_hook.config_command.handle_config + tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup + + + def + def penify_hook.commands.config_commands.config_jira_web + () + config_jira_web + penify_hook.commands.config_commands.config_jira_web + + + +Open a web browser interface for configuring JIRA settings. + +This function sets up a simple HTTP server using Python's built-in +`http.server` module to handle GET and POST requests. The server serves +an HTML page for configuration and handles saving the JIRA configuration +details through API tokens and URLs. Upon successful configuration, it +shuts down the server gracefully. + + + + + + penify_hook.commands.config_commands.get_jira_config + penify_hook.commands.config_commands.save_jira_config + penify_hook.config_command.handle_config + tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup + + + Optional[str] + Optional[str] penify_hook.commands.config_commands.get_token + () + get_token + penify_hook.commands.config_commands.get_token + + + +Get the API token based on priority: +1. Environment variable PENIFY_API_TOKEN from any .env file +2. Config file 'api_keys' value + +Returns: + str or None: API token if found, None otherwise + + + + + + penify_hook.commands.config_commands.get_env_var_or_default + penify_hook.commands.config_commands.get_penify_config + penify_hook.commands.config_commands.load_env_files + penify_hook.commands.commit_commands.handle_commit + penify_hook.commands.doc_commands.handle_docgen + tests.test_config_commands.TestConfigCommands.test_get_token_from_config + tests.test_config_commands.TestConfigCommands.test_get_token_from_env + tests.test_config_commands.TestConfigCommands.test_get_token_not_found + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands_1_1doc__commands.xml b/docs345/xml/namespacepenify__hook_1_1commands_1_1doc__commands.xml new file mode 100644 index 0000000..7fc41b1 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands_1_1doc__commands.xml @@ -0,0 +1,155 @@ + + + + penify_hook::commands::doc_commands + + + string + string penify_hook::commands::doc_commands.docgen_description + + docgen_description + penify_hook.commands.doc_commands.docgen_description + = """Generate code documentation using Penify. + +This command requires you to be logged in to your Penify account. +You can generate documentation for: +- Current Git diff (default) +- Specific file +- Specific folder +""" + + + + + + + + + + + + def + def penify_hook.commands.doc_commands.generate_doc + (api_url, token, location=None) + generate_doc + penify_hook.commands.doc_commands.generate_doc + + api_url + api_url + + + token + token + + + location + location + None + + + + +Generates documentation based on the given parameters. + +This function initializes an API client using the provided API URL and +token. It then generates documentation by analyzing the specified +location, which can be a folder, a file, or the current working +directory if no location is provided. The function handles different +types of analysis based on the input location and reports any errors +encountered during the process. + +Args: + api_url (str): The URL of the API to connect to for documentation generation. + token (str): The authentication token for accessing the API. + location (str?): The path to a specific file or folder to analyze. If not provided, the + current working directory is used. + + + + + + penify_hook.commands.doc_commands.handle_docgen + tests.test_doc_commands.test_generate_doc_error_handling + tests.test_doc_commands.test_generate_doc_file_location + tests.test_doc_commands.test_generate_doc_folder_location + tests.test_doc_commands.test_generate_doc_no_location + tests.test_doc_commands.test_generate_doc_with_file_exception + tests.test_doc_commands.test_generate_doc_with_folder_exception + + + def + def penify_hook.commands.doc_commands.setup_docgen_parser + (parser) + setup_docgen_parser + penify_hook.commands.doc_commands.setup_docgen_parser + + parser + parser + + + + +Set up and configure a parser for documentation generation using Git +commands. + +This function configures a parser with various subcommands and arguments +necessary for generating documentation for Git diffs, files, or folders. +It also installs and uninstalls commit hooks to automate documentation +generation on commits. + +Args: + parser (argparse.ArgumentParser): The parser to configure. + + + + + + penify_hook.main.main + tests.test_doc_commands.test_setup_docgen_parser + + + def + def penify_hook.commands.doc_commands.handle_docgen + (args) + handle_docgen + penify_hook.commands.doc_commands.handle_docgen + + args + args + + + + +Handle various subcommands related to document generation and hook +management. + +This function processes different subcommands such as installing or +uninstalling git hooks, and directly generating documentation based on +provided arguments. + +Args: + args (Namespace): Parsed command-line arguments containing the subcommand and location + details. + + + + + + penify_hook.commands.doc_commands.generate_doc + penify_hook.commands.config_commands.get_token + penify_hook.commands.hook_commands.install_git_hook + penify_hook.commands.hook_commands.uninstall_git_hook + penify_hook.main.main + tests.test_doc_commands.test_handle_docgen_generate + tests.test_doc_commands.test_handle_docgen_install_hook + tests.test_doc_commands.test_handle_docgen_no_token + tests.test_doc_commands.test_handle_docgen_uninstall_hook + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commands_1_1hook__commands.xml b/docs345/xml/namespacepenify__hook_1_1commands_1_1hook__commands.xml new file mode 100644 index 0000000..753b073 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commands_1_1hook__commands.xml @@ -0,0 +1,111 @@ + + + + penify_hook::commands::hook_commands + + + string + string penify_hook::commands::hook_commands.HOOK_FILENAME + + HOOK_FILENAME + penify_hook.commands.hook_commands.HOOK_FILENAME + = "post-commit" + + + + + + + + + + string + string penify_hook::commands::hook_commands.HOOK_TEMPLATE + + HOOK_TEMPLATE + penify_hook.commands.hook_commands.HOOK_TEMPLATE + = """#!/bin/sh +# This is a post-commit hook generated by penify. +# Automatically generates documentation for changed files after each commit. + +penify docgen -gf {git_folder_path} -t {token} +""" + + + + + + + + + + + + def + def penify_hook.commands.hook_commands.install_git_hook + (location, token) + install_git_hook + penify_hook.commands.hook_commands.install_git_hook + + location + location + + + token + token + + + + +Install a post-commit hook in the specified location that generates +documentation +for changed files after each commit. + +Args: + location (str): The path to the Git repository where the hook should be installed. + token (str): The authentication token required to access the documentation generation + service. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + def + def penify_hook.commands.hook_commands.uninstall_git_hook + (location) + uninstall_git_hook + penify_hook.commands.hook_commands.uninstall_git_hook + + location + location + + + + +Uninstalls the post-commit hook from the specified location. + +This function attempts to remove a post-commit git hook located at the +given path. It constructs the path to the hook and checks if it exists. +If the hook is found, it is deleted, and a confirmation message is +printed. If no hook is found, a message indicating this is also printed. + +Args: + location (Path): The base directory where the .git/hooks directory is located. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1commit__analyzer.xml b/docs345/xml/namespacepenify__hook_1_1commit__analyzer.xml new file mode 100644 index 0000000..34e3580 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1commit__analyzer.xml @@ -0,0 +1,12 @@ + + + + penify_hook::commit_analyzer + penify_hook::commit_analyzer::CommitDocGenHook + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1config__command.xml b/docs345/xml/namespacepenify__hook_1_1config__command.xml new file mode 100644 index 0000000..b54b356 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1config__command.xml @@ -0,0 +1,78 @@ + + + + penify_hook::config_command + + + def + def penify_hook.config_command.setup_config_parser + (parent_parser) + setup_config_parser + penify_hook.config_command.setup_config_parser + + parent_parser + parent_parser + + + + +Set up a configuration parser with subparsers for different types of +configurations. + +This function configures and adds subcommands to the parent parser. Each +subcommand corresponds to a specific type of configuration, such as LLM +(Language Model) or JIRA. It allows users to configure settings for +these systems through command-line arguments. + +Args: + parent_parser (argparse.ArgumentParser): The parent parser to which the config subparsers will be added. + + + + + + penify_hook.main.main + + + def + def penify_hook.config_command.handle_config + (args) + handle_config + penify_hook.config_command.handle_config + + args + args + + + + +Handle configuration settings based on the specified config type. + +This function processes different types of configurations such as LLM +(Language Model) and JIRA. It saves configurations, sets up web-based +configurations, and verifies JIRA connections. + +Args: + args (argparse.Namespace): Command-line arguments containing the type of configuration to handle. + +Returns: + int: Exit code indicating success or failure. + + + + + + penify_hook.commands.config_commands.config_jira_web + penify_hook.commands.config_commands.config_llm_web + penify_hook.commands.config_commands.save_jira_config + penify_hook.commands.config_commands.save_llm_config + penify_hook.main.main + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1constants.xml b/docs345/xml/namespacepenify__hook_1_1constants.xml new file mode 100644 index 0000000..1aafdc4 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1constants.xml @@ -0,0 +1,43 @@ + + + + penify_hook::constants + + + string + string penify_hook::constants.API_URL + + API_URL + penify_hook.constants.API_URL + = 'http://localhost:8000/api' + + + + + + + + + + string + string penify_hook::constants.DASHBOARD_URL + + DASHBOARD_URL + penify_hook.constants.DASHBOARD_URL + = "https://dashboard.penify.dev/auth/localhost/login" + + + + + + + + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1file__analyzer.xml b/docs345/xml/namespacepenify__hook_1_1file__analyzer.xml new file mode 100644 index 0000000..1588f44 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1file__analyzer.xml @@ -0,0 +1,29 @@ + + + + penify_hook::file_analyzer + penify_hook::file_analyzer::FileAnalyzerGenHook + + + + penify_hook::file_analyzer.logger + + logger + penify_hook.file_analyzer.logger + = logging.getLogger(__name__) + + + + + + + + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1folder__analyzer.xml b/docs345/xml/namespacepenify__hook_1_1folder__analyzer.xml new file mode 100644 index 0000000..f75cafb --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1folder__analyzer.xml @@ -0,0 +1,12 @@ + + + + penify_hook::folder_analyzer + penify_hook::folder_analyzer::FolderAnalyzerGenHook + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1git__analyzer.xml b/docs345/xml/namespacepenify__hook_1_1git__analyzer.xml new file mode 100644 index 0000000..9b156cc --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1git__analyzer.xml @@ -0,0 +1,29 @@ + + + + penify_hook::git_analyzer + penify_hook::git_analyzer::GitDocGenHook + + + + penify_hook::git_analyzer.logger + + logger + penify_hook.git_analyzer.logger + = logging.getLogger(__name__) + + + + + + + + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1jira__client.xml b/docs345/xml/namespacepenify__hook_1_1jira__client.xml new file mode 100644 index 0000000..dbbe0fc --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1jira__client.xml @@ -0,0 +1,29 @@ + + + + penify_hook::jira_client + penify_hook::jira_client::JiraClient + + + bool + bool penify_hook::jira_client::JIRA_AVAILABLE + + JIRA_AVAILABLE + penify_hook.jira_client.JIRA_AVAILABLE + = True + + + + + + + + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1llm__client.xml b/docs345/xml/namespacepenify__hook_1_1llm__client.xml new file mode 100644 index 0000000..5748cf6 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1llm__client.xml @@ -0,0 +1,12 @@ + + + + penify_hook::llm_client + penify_hook::llm_client::LLMClient + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1login__command.xml b/docs345/xml/namespacepenify__hook_1_1login__command.xml new file mode 100644 index 0000000..30045f3 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1login__command.xml @@ -0,0 +1,65 @@ + + + + penify_hook::login_command + + + def + def penify_hook.login_command.setup_login_parser + (parser) + setup_login_parser + penify_hook.login_command.setup_login_parser + + parser + parser + + + + + + + + + penify_hook.main.main + + + def + def penify_hook.login_command.handle_login + (args) + handle_login + penify_hook.login_command.handle_login + + args + args + + + + +Handle the login command. + +Initiates a user login process by calling the `login` function from the +`penify_hook.commands.auth_commands` module using predefined constants +`API_URL` and `DASHBOARD_URL` from the `penify_hook.constants` module. + +Args: + args (argparse.Namespace): Parsed arguments containing necessary parameters for the login command. + +Returns: + None: This function does not return any value; it is expected to handle the + login process internally. + + + + + + penify_hook.commands.auth_commands.login + penify_hook.main.main + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1main.xml b/docs345/xml/namespacepenify__hook_1_1main.xml new file mode 100644 index 0000000..786eb40 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1main.xml @@ -0,0 +1,50 @@ + + + + penify_hook::main + + + def + def penify_hook.main.main + () + main + penify_hook.main.main + + + +Main function to handle command-line interface (CLI) interactions with +Penify services. + +This tool provides a command-line interface for generating smart commit +messages, configuring local-LLM and JIRA, and generating code +documentation. It supports basic commands that do not require login and +advanced commands that require user authentication. The `--version` flag +can be used to display the version information. + +Returns: + int: Exit status of the program (0 for success, 1 for error). + + + + + + penify_hook.commands.commit_commands.handle_commit + penify_hook.config_command.handle_config + penify_hook.commands.doc_commands.handle_docgen + penify_hook.login_command.handle_login + penify_hook.main.main + penify_hook.ui_utils.print_info + penify_hook.commands.commit_commands.setup_commit_parser + penify_hook.config_command.setup_config_parser + penify_hook.commands.doc_commands.setup_docgen_parser + penify_hook.login_command.setup_login_parser + penify_hook.main.main + + + + + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1ui__utils.xml b/docs345/xml/namespacepenify__hook_1_1ui__utils.xml new file mode 100644 index 0000000..194d4f6 --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1ui__utils.xml @@ -0,0 +1,667 @@ + + + + penify_hook::ui_utils + + + + penify_hook::ui_utils.autoreset + + autoreset + penify_hook.ui_utils.autoreset + + + + + + + + + + + penify_hook::ui_utils.INFO_COLOR + + INFO_COLOR + penify_hook.ui_utils.INFO_COLOR + = Fore.CYAN + + + + + + + + + + + penify_hook::ui_utils.SUCCESS_COLOR + + SUCCESS_COLOR + penify_hook.ui_utils.SUCCESS_COLOR + = Fore.GREEN + + + + + + + + + + + penify_hook::ui_utils.WARNING_COLOR + + WARNING_COLOR + penify_hook.ui_utils.WARNING_COLOR + = Fore.YELLOW + + + + + + + + + + + penify_hook::ui_utils.ERROR_COLOR + + ERROR_COLOR + penify_hook.ui_utils.ERROR_COLOR + = Fore.RED + + + + + + + + + + + penify_hook::ui_utils.HIGHLIGHT_COLOR + + HIGHLIGHT_COLOR + penify_hook.ui_utils.HIGHLIGHT_COLOR + = Fore.BLUE + + + + + + + + + + + penify_hook::ui_utils.NEUTRAL_COLOR + + NEUTRAL_COLOR + penify_hook.ui_utils.NEUTRAL_COLOR + = Fore.WHITE + + + + + + + + + + string + string penify_hook::ui_utils.SUCCESS_SYMBOL + + SUCCESS_SYMBOL + penify_hook.ui_utils.SUCCESS_SYMBOL + = "✓" + + + + + + + + + + string + string penify_hook::ui_utils.WARNING_SYMBOL + + WARNING_SYMBOL + penify_hook.ui_utils.WARNING_SYMBOL + = "○" + + + + + + + + + + string + string penify_hook::ui_utils.ERROR_SYMBOL + + ERROR_SYMBOL + penify_hook.ui_utils.ERROR_SYMBOL + = "✗" + + + + + + + + + + string + string penify_hook::ui_utils.PROCESSING_SYMBOL + + PROCESSING_SYMBOL + penify_hook.ui_utils.PROCESSING_SYMBOL + = "⟳" + + + + + + + + + + + + def + def penify_hook.ui_utils.format_info + (message) + format_info + penify_hook.ui_utils.format_info + + message + message + + + + +Format an informational message with appropriate color. + +Args: + message (str): The text of the informational message to be formatted. + +Returns: + str: The formatted informational message with the specified color. + + + + + + penify_hook.ui_utils.create_progress_bar + penify_hook.ui_utils.create_stage_progress_bar + penify_hook.ui_utils.print_info + + + def + def penify_hook.ui_utils.format_success + (message) + format_success + penify_hook.ui_utils.format_success + + message + message + + + + +Format a success message with appropriate color. + +This function takes a message as input and wraps it in ANSI escape codes +to display it in green, indicating a successful operation. The +Style.RESET_ALL is applied at the end to ensure that any subsequent text +is displayed in the default style. + +Args: + message (str): The message to be formatted as a success message. + +Returns: + str: The formatted success message with green color and reset style. + + + + + + penify_hook.ui_utils.print_success + + + def + def penify_hook.ui_utils.format_warning + (message) + format_warning + penify_hook.ui_utils.format_warning + + message + message + + + + +Format a warning message with appropriate color. + +Args: + message (str): The warning message to be formatted. + +Returns: + str: The formatted warning message with the specified color. + + + + + + penify_hook.ui_utils.print_warning + + + def + def penify_hook.ui_utils.format_error + (message) + format_error + penify_hook.ui_utils.format_error + + message + message + + + + +Format an error message with appropriate color. + +This function takes a plain error message and wraps it in ANSI escape +codes to apply the specified error color, ensuring that the error +message is visually distinct when output. The function supports various +error colors defined by constants like `ERROR_COLOR`. + +Args: + message (str): The plain text error message to be formatted. + +Returns: + str: The formatted error message with the error color applied. + + + + + + penify_hook.ui_utils.print_error + + + def + def penify_hook.ui_utils.format_highlight + (message) + format_highlight + penify_hook.ui_utils.format_highlight + + message + message + + + + +Format a highlighted message with appropriate color. + +Args: + message (str): The message to be formatted and highlighted. + +Returns: + str: The formatted message with applied highlight style. + + + + + + + + def + def penify_hook.ui_utils.format_file_path + (file_path) + format_file_path + penify_hook.ui_utils.format_file_path + + file_path + file_path + + + + +Format a file path with appropriate color. + +This function takes a file path as input and wraps it in ANSI escape +codes to apply a warning color. The original file path is then reset to +default style using Style.RESET_ALL. + +Args: + file_path (str): The file path to be formatted. + +Returns: + str: The formatted file path with the warning color applied. + + + + + + penify_hook.ui_utils.print_processing + penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing + + + def + def penify_hook.ui_utils.print_info + (message) + print_info + penify_hook.ui_utils.print_info + + message + message + + + + +Print an informational message with appropriate formatting. + +This function takes a string message as input and prints it in a +formatted manner. It utilizes the `format_info` function to apply any +necessary formatting before printing. + +Args: + message (str): The message to be printed. + + + + + + penify_hook.ui_utils.format_info + penify_hook.commands.commit_commands.commit_code + penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch + penify_hook.commit_analyzer.CommitDocGenHook.get_summary + penify_hook.commands.commit_commands.handle_commit + penify_hook.main.main + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + penify_hook.git_analyzer.GitDocGenHook.run + penify_hook.commit_analyzer.CommitDocGenHook.run + + + def + def penify_hook.ui_utils.print_success + (message) + print_success + penify_hook.ui_utils.print_success + + message + message + + + + +Print a formatted success message. + +This function takes a string `message` and prints it as a formatted +success message. The formatting includes adding a prefix "Success: " to +the message and enclosing it within asterisks for emphasis. + +Args: + message (str): The message to be printed as a success message. + + + + + + penify_hook.ui_utils.format_success + penify_hook.file_analyzer.FileAnalyzerGenHook.run + penify_hook.git_analyzer.GitDocGenHook.run + penify_hook.commit_analyzer.CommitDocGenHook.run + + + def + def penify_hook.ui_utils.print_warning + (message) + print_warning + penify_hook.ui_utils.print_warning + + message + message + + + + +Print a warning message with appropriate formatting. + +This function takes a warning message as input and prints it with +formatted output. The formatting may include color, timestamp, or other +styles to emphasize that it is a warning. + +Args: + message (str): The warning message to be printed. + + + + + + penify_hook.ui_utils.format_warning + penify_hook.commands.commit_commands.commit_code + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + + def + def penify_hook.ui_utils.print_error + (message) + print_error + penify_hook.ui_utils.print_error + + message + message + + + + +Print an error message with appropriate formatting. + +This function takes a string message, formats it as an error message, +and then prints it. The formatting typically includes prefixing the +message with "Error: " to clearly indicate that it is an error. + +Args: + message (str): The error message to be printed. + + + + + + penify_hook.ui_utils.format_error + penify_hook.commands.commit_commands.commit_code + + + def + def penify_hook.ui_utils.print_processing + (file_path) + print_processing + penify_hook.ui_utils.print_processing + + file_path + file_path + + + + +Print a processing message for a specified file. + +This function takes a file path, formats it using `format_file_path`, +and then prints a formatted message indicating that the file is being +processed. The formatted path is highlighted using `format_highlight`. + +Args: + file_path (str): The path of the file to be processed. + + + + + + penify_hook.ui_utils.format_file_path + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.ui_utils.print_status + (status, message) + print_status + penify_hook.ui_utils.print_status + + status + status + + + message + message + + + + +Print a status message with an appropriate symbol. + +This function takes a status and a message, then prints them with a +colored symbol that corresponds to the given status. The available +statuses are 'success', 'warning', 'error', and any other value will +default to a processing indicator. + +Args: + status (str): The status type ('success', 'warning', 'error') or another string. + message (str): The message to be displayed along with the symbol. + + + + + + penify_hook.file_analyzer.FileAnalyzerGenHook.run + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.ui_utils.create_progress_bar + (total, desc="Processing", unit="item") + create_progress_bar + penify_hook.ui_utils.create_progress_bar + + total + total + + + desc + desc + "Processing" + + + unit + unit + "item" + + + + +Create a tqdm progress bar with consistent styling. + +Args: + total (int): Total number of items to process. + desc (str): Description for the progress bar. Defaults to "Processing". + unit (str): Unit label for the progress items. Defaults to "item". + +Returns: + tqdm: A configured tqdm progress bar instance. + + + + + + penify_hook.ui_utils.format_info + penify_hook.git_analyzer.GitDocGenHook.run + + + def + def penify_hook.ui_utils.create_stage_progress_bar + (stages, desc="Processing") + create_stage_progress_bar + penify_hook.ui_utils.create_stage_progress_bar + + stages + stages + + + desc + desc + "Processing" + + + + +Create a tqdm progress bar for processing stages with consistent +styling. + +This function initializes and returns a tqdm progress bar object for +tracking the progress through a series of stages. It also provides a +description for the progress bar to enhance its usability. + +Args: + stages (list): A list of strings representing individual stages in the process. + desc (str?): A description for the progress bar. Defaults to "Processing". + +Returns: + tuple: A tuple containing the tqdm progress bar object and the list of stages. + + + + + + penify_hook.ui_utils.format_info + penify_hook.file_analyzer.FileAnalyzerGenHook.run + + + def + def penify_hook.ui_utils.update_stage + (pbar, stage_name) + update_stage + penify_hook.ui_utils.update_stage + + pbar + pbar + + + stage_name + stage_name + + + + +Update the progress bar with a new stage name. + +This function updates the provided tqdm progress bar to reflect the +current stage of a process. It clears any existing postfix and sets a +new description based on the provided stage name. The display is then +refreshed to ensure that the update is visible immediately. + +Args: + pbar (tqdm): The progress bar object to be updated. + stage_name (str): A string representing the current stage of the process. + + + + + + penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + penify_hook.file_analyzer.FileAnalyzerGenHook.run + + + + + +UI utilities for Penify CLI. + +This module provides utility functions for consistent UI formatting, +colored output, and progress indicators across the Penify CLI application. + + + + + diff --git a/docs345/xml/namespacepenify__hook_1_1utils.xml b/docs345/xml/namespacepenify__hook_1_1utils.xml new file mode 100644 index 0000000..fea6e7d --- /dev/null +++ b/docs345/xml/namespacepenify__hook_1_1utils.xml @@ -0,0 +1,96 @@ + + + + penify_hook::utils + penify_hook::utils::GitRepoNotFoundError + + + + penify_hook::utils.logger + + logger + penify_hook.utils.logger + = logging.getLogger(__name__) + + + + + + + + + + + + def + def penify_hook.utils.get_repo_details + (Repo repo) + get_repo_details + penify_hook.utils.get_repo_details + + Repo + repo + + + + +Determine the details of a repository including its remote URL, hosting service, organization name, and repository name. + + + + + + + def + def penify_hook.utils.recursive_search_git_folder + (folder_path) + recursive_search_git_folder + penify_hook.utils.recursive_search_git_folder + + folder_path + folder_path + + + + +Recursively searches for a .git folder starting from the given directory. + + + + + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.commit_commands.commit_code + penify_hook.commands.config_commands.get_penify_config + penify_hook.commands.config_commands.load_env_files + penify_hook.utils.recursive_search_git_folder + penify_hook.commands.auth_commands.save_credentials + penify_hook.commands.config_commands.save_jira_config + penify_hook.commands.config_commands.save_llm_config + + + def + def penify_hook.utils.find_git_parent + (path) + find_git_parent + penify_hook.utils.find_git_parent + + path + path + + + + +Traverse up from the given path to find the nearest directory containing a .git subdirectory. + + + + + + + + + + + + + diff --git a/docs345/xml/namespacesetup.xml b/docs345/xml/namespacesetup.xml new file mode 100644 index 0000000..9527ed9 --- /dev/null +++ b/docs345/xml/namespacesetup.xml @@ -0,0 +1,195 @@ + + + + setup + + + + setup.name + + name + setup.name + + + + + + + + + + + setup.version + + version + setup.version + + + + + + + + + + + setup.packages + + packages + setup.packages + + + + + + + + + + + setup.install_requires + + install_requires + setup.install_requires + + + + + + + + + + + setup.entry_points + + entry_points + setup.entry_points + + + + + + + + + + + setup.author + + author + setup.author + + + + + + + + + + + setup.author_email + + author_email + setup.author_email + + + + + + + + + + + setup.description + + description + setup.description + + + + + + + + + + + setup.long_description + + long_description + setup.long_description + + + + + + + + + + + setup.long_description_content_type + + long_description_content_type + setup.long_description_content_type + + + + + + + + + + + setup.url + + url + setup.url + + + + + + + + + + + setup.classifiers + + classifiers + setup.classifiers + + + + + + + + + + + setup.python_requires + + python_requires + setup.python_requires + + + + + + + + + + + + + + + + diff --git a/docs345/xml/namespacestd.xml b/docs345/xml/namespacestd.xml new file mode 100644 index 0000000..0f0343b --- /dev/null +++ b/docs345/xml/namespacestd.xml @@ -0,0 +1,110 @@ + + + + std + std::allocator + std::array + std::atomic + std::atomic_ref + std::auto_ptr + std::bad_alloc + std::bad_cast + std::bad_exception + std::bad_typeid + std::basic_fstream + std::basic_ifstream + std::basic_ios + std::basic_iostream + std::basic_istream + std::basic_istringstream + std::basic_ofstream + std::basic_ostream + std::basic_ostringstream + std::basic_string + std::basic_string_view + std::basic_stringstream + std::bitset + std::complex + std::deque + std::domain_error + std::error_category + std::error_code + std::error_condition + std::exception + std::forward_list + std::fstream + std::ifstream + std::invalid_argument + std::ios + std::ios_base + std::istream + std::istringstream + std::jthread + std::length_error + std::list + std::lock_guard + std::logic_error + std::map + std::multimap + std::multiset + std::mutex + std::ofstream + std::ostream + std::ostringstream + std::out_of_range + std::overflow_error + std::priority_queue + std::queue + std::range_error + std::recursive_mutex + std::recursive_timed_mutex + std::runtime_error + std::set + std::shared_lock + std::shared_mutex + std::shared_ptr + std::shared_timed_mutex + std::smart_ptr + std::span + std::stack + std::string + std::string_view + std::stringstream + std::system_error + std::thread + std::timed_mutex + std::u16string + std::u16string_view + std::u32string + std::u32string_view + std::u8string + std::u8string_view + std::underflow_error + std::unique_lock + std::unique_ptr + std::unordered_map + std::unordered_multimap + std::unordered_multiset + std::unordered_set + std::valarray + std::vector + std::weak_ptr + std::wfstream + std::wifstream + std::wios + std::wistream + std::wistringstream + std::wofstream + std::wostream + std::wostringstream + std::wstring + std::wstring_view + std::wstringstream + +STL namespace. + + + + + + diff --git a/docs345/xml/namespacetests.xml b/docs345/xml/namespacetests.xml new file mode 100644 index 0000000..3b5005f --- /dev/null +++ b/docs345/xml/namespacetests.xml @@ -0,0 +1,16 @@ + + + + tests + tests::conftest + tests::test_commit_commands + tests::test_config_commands + tests::test_doc_commands + tests::test_web_config + + + + + + + diff --git a/docs345/xml/namespacetests_1_1conftest.xml b/docs345/xml/namespacetests_1_1conftest.xml new file mode 100644 index 0000000..9d124cb --- /dev/null +++ b/docs345/xml/namespacetests_1_1conftest.xml @@ -0,0 +1,11 @@ + + + + tests::conftest + + + + + + + diff --git a/docs345/xml/namespacetests_1_1test__commit__commands.xml b/docs345/xml/namespacetests_1_1test__commit__commands.xml new file mode 100644 index 0000000..b7c5e1f --- /dev/null +++ b/docs345/xml/namespacetests_1_1test__commit__commands.xml @@ -0,0 +1,12 @@ + + + + tests::test_commit_commands + tests::test_commit_commands::TestCommitCommands + + + + + + + diff --git a/docs345/xml/namespacetests_1_1test__config__commands.xml b/docs345/xml/namespacetests_1_1test__config__commands.xml new file mode 100644 index 0000000..9443c08 --- /dev/null +++ b/docs345/xml/namespacetests_1_1test__config__commands.xml @@ -0,0 +1,12 @@ + + + + tests::test_config_commands + tests::test_config_commands::TestConfigCommands + + + + + + + diff --git a/docs345/xml/namespacetests_1_1test__doc__commands.xml b/docs345/xml/namespacetests_1_1test__doc__commands.xml new file mode 100644 index 0000000..50d67cf --- /dev/null +++ b/docs345/xml/namespacetests_1_1test__doc__commands.xml @@ -0,0 +1,461 @@ + + + + tests::test_doc_commands + + + def + def tests.test_doc_commands.test_generate_doc_no_location + (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + test_generate_doc_no_location + tests.test_doc_commands.test_generate_doc_no_location + + mock_getcwd + mock_getcwd + + + mock_api_client + mock_api_client + + + mock_folder_analyzer + mock_folder_analyzer + + + mock_file_analyzer + mock_file_analyzer + + + mock_git_analyzer + mock_git_analyzer + + + + +Test function to generate documentation without location information. + +This function sets up mocks for the API client, current working +directory, and Git analyzer. It then calls the `generate_doc` function +with a fake API URL and token. The function is expected to initialize +the API client, configure the Git analyzer, and run it without any +location information. + +Args: + mock_getcwd (MagicMock): Mock for os.getcwd(). + mock_api_client (MagicMock): Mock for creating an API client. + mock_folder_analyzer (MagicMock): Mock for folder analysis. + mock_file_analyzer (MagicMock): Mock for file analysis. + mock_git_analyzer (MagicMock): Mock for Git analyzer setup. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + def + def tests.test_doc_commands.test_generate_doc_file_location + (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + test_generate_doc_file_location + tests.test_doc_commands.test_generate_doc_file_location + + mock_api_client + mock_api_client + + + mock_folder_analyzer + mock_folder_analyzer + + + mock_file_analyzer + mock_file_analyzer + + + mock_git_analyzer + mock_git_analyzer + + + + +Test generating a documentation file location. + +This function tests the process of generating a documentation file +location using mock objects for API client, folder analyzer, file +analyzer, and Git analyzer. It sets up the necessary mocks, calls the +`generate_doc` function with specified parameters, and asserts that the +appropriate methods on the mock objects are called as expected. + +Args: + mock_api_client (MagicMock): Mock object for the API client. + mock_folder_analyzer (MagicMock): Mock object for the folder analyzer. + mock_file_analyzer (MagicMock): Mock object for the file analyzer. + mock_git_analyzer (MagicMock): Mock object for the Git analyzer. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + def + def tests.test_doc_commands.test_generate_doc_folder_location + (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer) + test_generate_doc_folder_location + tests.test_doc_commands.test_generate_doc_folder_location + + mock_api_client + mock_api_client + + + mock_folder_analyzer + mock_folder_analyzer + + + mock_file_analyzer + mock_file_analyzer + + + mock_git_analyzer + mock_git_analyzer + + + + +Test the function to generate documentation for a folder location. + +It sets up mock objects for API client, folder analyzer, file analyzer, +and Git analyzer, then calls the `generate_doc` function with specified +parameters. Finally, it asserts that the correct methods on the mock +objects were called as expected. + +Args: + mock_api_client (MagicMock): Mock object for the API client. + mock_folder_analyzer (MagicMock): Mock object for the folder analyzer. + mock_file_analyzer (MagicMock): Mock object for the file analyzer. + mock_git_analyzer (MagicMock): Mock object for the Git analyzer. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + def + def tests.test_doc_commands.test_generate_doc_error_handling + (mock_api_client, mock_git_analyzer, mock_exit) + test_generate_doc_error_handling + tests.test_doc_commands.test_generate_doc_error_handling + + mock_api_client + mock_api_client + + + mock_git_analyzer + mock_git_analyzer + + + mock_exit + mock_exit + + + + +Generate a documentation string for the provided code snippet using +Google Docstring style. + +Short one line description: Test function to ensure proper error +handling during API calls with GitAnalyzer. Multiline long description: +This test function is designed to verify that the generate_doc function +handles exceptions correctly when an error occurs during API interaction +with GitAnalyzer. It sets up a mock API client and a mock Git analyzer, +causing the analyzer to raise an exception to simulate a failure +condition. The function then asserts that the exit code is set to 1 when +the error handling mechanism is invoked. + +Args: + mock_api_client (MagicMock): A mock object simulating the API client. + mock_git_analyzer (MagicMock): A mock object simulating the Git analyzer, configured to raise an + exception. + mock_exit (MagicMock): A mock object representing the exit function, which should be called + with an error code. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + def + def tests.test_doc_commands.test_setup_docgen_parser + () + test_setup_docgen_parser + tests.test_doc_commands.test_setup_docgen_parser + + + +Test the setup_docgen_parser function to ensure it properly configures +the ArgumentParser for docgen options. + +It verifies that the parser correctly sets up docgen options and handles +different subcommands like 'install-hook' and 'uninstall-hook'. + + + + + + penify_hook.commands.doc_commands.setup_docgen_parser + + + def + def tests.test_doc_commands.test_handle_docgen_install_hook + (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + test_handle_docgen_install_hook + tests.test_doc_commands.test_handle_docgen_install_hook + + mock_exit + mock_exit + + + mock_get_token + mock_get_token + + + mock_generate_doc + mock_generate_doc + + + mock_uninstall_hook + mock_uninstall_hook + + + mock_install_hook + mock_install_hook + + + + +Test the handling of the 'install-hook' subcommand. + +This function sets up a mock environment where it simulates the +execution of the 'install-hook' subcommand. It verifies that the +`mock_install_hook` is called with the correct arguments, while +`mock_generate_doc` and `mock_uninstall_hook` are not called. + +Args: + mock_exit (MagicMock): Mock object for sys.exit. + mock_get_token (MagicMock): Mock object to simulate fetching a token. + mock_generate_doc (MagicMock): Mock object to simulate generating documentation. + mock_uninstall_hook (MagicMock): Mock object to simulate uninstalling a hook. + mock_install_hook (MagicMock): Mock object to simulate installing a hook. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + def + def tests.test_doc_commands.test_handle_docgen_uninstall_hook + (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + test_handle_docgen_uninstall_hook + tests.test_doc_commands.test_handle_docgen_uninstall_hook + + mock_exit + mock_exit + + + mock_get_token + mock_get_token + + + mock_generate_doc + mock_generate_doc + + + mock_uninstall_hook + mock_uninstall_hook + + + mock_install_hook + mock_install_hook + + + + +Test the uninstall-hook subcommand of the handle_docgen function. +This test case sets up a mock environment and verifies that the +uninstall-hook is called with the correct location, while generate_doc +and install_hook are not called. + +Args: + mock_exit (MagicMock): A mock for the exit function. + mock_get_token (MagicMock): A mock for the get_token function. + mock_generate_doc (MagicMock): A mock for the generate_doc function. + mock_uninstall_hook (MagicMock): A mock for the uninstall_hook function. + mock_install_hook (MagicMock): A mock for the install_hook function. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + def + def tests.test_doc_commands.test_handle_docgen_generate + (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook) + test_handle_docgen_generate + tests.test_doc_commands.test_handle_docgen_generate + + mock_get_token + mock_get_token + + + mock_generate_doc + mock_generate_doc + + + mock_uninstall_hook + mock_uninstall_hook + + + mock_install_hook + mock_install_hook + + + + +Test the direct documentation generation functionality. + +This function tests the `handle_docgen` function when no subcommand is +provided. It verifies that the document generation hook is called and +the uninstall and install hooks are not called. + +Args: + mock_get_token (MagicMock): Mocked function to get authentication token. + mock_generate_doc (MagicMock): Mocked function for generating documentation. + mock_uninstall_hook (MagicMock): Mocked function for uninstalling the document generation hook. + mock_install_hook (MagicMock): Mocked function for installing the document generation hook. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + def + def tests.test_doc_commands.test_handle_docgen_no_token + (mock_exit, mock_get_token) + test_handle_docgen_no_token + tests.test_doc_commands.test_handle_docgen_no_token + + mock_exit + mock_exit + + + mock_get_token + mock_get_token + + + + +Test the behavior of the `handle_docgen` function when no token is +provided. + +This function asserts that if no token is returned by `mock_get_token`, +the `handle_docgen` function will call `mock_exit` with a status code of +1. + +Args: + mock_exit (MagicMock): A MagicMock object simulating the `exit` function. + mock_get_token (MagicMock): A MagicMock object simulating the `get_token` function. + + + + + + penify_hook.commands.doc_commands.handle_docgen + + + def + def tests.test_doc_commands.test_generate_doc_with_file_exception + (mock_api_client, mock_getcwd) + test_generate_doc_with_file_exception + tests.test_doc_commands.test_generate_doc_with_file_exception + + mock_api_client + mock_api_client + + + mock_getcwd + mock_getcwd + + + + +Generate documentation from a Python source file. + +This function reads a Python file and generates a docstring based on its +content. It uses mock objects to simulate API calls and directory +operations during testing. + +Args: + mock_api_client (unittest.mock.MagicMock): A mock object for simulating API client behavior. + mock_getcwd (unittest.mock.MagicMock): A mock object for simulating the current working directory function. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + def + def tests.test_doc_commands.test_generate_doc_with_folder_exception + (mock_api_client, mock_getcwd) + test_generate_doc_with_folder_exception + tests.test_doc_commands.test_generate_doc_with_folder_exception + + mock_api_client + mock_api_client + + + mock_getcwd + mock_getcwd + + + + +Generate documentation from a given API endpoint and save it to a +folder. + +This function fetches data from the specified API endpoint, processes +it, and saves the generated documentation in the provided folder. If an +error occurs during the fetching process, a SystemExit exception is +raised with an appropriate message. + +Args: + api_url (str): The URL of the API endpoint from which data will be fetched. + token (str): The authentication token required to access the API. + folder_path (str): The path to the folder where the documentation will be saved. + + + + + + penify_hook.commands.doc_commands.generate_doc + + + + + + + + + diff --git a/docs345/xml/namespacetests_1_1test__web__config.xml b/docs345/xml/namespacetests_1_1test__web__config.xml new file mode 100644 index 0000000..d68b4d9 --- /dev/null +++ b/docs345/xml/namespacetests_1_1test__web__config.xml @@ -0,0 +1,12 @@ + + + + tests::test_web_config + tests::test_web_config::TestWebConfig + + + + + + + diff --git a/docs345/xml/penify-cli-documentation_8md.xml b/docs345/xml/penify-cli-documentation_8md.xml new file mode 100644 index 0000000..83e4922 --- /dev/null +++ b/docs345/xml/penify-cli-documentation_8md.xml @@ -0,0 +1,220 @@ + + + + penify-cli-documentation.md + + + + + +--- +layout:doc +title:StreamlineGitCommitsandCodeDocumentationwithPenify-CLI'sAutomatedGeneration +description:DiscoverhowPenify-CLIautomatesbothGitcommitmessagesandcodedocumentation,withJiraintegrationandflexibleoptions.Savetime,improverepositoryclarity,andboostproductivitywiththisdetailedguidetousageandbestpractices. +keywords:Penify-CLI,Gitcommitmessages,codedocumentation,Jiraintegration,automateddocumentation,versioncontrol,repositorymanagement,developerproductivity +author:SumanSauarbh +--- +#PenifyCLIDocumentation + +PenifyCLIisapowerfultoolforenhancingyourdevelopmentworkflowwithAI-poweredfeatureslikecommitmessagegeneration,codedocumentation,andJIRAintegration. + +##Installation + +```bash +pipinstallpenify +``` + +##GettingStarted + +Afterinstallation,youcanchecktheversionofPenifyCLI: + +```bash +penify--version +``` + +##CommandsOverview + +-`commit`:Generatesmartcommitmessagesusinglocal-LLM +-`config`:Configurelocal-LLMandJIRAsettings +-`login`:LogintoPenifytouseadvancedfeatures +-`docgen`:GeneratecodedocumentationforGitdiffs,files,orfolders + +##DetailedCommandDocumentation + +###CommitCommand + +The`commit`commandgeneratesintelligentcommitmessagesusinglocalLLMmodelsorPenifyservices. + +####Usage: + +```bash +penifycommit[options] +``` + +####Options: + +-`-m,--messageTEXT`:Providecontextforthecommitmessagegeneration +-`-e,--terminal`:Openaneditortomodifythegeneratedcommitmessagebeforeapplyingit +-`-d,--description`:Generateadetailedcommitmessagewithbothtitleanddescription + +####Examples: + +**Basicusage:** +```bash +penifycommit +``` + +**Providecontextforbetterresults:** +```bash +penifycommit-m"Fixedtheloginbutton" +``` + +**Generateadetailedcommitmessageandopeneditor:** +```bash +penifycommit-e-d +``` + +####Requirements: + +-EitheralocalLLMconfiguration(via`penifyconfigllm`)orPenifylogin +-ForJIRAintegration,configureJIRAsettings(via`penifyconfigjira`) + +--- + +###ConfigCommand + +The`config`commandhelpsyouconfigurelocalLLMsettingsandJIRAintegrationforenhancedcommitmessages. + +####Usage: + +```bash +penifyconfig[subcommand] +``` + +####Subcommands: + +-`llm`:ConfigurelocalLargeLanguageModelsettings +-`jira`:ConfigureJIRAintegrationsettings + +####Examples: + +**ConfigurelocalLLM:** +```bash +penifyconfigllm +``` +Thisopensawebinterfacetoconfigure: +-Modelname(e.g.,gpt-3.5-turbo,llama2) +-APIbaseURL(e.g.,https://api.openai.com/v1) +-APIkey + +**ConfigureJIRAintegration:** +```bash +penifyconfigjira +``` +Thisopensawebinterfacetoconfigure: +-JIRAURL(e.g.,https://your-domain.atlassian.net) +-Username(typicallyyouremail) +-APItoken + +--- + +###LoginCommand + +The`login`commandauthenticatesyouwithPenifyforadvancedfeatureslikecodedocumentationgeneration. + +####Usage: + +```bash +penifylogin +``` + +####Whathappens: +1.AbrowserwindowopenstothePenifyloginpage +2.Aftersuccessfullogin,yourAPIkeyisautomaticallysaved +3.ThetoolisnowauthorizedtousePenify'sadvancedfeatures + +####Example: + +```bash +penifylogin +``` + +--- + +###DocgenCommand + +The`docgen`commandgeneratesdocumentationforyourcodeusingPenify'sAIservices. + +####Usage: + +```bash +penifydocgen[options][subcommand] +``` + +####Options: + +-`-l,--locationPATH`:Pathtoaspecificfileorfoldertodocument(default:currentworkingdirectory) + +####Subcommands: + +-`install-hook`:InstallaGitpost-commithooktoautomaticallygeneratedocumentation +-`uninstall-hook`:RemovetheGitpost-commithook + +####Examples: + +**DocumentcurrentGitdiff:** +```bash +penifydocgen +``` + +**Documentaspecificfile:** +```bash +penifydocgen-lsrc/main.py +``` + +**Documentanentirefolder:** +```bash +penifydocgen-lsrc/components +``` + +**InstalltheGithookforautomaticdocumentation:** +```bash +penifydocgeninstall-hook +``` + +**UninstalltheGithook:** +```bash +penifydocgenuninstall-hook +``` + +####Requirements: + +-RequireslogintoPenify(`penifylogin`) + +##ConfigurationFiles + +PenifyCLIstoresconfigurationinthefollowinglocations: + +-Globalconfiguration:`~/.penify` +-Project-specificconfiguration:`.penify`inyourGitrepositoryroot + +##EnvironmentVariables + +-`PENIFY_API_TOKEN`:CanbeusedtoprovidetheAPItokeninsteadofloggingin + +##Troubleshooting + +Ifyouencounterissues: + +1.Checkyourconfigurationwith`cat~/.penify` +2.VerifynetworkconnectivitytoAPIendpoints +3.EnsureyourAPIkeysandtokensarevalid +4.ForJIRAintegrationissues,verifyyourJIRAcredentials + +##AdditionalResources + +Formoreinformation,visitthe[PenifyDocumentation](https://docs.penify.dev/). + + + + diff --git a/docs345/xml/penify__hook_2____init_____8py.xml b/docs345/xml/penify__hook_2____init_____8py.xml new file mode 100644 index 0000000..d3d0335 --- /dev/null +++ b/docs345/xml/penify__hook_2____init_____8py.xml @@ -0,0 +1,13 @@ + + + + __init__.py + + + + + + + + + diff --git a/docs345/xml/penify__hook_2commands_2____init_____8py.xml b/docs345/xml/penify__hook_2commands_2____init_____8py.xml new file mode 100644 index 0000000..141dfec --- /dev/null +++ b/docs345/xml/penify__hook_2commands_2____init_____8py.xml @@ -0,0 +1,16 @@ + + + + __init__.py + penify_hook + penify_hook::commands + + + + + +#ThisfilemakesthecommandsdirectoryaproperPythonpackage + + + + diff --git a/docs345/xml/setup_8py.xml b/docs345/xml/setup_8py.xml new file mode 100644 index 0000000..b732c20 --- /dev/null +++ b/docs345/xml/setup_8py.xml @@ -0,0 +1,46 @@ + + + + setup.py + setup + + + + + +fromsetuptoolsimportsetup,find_packages + +setup( +name="penify",#Changedfrom"penify"toamoreuniquename +version="0.3.0", +packages=['penify_hook'], +install_requires=[ +"requests", +"tqdm", +"GitPython", +"colorama", +"litellm", +"jira" +], +entry_points={ +"console_scripts":[ +"penify=penify_hook.main:main",#Commandnameremainsthesame +], +}, +author="SumanSaurabh", +author_email="ss.sumansaurabh92@gmail.com", +description="ApenifyclitooltogenerateDocumentation,Commit-summary.", +long_description=open("README.md").read(), +long_description_content_type="text/markdown", +url="https://github.com/SingularityX-ai/penify", +classifiers=[ +"ProgrammingLanguage::Python::3", +"License::OSIApproved::MITLicense", +"OperatingSystem::OSIndependent", +], +python_requires='>=3.6', +) + + + + diff --git a/docs345/xml/test__commit__commands_8py.xml b/docs345/xml/test__commit__commands_8py.xml new file mode 100644 index 0000000..210ffd1 --- /dev/null +++ b/docs345/xml/test__commit__commands_8py.xml @@ -0,0 +1,450 @@ + + + + test_commit_commands.py + tests::test_commit_commands::TestCommitCommands + tests + tests::test_commit_commands + + + + + +importos +importsys +importpytest +fromunittest.mockimportpatch,MagicMock,call + +frompenify_hook.commands.commit_commandsimportcommit_code,setup_commit_parser,handle_commit + +classTestCommitCommands: + +@pytest.fixture +defmock_api_client(self): +"""MocksaninstanceofAPIClientusingunittest.mock. + +ThisfunctioncreatesamockobjectforAPIClientandyieldsitalong +withthemockedinstance.Itisusefulfortestingpurposeswherereal +APIcallsshouldbeavoided. + +Yields: +tuple:AtuplecontainingthemockofAPIClientandthemockedinstanceof +APIClient. +""" + +withpatch('penify_hook.api_client.APIClient',create=True)asmock: +api_client_instance=MagicMock() +mock.return_value=api_client_instance +yieldmock,api_client_instance + +@pytest.fixture +defmock_llm_client(self): +"""MockaninstanceofLLMClientfortestingpurposes. + +Thisfunctionyieldsamockobjectrepresentinganinstanceof +LLMClient,whichcanbeusedtosimulateinteractionswithalanguage +modelduringtesting.Themockispatchedtoreplacetheactual +LLMClientclassfromthepenify_hookmodule. + +Yields: +tuple:Atuplecontainingtwoelements: +-mock(MagicMock):ThemockobjectforLLMClient. +-llm_client_instance(MagicMock):AninstanceofthemockedLLMClient. +""" + +withpatch('penify_hook.llm_client.LLMClient',create=True)asmock: +llm_client_instance=MagicMock() +mock.return_value=llm_client_instance +yieldmock,llm_client_instance + +@pytest.fixture +defmock_jira_client(self): +"""CreateamockJIRAclientfortestingpurposes. + +ThisfunctionyieldsatuplecontainingamockJIRAclientinstanceand +its`is_connected`method.Themockclientisconfiguredtosimulatean +activeconnection.Thisisusefulforunitteststhatrequire +interactionwithaJIRAclientwithoutmakingactualnetworkcalls. + +Yields: +tuple:AtuplecontainingthemockedJIRAclientinstanceandits +`is_connected`method. +""" + +withpatch('penify_hook.jira_client.JiraClient',create=True)asmock: +jira_instance=MagicMock() +jira_instance.is_connected.return_value=True +mock.return_value=jira_instance +yieldmock,jira_instance + +@pytest.fixture +defmock_commit_doc_gen(self): +"""MockstheCommitDocGenHookclassandreturnsaMagicMockinstance. + +Thisfunctionusesthe`patch`decoratorfromthe`unittest.mock`module +tocreateamockofthe`CommitDocGenHook`class.Itthensetsupthis +mocktoreturnanew`MagicMock`instancewheninvoked.Thefunction +yieldsboththemockobjectandthemockedinstance,allowingforeasy +testingoffunctionsthatrelyon`CommitDocGenHook`. + +Returns: +tuple:Atuplecontainingtwoelements: +-mock(patch):Thepatchobjectusedtomockthe`CommitDocGenHook` +class. +-doc_gen_instance(MagicMock):Themockedinstanceof +`CommitDocGenHook`. +""" + +withpatch('penify_hook.commit_analyzer.CommitDocGenHook',create=True)asmock: +doc_gen_instance=MagicMock() +mock.return_value=doc_gen_instance +yieldmock,doc_gen_instance + +@pytest.fixture +defmock_git_folder_search(self): +"""Mockthe`recursive_search_git_folder`functiontoreturnapredefined +gitfolderpath. + +Thisfunctionusesthe`patch`decoratorfromthe`unittest.mock`module +tointerceptcallsto`penify_hook.utils.recursive_search_git_folder`. +Whencalled,itwillreturn'/mock/git/folder'insteadofperformingan +actualsearch.Thisisusefulfortestingpurposeswhereyouneeda +consistentresponsewithoutinteractingwiththefilesystem. + +Yields: +MagicMock:Amockobjectthatsimulatesthe`recursive_search_git_folder`function. +""" + +withpatch('penify_hook.utils.recursive_search_git_folder',create=True)asmock: +mock.return_value='/mock/git/folder' +yieldmock + +@pytest.fixture +defmock_print_functions(self): +"""Mockstheprintfunctionsfrom`penify_hook.ui_utils`fortesting +purposes. + +ThisfunctionusesPython's`unittest.mock.patch`toreplacetheactual +printfunctions(`print`,`print_warning`,and`print_error`)withmock +objects.Thesemockobjectscanbeusedinteststocapturecallsmade +totheseprintfunctionswithoutactuallyprintinganything. + +Yields: +tuple:Atuplecontainingthreemockobjectscorrespondingto`print_info`, +`print_warning`, +and`print_error`. +""" + +withpatch('penify_hook.ui_utils.print_info',create=True)asmock_info,\ +patch('penify_hook.ui_utils.print_warning',create=True)asmock_warning,\ +patch('penify_hook.ui_utils.print_error',create=True)asmock_error: +yieldmock_info,mock_warning,mock_error + +@patch('penify_hook.api_client.APIClient',create=True) +@patch('penify_hook.llm_client.LLMClient',create=True) +@patch('penify_hook.commit_analyzer.CommitDocGenHook',create=True) +@patch('penify_hook.utils.recursive_search_git_folder',create=True) +@patch('penify_hook.ui_utils.print_info',create=True) +@patch('penify_hook.ui_utils.print_warning',create=True) +@patch('penify_hook.ui_utils.print_error',create=True) +deftest_commit_code_with_llm_client(self,mock_error,mock_warning,mock_info, +mock_git_folder_search,mock_doc_gen, +mock_llm_client,mock_api_client): +"""TestcommittingcodeusinganLLMclient. + +Thisfunctionsetsupmockobjectsforvariouscomponentsandthencalls +the`commit_code`functionwithspecifiedparameters.Itverifiesthat +thecorrectmocksarecreatedandcalledwiththeappropriatearguments. + +Args: +mock_error(MagicMock):Mockobjectforerrorhandling. +mock_warning(MagicMock):Mockobjectforwarninglogging. +mock_info(MagicMock):Mockobjectforinfologging. +mock_git_folder_search(MagicMock):Mockobjecttosimulategitfoldersearch. +mock_doc_gen(MagicMock):Mockobjectfordocumentgeneration. +mock_llm_client(MagicMock):MockobjectforLLMclientinteraction. +mock_api_client(MagicMock):MockobjectforAPIclientinteraction. +""" + +#Setupmocks +api_instance=MagicMock() +mock_api_client.return_value=api_instance + +llm_instance=MagicMock() +mock_llm_client.return_value=llm_instance + +doc_gen_instance=MagicMock() +mock_doc_gen.return_value=doc_gen_instance + +mock_git_folder_search.return_value='/mock/git/folder' + +#CallfunctionwithLLMparameters +commit_code( +api_url="http://api.example.com", +token="api-token", +message="testcommit", +open_terminal=False, +generate_description=True, +llm_model="gpt-4", +llm_api_base="http://llm-api.example.com", +llm_api_key="llm-api-key" +) + +#Verifycalls +mock_api_client.assert_called_once_with("http://api.example.com","api-token") +mock_llm_client.assert_called_once_with( +model="gpt-4", +api_base="http://llm-api.example.com", +api_key="llm-api-key" +) +mock_doc_gen.assert_called_once_with('/mock/git/folder',api_instance,llm_instance,None) +doc_gen_instance.run.assert_called_once_with("testcommit",False,True) + +@patch('penify_hook.api_client.APIClient',create=True) +@patch('penify_hook.llm_client.LLMClient',create=True) +@patch('penify_hook.jira_client.JiraClient',create=True) +@patch('penify_hook.commit_analyzer.CommitDocGenHook',create=True) +@patch('penify_hook.utils.recursive_search_git_folder',create=True) +@patch('penify_hook.ui_utils.print_info',create=True) +@patch('penify_hook.ui_utils.print_warning',create=True) +@patch('penify_hook.ui_utils.print_error',create=True) +deftest_commit_code_with_jira_client(self,mock_error,mock_warning,mock_info, +mock_git_folder_search,mock_doc_gen, +mock_jira_client,mock_llm_client,mock_api_client): +"""TestcommittingcodeusingaJIRAclient. + +Thisfunctionteststhecommit_codefunctionwithvariousparameters, +includingAPIandJIRAcredentials.Itsetsupmockobjectsfor +dependenciessuchastheJIRAclient,LLMclient,anddocgeneratorto +simulatethebehavioroftherealclasses.Thefunctionthencalls +commit_codeandverifiesthattheJIRAclientanddocgeneratorare +calledwiththecorrectparameters. + +Args: +mock_error(MagicMock):AMagicMockobjectforsimulatingerrorlogging. +mock_warning(MagicMock):AMagicMockobjectforsimulatingwarninglogging. +mock_info(MagicMock):AMagicMockobjectforsimulatinginfologging. +mock_git_folder_search(MagicMock):AMagicMockobjectforsimulatingthegitfoldersearchfunction. +mock_doc_gen(MagicMock):AMagicMockobjectforsimulatingthedocgeneratorfunction. +mock_jira_client(MagicMock):AMagicMockobjectforsimulatingtheJIRAclientclass. +mock_llm_client(MagicMock):AMagicMockobjectforsimulatingtheLLMclientclass. +mock_api_client(MagicMock):AMagicMockobjectforsimulatingtheAPIclientclass. +""" + +#Setupmocks +api_instance=MagicMock() +mock_api_client.return_value=api_instance + +llm_instance=MagicMock() +mock_llm_client.return_value=llm_instance + +jira_instance=MagicMock() +jira_instance.is_connected.return_value=True +mock_jira_client.return_value=jira_instance + +doc_gen_instance=MagicMock() +mock_doc_gen.return_value=doc_gen_instance + +mock_git_folder_search.return_value='/mock/git/folder' + +#CallfunctionwithJIRAparameters +commit_code( +api_url="http://api.example.com", +token="api-token", +message="testcommit", +open_terminal=False, +generate_description=True, +llm_model="gpt-4", +llm_api_base="http://llm-api.example.com", +llm_api_key="llm-api-key", +jira_url="https://jira.example.com", +jira_user="jira-user", +jira_api_token="jira-token" +) + +#Verifycalls +mock_jira_client.assert_called_once_with( +jira_url="https://jira.example.com", +jira_user="jira-user", +jira_api_token="jira-token" +) +mock_doc_gen.assert_called_once_with('/mock/git/folder',api_instance,llm_instance,jira_instance) + +@patch('penify_hook.api_client.APIClient',create=True) +@patch('penify_hook.jira_client.JiraClient',create=True) +@patch('penify_hook.commit_analyzer.CommitDocGenHook',create=True) +@patch('penify_hook.utils.recursive_search_git_folder',create=True) +@patch('penify_hook.ui_utils.print_info',create=True) +@patch('penify_hook.ui_utils.print_warning',create=True) +@patch('penify_hook.ui_utils.print_error',create=True) +deftest_commit_code_with_jira_connection_failure(self,mock_error,mock_warning,mock_info, +mock_git_folder_search,mock_doc_gen, +mock_jira_client,mock_api_client): +"""Testthecommit_codefunctionwhenJIRAconnectionfails. + +ThisfunctionteststhescenariowheretheJIRAconnectionfailsduring +acodecommit.Itsetsupvariousmockstosimulatedifferentcomponents +ofthesystemandthencallsthe`commit_code`functionwithspecific +parameters.ThefunctionisexpectedtohandletheJIRAconnection +failuregracefullybylogginganappropriatewarning. + +Args: +mock_error(MagicMock):Mockforerrorlogging. +mock_warning(MagicMock):Mockforwarninglogging. +mock_info(MagicMock):Mockforinfologging. +mock_git_folder_search(MagicMock):MockforsearchingtheGitfolder. +mock_doc_gen(MagicMock):Mockforgeneratingdocumentation. +mock_jira_client(MagicMock):MockforcreatingaJIRAclient. +mock_api_client(MagicMock):MockforcreatinganAPIclient. +""" + +#Setupmocks +api_instance=MagicMock() +mock_api_client.return_value=api_instance + +jira_instance=MagicMock() +jira_instance.is_connected.return_value=False +mock_jira_client.return_value=jira_instance + +doc_gen_instance=MagicMock() +mock_doc_gen.return_value=doc_gen_instance + +mock_git_folder_search.return_value='/mock/git/folder' + +#Callfunction +commit_code( +api_url="http://api.example.com", +token="api-token", +message="testcommit", +open_terminal=False, +generate_description=True, +llm_model=None, +jira_url="https://jira.example.com", +jira_user="jira-user", +jira_api_token="jira-token" +) + +#VerifyJIRAwarning +mock_doc_gen.assert_called_once_with('/mock/git/folder',api_instance,None,None) + +@patch('penify_hook.api_client.APIClient',create=True) +@patch('penify_hook.commit_analyzer.CommitDocGenHook',create=True) +@patch('penify_hook.utils.recursive_search_git_folder',create=True) +@patch('sys.exit') +@patch('builtins.print') +deftest_commit_code_error_handling(self,mock_print,mock_exit, +mock_git_folder_search,mock_doc_gen,mock_api_client): +"""Testtheerrorhandlinginthetest_commit_codefunction. + +Thisfunctionsetsupmockstosimulateexceptionsandtesttheerror +handlingofthecommit_codefunction.Itverifiesthatthefunction +correctlyprintsanerrormessageandexitswithastatuscodeof1when +anexceptionoccursduringdocumentationgeneration. + +Args: +mock_print(MagicMock):Mockfortheprintfunction,usedtoverifyerrormessageoutput. +mock_exit(MagicMock):Mockforthesys.exitfunction,usedtoverifyexitbehavior. +mock_git_folder_search(MagicMock):Mockforthegit_folder_searchfunction,returningamockGitfolder +path. +mock_doc_gen(MagicMock):Mockforthedoc_genfunction,simulatinganexceptionduring +documentationgeneration. +mock_api_client(MagicMock):MockfortheAPIclientclass,notdirectlyusedbutreferencedinthe +functionsignature. +""" + +#Setupmocks +mock_doc_gen.side_effect=Exception("Testerror") +mock_git_folder_search.return_value='/mock/git/folder' + +#Callfunction +commit_code( +api_url="http://api.example.com", +token="api-token", +message="testcommit", +open_terminal=False, +generate_description=True +) + +mock_print.assert_called_once_with("Error:Testerror") +mock_exit.assert_called_once_with(1) + +deftest_setup_commit_parser(self): +"""Setuptheargumentparserforthecommitcommand. + +Thisfunctionconfiguresanargumentparsertohandlevariousoptions +forcommittingchanges.Itaddsthreearguments:-'-m'or'--message': +Anoptionalargumenttospecifyacontextualcommitmessagewitha +defaultvalueof"N/A".-'-e'or'--terminal':Abooleanflagtoopen +aneditterminalbeforecommitting.-'-d'or'--description':Aboolean +flagthat,whensettoFalse,indicatesthegenerationofacommit +messagewithtitleanddescription. + +Args: +parser(MagicMock):Theargumentparsertobeconfigured. +""" + +parser=MagicMock() +setup_commit_parser(parser) + +#Verifyparserconfiguration +assertparser.add_argument.call_count==3 +parser.add_argument.assert_any_call("-m","--message",required=False,help="Commitwithcontextualcommitmessage.",default="N/A") +parser.add_argument.assert_any_call("-e","--terminal",action="store_true",help="Openeditterminalbeforecommitting.") +parser.add_argument.assert_any_call("-d","--description",action="store_false",help="Itwillgeneratecommitmessagewithtitleanddescription.",default=False) + +@patch('penify_hook.commands.commit_commands.get_token') +@patch('penify_hook.commands.commit_commands.get_jira_config') +@patch('penify_hook.commands.commit_commands.get_llm_config') +@patch('penify_hook.commands.commit_commands.commit_code') +@patch('penify_hook.commands.commit_commands.print_info') +@patch('penify_hook.constants.API_URL',"http://api.example.com") +deftest_handle_commit(self,mock_print_info,mock_commit_code,mock_get_token, +mock_get_llm_config,mock_get_jira_config): +"""Testthehandle_commitfunctionwithvariousmockobjects. + +ThisfunctionsetsupmocksforretrievingLLMconfiguration,JIRA +configuration,andcommitcode.Itthencreatesanargumentobjectand +callsthehandle_commitfunction.Finally,itverifiesthatthemock +functionswerecalledwiththeexpectedarguments. + +Args: +mock_print_info(MagicMock):Mockobjectforprintinginformation. +mock_commit_code(MagicMock):Mockobjectforcommittingcode. +mock_get_token(MagicMock):MockobjectforretrievingAPItoken. +mock_get_llm_config(MagicMock):MockobjectforretrievingLLMconfiguration. +mock_get_jira_config(MagicMock):MockobjectforretrievingJIRAconfiguration. +""" + +#Setupmocks +mock_get_llm_config.return_value={ +'model':'test-model', +'api_base':'http://llm-api.example.com', +'api_key':'llm-key' +} +mock_get_token.return_value='api-token' +mock_get_jira_config.return_value={ +'url':'https://jira.example.com', +'username':'jira-user', +'api_token':'jira-token' +} + +#Createargs +args=MagicMock() +args.message="testcommit" +args.terminal=True +args.description=True + +#Callfunction +handle_commit(args) + +#Verify +mock_print_info.assert_called_with("GenerateCommitDescription:True") +mock_commit_code.assert_called_once_with( +"http://api.example.com",'api-token',"testcommit",True,True, +'test-model','http://llm-api.example.com','llm-key', +'https://jira.example.com','jira-user','jira-token' +) + + + + diff --git a/docs345/xml/test__config__commands_8py.xml b/docs345/xml/test__config__commands_8py.xml new file mode 100644 index 0000000..cd7b938 --- /dev/null +++ b/docs345/xml/test__config__commands_8py.xml @@ -0,0 +1,465 @@ + + + + test_config_commands.py + tests::test_config_commands::TestConfigCommands + tests + tests::test_config_commands + + + + + +importos +importjson +importpytest +fromunittest.mockimportpatch,mock_open,MagicMock +frompathlibimportPath + +frompenify_hook.commands.config_commandsimport( +get_penify_config, +get_llm_config, +get_jira_config, +save_llm_config, +save_jira_config, +get_token +) + +classTestConfigCommands: + +@patch('penify_hook.commands.config_commands.recursive_search_git_folder')#Updatedpatchpathhere +@patch('penify_hook.commands.config_commands.Path') +@patch('os.makedirs') +@patch('builtins.open',new_callable=mock_open) +deftest_get_penify_config_existing_dir(self,mock_file_open,mock_makedirs,mock_path,mock_git_folder): +"""Testtheget_penify_configfunctionwhenthe.penifyconfigdirectory +exists. + +Itshouldnotcreateanewdirectoryandassertthatallmocked +functionswerecalledcorrectly. + +Args: +mock_file_open(MagicMock):AMagicMockobjectsimulatingtheopen()function. +mock_makedirs(MagicMock):AMagicMockobjectsimulatingtheos.makedirs()function. +mock_path(MagicMock):AMagicMockobjectsimulatingthePathclassfrompathlibmodule. +mock_git_folder(MagicMock):AMagicMockobjectsimulatingthegit_folder_search()function. +""" + +#Mockgitfoldersearch +mock_git_folder.return_value='/mock/git/folder' + +#MockPathoperations +mock_path_instance=MagicMock() +mock_path.return_value=mock_path_instance +mock_path_instance.__truediv__.return_value=mock_path_instance + +#Pathexistsfor.penifydir +mock_path_instance.exists.return_value=True + +#Callfunction +result=get_penify_config() + +#Assertions +mock_git_folder.assert_called_once_with(os.getcwd()) +mock_path.assert_called_once_with('/mock/git/folder') +mock_path_instance.__truediv__.assert_called_with('.penify') +assertmock_makedirs.call_count==0#Shouldnotcreatedirectory + +@patch('penify_hook.utils.recursive_search_git_folder') +@patch('penify_hook.commands.config_commands.Path') +@patch('os.makedirs') +@patch('builtins.open',new_callable=mock_open) +deftest_get_penify_config_new_dir(self,mock_file_open,mock_makedirs,mock_path,mock_git_folder): +"""Testthebehaviorofget_penify_configwhenthe.penifydirectorydoes +notexist. + +Thisfunctionmocksvarioussystemcallstosimulateascenariowhere +the.penifydirectoryisnotpresent.Itthenassertsthatthe +appropriateactionsaretakentocreatethedirectoryandwriteanempty +JSONfile. + +Args: +mock_file_open(MagicMock):AMagicMockobjectsimulatingthe`open`function. +mock_makedirs(MagicMock):AMagicMockobjectsimulatingthe`os.makedirs`function. +mock_path(MagicMock):AMagicMockobjectsimulatingthe`Path`classfrom`pathlib`. +mock_git_folder(MagicMock):AMagicMockobjectsimulatingagitfoldersearchfunction. +""" + +#Mockgitfoldersearch +mock_git_folder.return_value='/mock/git/folder' + +#MockPathoperations +mock_path_instance=MagicMock() +mock_path.return_value=mock_path_instance +mock_path_instance.__truediv__.return_value=mock_path_instance + +#Pathdoesn'texistfor.penifydir +mock_path_instance.exists.side_effect=[False,False] + +#Callfunction +result=get_penify_config() + +#Assertions +mock_makedirs.assert_called_with(mock_path_instance,exist_ok=True) +mock_file_open.assert_called_once() +mock_file_open().write.assert_called_once_with('{}') + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',new_callable=mock_open,read_data='{"llm":{"model":"gpt-4","api_base":"https://api.openai.com","api_key":"test-key"}}') +deftest_get_llm_config_exists(self,mock_file_open,mock_get_config): +"""Testtheget_llm_configfunctionwhentheconfigurationfileexists. + +Thisfunctionsetsupamockconfigurationfilethatexistsandreturns +itwhencalled.Itthencallstheget_llm_configfunctionandasserts +thatitreturnsthecorrectconfigurationdictionary.Additionally,it +checksthatthemock_file_openfunctionwascalledwiththecorrect +arguments. + +Args: +mock_file_open(MagicMock):Amockfortheopen()function. +mock_get_config(MagicMock):Amockfortheget_config()function. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_config_file.exists.return_value=True +mock_get_config.return_value=mock_config_file + +#Callfunction +result=get_llm_config() + +#Assertions +assertresult=={ +'model':'gpt-4', +'api_base':'https://api.openai.com', +'api_key':'test-key' +} +mock_file_open.assert_called_once_with(mock_config_file,'r') + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',new_callable=mock_open,read_data='{}') +deftest_get_llm_config_empty(self,mock_file_open,mock_get_config): +"""Testthebehaviorofget_llm_configwhencalledwithanempty +configurationfile. + +Thisfunctionsetsupamockconfigurationfilethatexistsbutreturns +nocontent.Itthencallsthe`get_llm_config`functionandassertsthat +itreturnsanemptydictionaryandthatthefileopenmethodwascalled +exactlyoncewiththecorrectarguments. + +Args: +mock_file_open(MagicMock):AMagicMockobjectsimulatingthebuilt-inopenfunction. +mock_get_config(MagicMock):AMagicMockobjectsimulatingtheget_configfunction. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_config_file.exists.return_value=True +mock_get_config.return_value=mock_config_file + +#Callfunction +result=get_llm_config() + +#Assertions +assertresult=={} +mock_file_open.assert_called_once_with(mock_config_file,'r') + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',new_callable=mock_open,read_data='invalidjson') +@patch('builtins.print') +deftest_get_llm_config_invalid_json(self,mock_print,mock_file_open,mock_get_config): +"""Testfunctiontoverifythebehaviorofget_llm_configwhenreadingan +invalidJSONfile. + +Itsetsupamockconfigurationfilethatexistsbutcontainsinvalid +JSON.Thefunctionisexpectedtohandlethisgracefullybyprintingan +errormessageandreturninganemptydictionary. + +Args: +mock_print(MagicMock):Mockfortheprintfunction. +mock_file_open(MagicMock):Mockfortheopenfunction. +mock_get_config(MagicMock):Mockfortheget_configfunction,whichreturnsthemockconfiguration +file. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_config_file.exists.return_value=True +mock_get_config.return_value=mock_config_file + +#Callfunction +result=get_llm_config() + +#Assertions +assertresult=={} +mock_print.assert_called_once() +assert'Errorreading.penifyconfigfile'inmock_print.call_args[0][0] + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',new_callable=mock_open,read_data='{"jira":{"url":"https://jira.example.com","username":"user","api_token":"token"}}') +deftest_get_jira_config_exists(self,mock_file_open,mock_get_config): +"""Testthatget_jira_configreturnsthecorrectJIRAconfigurationwhen +theconfigurationfileexists. + +Itsetsupamockfortheconfigurationfiletosimulateitsexistence +andverifiesthatthefunctionreadsfromthecorrectfileandreturns +theexpectedJIRAconfigurationdictionary.Additionally,itchecksthat +themockfileopeniscalledwiththeappropriatearguments. + +Args: +mock_file_open(MagicMock):Amockforthe`open`function. +mock_get_config(MagicMock):Amockforthe`get_config`function,whichisexpectedtoreturnamock +configurationfileobject. + +Returns: +None:Thistestfunctiondoesnotexplicitlyreturnanything.Itsassertions +serveastheverificationofitscorrectness. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_config_file.exists.return_value=True +mock_get_config.return_value=mock_config_file + +#Callfunction +result=get_jira_config() + +#Assertions +assertresult=={ +'url':'https://jira.example.com', +'username':'user', +'api_token':'token' +} +mock_file_open.assert_called_once_with(mock_config_file,'r') + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',new_callable=mock_open) +@patch('json.dump') +@patch('builtins.print') +deftest_save_llm_config_success(self,mock_print,mock_json_dump,mock_file_open,mock_get_config): +"""Testthesave_llm_configfunctionsuccessfully. + +Thisfunctionteststhatthesave_llm_configfunctioncorrectlysavesan +LLMconfigurationandhandlesvariousmockobjectsandsideeffects.It +ensuresthatthefunctionreturnsTrueuponsuccessfulexecution,writes +theexpectedconfigurationtoafile,andprintsaconfirmationmessage. + +Args: +mock_print(MagicMock):Amockobjectfortheprintfunction. +mock_json_dump(MagicMock):Amockobjectforjson.dump. +mock_file_open(MagicMock):Amockobjectforfileopening. +mock_get_config(MagicMock):Amockobjecttoreturnaconfigurationfilemock. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_get_config.return_value=mock_config_file +mock_file_open.return_value.__enter__.return_value=mock_file_open + +#Mockjson.loadtoreturnemptydictwhenreading +withpatch('json.load',return_value={}): +#Callfunction +result=save_llm_config("gpt-4","https://api.openai.com","test-key") + +#Assertions +assertresult==True +mock_json_dump.assert_called_once() +expected_config={ +'llm':{ +'model':'gpt-4', +'api_base':'https://api.openai.com', +'api_key':'test-key' +} +} +assertmock_json_dump.call_args[0][0]==expected_config +mock_print.assert_called_once() +assert'configurationsaved'inmock_print.call_args[0][0] + +@patch('penify_hook.commands.config_commands.get_penify_config') +@patch('builtins.open',side_effect=IOError("Permissiondenied")) +@patch('builtins.print') +deftest_save_llm_config_failure(self,mock_print,mock_file_open,mock_get_config): +"""Testfunctiontoverifythatthesave_llm_configfunctionreturnsFalse +andprintsanerrormessagewhenitfailstosavetheLLMconfiguration +duetoapermissionerror. + +Itsetsupamockconfigurationfilethatexistsandcallsthe +save_llm_configfunctionwithvalidparameters.Thefunctionisexpected +toreturnFalseandprint"ErrorsavingLLMconfiguration:Permission +denied"incaseofafailure. + +Args: +self(TestLLMConfig):Aninstanceofthetestclass. +mock_print(MagicMock):AMagicMockobjectrepresentingtheprintfunction,whichwillbeused +toassertthatitwascalledwiththeexpectederrormessage. +mock_file_open(MagicMock):AMagicMockobjectrepresentingtheopenfunction,whichisnotusedin +thistestbutisincludedasaparameterforcompleteness. +mock_get_config(MagicMock):AMagicMockobjectrepresentingtheget_configfunction,whichwillbe +usedtoreturnthemockconfigurationfile. +""" + +#Setupmock +mock_config_file=MagicMock() +mock_config_file.exists.return_value=True +mock_get_config.return_value=mock_config_file + +#Callfunction +result=save_llm_config("gpt-4","https://api.openai.com","test-key") + +#Assert +assertresultisFalse +mock_print.assert_called_with("ErrorsavingLLMconfiguration:Permissiondenied") + +@patch('penify_hook.commands.config_commands.Path') +@patch('builtins.open',new_callable=mock_open) +@patch('json.dump') +@patch('builtins.print') +deftest_save_jira_config_success(self,mock_print,mock_json_dump,mock_file_open,mock_path): +"""Testthesave_jira_configfunctiontoensureitsavesJIRAconfiguration +successfully. + +Thisfunctionsetsupmocksforvariousdependenciesandteststhe +functionalityofsavingaJIRAconfiguration.Itassertsthatthe +functionreturns`True`,theJSONdumpiscalledwiththecorrect +configuration,andtheprintstatementcontainstheexpectedmessage. + +Args: +mock_print(MagicMock):Mockfortheprintfunction. +mock_json_dump(MagicMock):Mockforthejson.dumpfunction. +mock_file_open(MagicMock):Mockfortheopenfunction. +mock_path(MagicMock):Mockforthepathmodule. +""" + +#Setupmock +mock_home_dir=MagicMock() +mock_path.home.return_value=mock_home_dir +mock_home_dir.__truediv__.return_value=mock_home_dir +mock_home_dir.exists.return_value=True + +#Mockjson.loadtoreturnemptydictwhenreading +withpatch('json.load',return_value={}): +#Callfunction +result=save_jira_config("https://jira.example.com","user","token") + +#Assertions +assertresult==True +mock_json_dump.assert_called_once() +expected_config={ +'jira':{ +'url':'https://jira.example.com', +'username':'user', +'api_token':'token' +} +} +assertmock_json_dump.call_args[0][0]==expected_config +mock_print.assert_called_once() +assert'configurationsaved'inmock_print.call_args[0][0] + +@patch('os.getenv') +@patch('penify_hook.commands.config_commands.Path') +@patch('builtins.open',new_callable=mock_open,read_data='{"api_keys":"config-token"}') +deftest_get_token_from_env(self,mock_file_open,mock_path,mock_getenv): +"""Testretrievingatokenfromtheenvironmentvariable. + +Thisfunctionteststhebehaviorof`get_token`whenanenvironment +variableisset.Itverifiesthatifthe'PENIFY_API_TOKEN'environment +variableexists,thefunctionreturnsitsvaluewithoutattemptingto +readafile. + +Args: +mock_file_open(MagicMock):AMagicMockobjectforsimulatingfileoperations. +mock_path(MagicMock):AMagicMockobjectforsimulatingpathoperations. +mock_getenv(MagicMock):AMagicMockobjectforsimulatingenvironmentvariableretrieval. +""" + +#Setupmockforenvvar +mock_getenv.return_value="env-token" + +#Callfunction +result=get_token() + +#Assertions +assertresult=="env-token" +mock_getenv.assert_called_once_with('PENIFY_API_TOKEN') +#Fileshouldnotbereadifenvvarexists +assertmock_file_open.call_count==0 + +@patch('os.getenv') +@patch('penify_hook.commands.config_commands.Path') +@patch('builtins.open',new_callable=mock_open,read_data='{"api_keys":"config-token"}') +deftest_get_token_from_config(self,mock_file_open,mock_path,mock_getenv): +"""Testretrievingatokenfromtheconfiguration. + +Thisfunctionsetsupmocksforenvironmentvariablesandconfiguration +files,callsthe`get_token`function,andassertsitsbehavior.It +verifiesthatwhentheenvironmentvariableisnotfound,thefunction +readsatokenfromaconfigurationfilelocatedintheuser'shome +directory. + +Args: +mock_file_open(MagicMock):Amockforthe`open`function. +mock_path(MagicMock):Amockforthe`pathlib.Path`class. +mock_getenv(MagicMock):Amockforthe`os.getenv`function. +""" + +#Setupmockforenvvar(notfound) +mock_getenv.return_value=None + +#Setupmockforconfigfile +mock_home_dir=MagicMock() +mock_path.home.return_value=mock_home_dir +mock_home_dir.__truediv__.return_value=mock_home_dir +mock_home_dir.exists.return_value=True + +#Callfunction +result=get_token() + +#Assertions +assertresult=="config-token" +mock_getenv.assert_called_once_with('PENIFY_API_TOKEN') +mock_file_open.assert_called_once_with(mock_home_dir,'r') + +@patch('os.getenv') +@patch('penify_hook.commands.config_commands.Path') +@patch('builtins.open',new_callable=mock_open,read_data='{"other_key":"value"}') +deftest_get_token_not_found(self,mock_file_open,mock_path,mock_getenv): +"""Testtheget_tokenfunctionwhentheAPItokenenvironmentvariableis +notfound. + +Thisfunctionteststhescenariowherethe`PENIFY_API_TOKEN` +environmentvariableisnotset.Itmockstheenvironmentvariableto +return`None`,andverifiesthatthefunctionreturns`None`.Thetest +alsochecksthattheenvironmentvariableisaccessedonceandthata +fileopenoperationisattemptedonaconfigurationfilelocatedinthe +user'shomedirectory. + +Args: +mock_file_open(MagicMock):Mockforthebuilt-in`open`function. +mock_path(MagicMock):Mockforthe`pathlib.Path`module. +mock_getenv(MagicMock):Mockforthe`os.getenv`function. + +Returns: +None:Thefunctiondoesnotreturnanything;itassertsconditionstoverify +correctness. +""" + +#Setupmockforenvvar(notfound) +mock_getenv.return_value=None + +#Setupmockforconfigfile +mock_home_dir=MagicMock() +mock_path.home.return_value=mock_home_dir +mock_home_dir.__truediv__.return_value=mock_home_dir +mock_home_dir.exists.return_value=True + +#Callfunction +result=get_token() + +#Assertions +assertresultisNone +mock_getenv.assert_called_once_with('PENIFY_API_TOKEN') +mock_file_open.assert_called_once_with(mock_home_dir,'r') + + + + diff --git a/docs345/xml/test__doc__commands_8py.xml b/docs345/xml/test__doc__commands_8py.xml new file mode 100644 index 0000000..46e88a8 --- /dev/null +++ b/docs345/xml/test__doc__commands_8py.xml @@ -0,0 +1,372 @@ + + + + test_doc_commands.py + tests + tests::test_doc_commands + + + + + +importpytest +importsys +importos +fromargparseimportArgumentParser +fromunittest.mockimportpatch,MagicMock + +sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(__file__),'..'))) + +frompenify_hook.commands.doc_commandsimport( +generate_doc, +setup_docgen_parser, +handle_docgen +) + + +@patch('penify_hook.file_analyzer.FileAnalyzerGenHook') +@patch('penify_hook.git_analyzer.GitDocGenHook') +@patch('penify_hook.folder_analyzer.FolderAnalyzerGenHook') +@patch('penify_hook.api_client.APIClient') +@patch('penify_hook.commands.doc_commands.os.getcwd') +deftest_generate_doc_no_location(mock_getcwd,mock_api_client, +mock_folder_analyzer,mock_file_analyzer, +mock_git_analyzer): +"""Testfunctiontogeneratedocumentationwithoutlocationinformation. + +ThisfunctionsetsupmocksfortheAPIclient,currentworking +directory,andGitanalyzer.Itthencallsthe`generate_doc`function +withafakeAPIURLandtoken.Thefunctionisexpectedtoinitialize +theAPIclient,configuretheGitanalyzer,andrunitwithoutany +locationinformation. + +Args: +mock_getcwd(MagicMock):Mockforos.getcwd(). +mock_api_client(MagicMock):MockforcreatinganAPIclient. +mock_folder_analyzer(MagicMock):Mockforfolderanalysis. +mock_file_analyzer(MagicMock):Mockforfileanalysis. +mock_git_analyzer(MagicMock):MockforGitanalyzersetup. +""" + +#Setup +mock_api_instance=MagicMock() +mock_api_client.return_value=mock_api_instance +mock_getcwd.return_value='/fake/current/dir' +mock_git_instance=MagicMock() +mock_git_analyzer.return_value=mock_git_instance + +#Callfunction +generate_doc('http://api.example.com','fake-token',None) + +#Assertions +mock_api_client.assert_called_once_with('http://api.example.com','fake-token') +mock_git_analyzer.assert_called_once_with('/fake/current/dir',mock_api_instance) +mock_git_instance.run.assert_called_once() +#mock_file_analyzer.assert_not_called() +#mock_folder_analyzer.assert_not_called() + + +@patch('penify_hook.git_analyzer.GitDocGenHook') +@patch('penify_hook.folder_analyzer.FolderAnalyzerGenHook') +@patch('penify_hook.api_client.APIClient') +@patch('penify_hook.api_client.APIClient') +deftest_generate_doc_file_location(mock_api_client,mock_folder_analyzer, +mock_file_analyzer,mock_git_analyzer): +"""Testgeneratingadocumentationfilelocation. + +Thisfunctionteststheprocessofgeneratingadocumentationfile +locationusingmockobjectsforAPIclient,folderanalyzer,file +analyzer,andGitanalyzer.Itsetsupthenecessarymocks,callsthe +`generate_doc`functionwithspecifiedparameters,andassertsthatthe +appropriatemethodsonthemockobjectsarecalledasexpected. + +Args: +mock_api_client(MagicMock):MockobjectfortheAPIclient. +mock_folder_analyzer(MagicMock):Mockobjectforthefolderanalyzer. +mock_file_analyzer(MagicMock):Mockobjectforthefileanalyzer. +mock_git_analyzer(MagicMock):MockobjectfortheGitanalyzer. +""" + +#Setup +mock_api_instance=MagicMock() +mock_api_client.return_value=mock_api_instance +mock_file_instance=MagicMock() +mock_file_analyzer.return_value=mock_file_instance + +#Callfunction +generate_doc('http://api.example.com','fake-token','example.py') + +#Assertions +mock_api_client.assert_called_once_with('http://api.example.com','fake-token') +mock_file_analyzer.assert_called_once_with('example.py',mock_api_instance) +mock_file_instance.run.assert_called_once() +mock_git_analyzer.assert_not_called() +mock_folder_analyzer.assert_not_called() + + +@patch('penify_hook.commands.doc_commands.GitDocGenHook') +@patch('penify_hook.commands.doc_commands.FileAnalyzerGenHook') +@patch('penify_hook.commands.doc_commands.FolderAnalyzerGenHook') +@patch('penify_hook.api_client.APIClient') +deftest_generate_doc_folder_location(mock_api_client,mock_folder_analyzer, +mock_file_analyzer,mock_git_analyzer): +"""Testthefunctiontogeneratedocumentationforafolderlocation. + +ItsetsupmockobjectsforAPIclient,folderanalyzer,fileanalyzer, +andGitanalyzer,thencallsthe`generate_doc`functionwithspecified +parameters.Finally,itassertsthatthecorrectmethodsonthemock +objectswerecalledasexpected. + +Args: +mock_api_client(MagicMock):MockobjectfortheAPIclient. +mock_folder_analyzer(MagicMock):Mockobjectforthefolderanalyzer. +mock_file_analyzer(MagicMock):Mockobjectforthefileanalyzer. +mock_git_analyzer(MagicMock):MockobjectfortheGitanalyzer. +""" + +#Setup +mock_api_instance=MagicMock() +mock_api_client.return_value=mock_api_instance +mock_folder_instance=MagicMock() +mock_folder_analyzer.return_value=mock_folder_instance + +#Callfunction +generate_doc('http://api.example.com','fake-token','src') + +#Assertions +mock_api_client.assert_called_once_with('http://api.example.com','fake-token') +mock_folder_analyzer.assert_called_once_with('src',mock_api_instance) +mock_folder_instance.run.assert_called_once() +mock_git_analyzer.assert_not_called() +mock_file_analyzer.assert_not_called() + + +@patch('sys.exit') +@patch('penify_hook.commands.doc_commands.GitDocGenHook') +@patch('penify_hook.api_client.APIClient') +deftest_generate_doc_error_handling(mock_api_client,mock_git_analyzer,mock_exit): +"""Generateadocumentationstringfortheprovidedcodesnippetusing +GoogleDocstringstyle. + +Shortonelinedescription:Testfunctiontoensurepropererror +handlingduringAPIcallswithGitAnalyzer.Multilinelongdescription: +Thistestfunctionisdesignedtoverifythatthegenerate_docfunction +handlesexceptionscorrectlywhenanerroroccursduringAPIinteraction +withGitAnalyzer.ItsetsupamockAPIclientandamockGitanalyzer, +causingtheanalyzertoraiseanexceptiontosimulateafailure +condition.Thefunctionthenassertsthattheexitcodeissetto1when +theerrorhandlingmechanismisinvoked. + +Args: +mock_api_client(MagicMock):AmockobjectsimulatingtheAPIclient. +mock_git_analyzer(MagicMock):AmockobjectsimulatingtheGitanalyzer,configuredtoraisean +exception. +mock_exit(MagicMock):Amockobjectrepresentingtheexitfunction,whichshouldbecalled +withanerrorcode. +""" + +#Setup +mock_api_instance=MagicMock() +mock_api_client.return_value=mock_api_instance +mock_git_analyzer.side_effect=Exception("Testerror") + +#Callfunction +generate_doc('http://api.example.com','fake-token',None) + +#Assertions +mock_exit.assert_called_once_with(1) + + +deftest_setup_docgen_parser(): +"""Testthesetup_docgen_parserfunctiontoensureitproperlyconfigures +theArgumentParserfordocgenoptions. + +Itverifiesthattheparsercorrectlysetsupdocgenoptionsandhandles +differentsubcommandslike'install-hook'and'uninstall-hook'. +""" + +parser=ArgumentParser() +setup_docgen_parser(parser) + +#Checkthatdocgenoptionsareproperlysetup +args=parser.parse_args(['-l','test_location']) +assertargs.location=='test_location' + +#Checkinstall-hooksubcommand +args=parser.parse_args(['install-hook','-l','hook_location']) +assertargs.docgen_subcommand=='install-hook' +assertargs.location=='hook_location' + +#Checkuninstall-hooksubcommand +args=parser.parse_args(['uninstall-hook','-l','hook_location']) +assertargs.docgen_subcommand=='uninstall-hook' +assertargs.location=='hook_location' + + +@patch('penify_hook.commands.doc_commands.install_git_hook') +@patch('penify_hook.commands.doc_commands.uninstall_git_hook') +@patch('penify_hook.commands.doc_commands.generate_doc') +@patch('penify_hook.commands.doc_commands.get_token') +@patch('sys.exit') +deftest_handle_docgen_install_hook(mock_exit,mock_get_token,mock_generate_doc, +mock_uninstall_hook,mock_install_hook): +"""Testthehandlingofthe'install-hook'subcommand. + +Thisfunctionsetsupamockenvironmentwhereitsimulatesthe +executionofthe'install-hook'subcommand.Itverifiesthatthe +`mock_install_hook`iscalledwiththecorrectarguments,while +`mock_generate_doc`and`mock_uninstall_hook`arenotcalled. + +Args: +mock_exit(MagicMock):Mockobjectforsys.exit. +mock_get_token(MagicMock):Mockobjecttosimulatefetchingatoken. +mock_generate_doc(MagicMock):Mockobjecttosimulategeneratingdocumentation. +mock_uninstall_hook(MagicMock):Mockobjecttosimulateuninstallingahook. +mock_install_hook(MagicMock):Mockobjecttosimulateinstallingahook. +""" + +#Setup +mock_get_token.return_value='fake-token' + +#Testinstall-hooksubcommand +args=MagicMock(docgen_subcommand='install-hook',location='hook_location') +handle_docgen(args) +mock_install_hook.assert_called_once_with('hook_location','fake-token') +mock_generate_doc.assert_not_called() +mock_uninstall_hook.assert_not_called() + + +@patch('penify_hook.commands.doc_commands.install_git_hook') +@patch('penify_hook.commands.doc_commands.uninstall_git_hook') +@patch('penify_hook.commands.doc_commands.generate_doc') +@patch('penify_hook.commands.doc_commands.get_token') +@patch('sys.exit') +deftest_handle_docgen_uninstall_hook(mock_exit,mock_get_token,mock_generate_doc, +mock_uninstall_hook,mock_install_hook): +"""Testtheuninstall-hooksubcommandofthehandle_docgenfunction. +Thistestcasesetsupamockenvironmentandverifiesthatthe +uninstall-hookiscalledwiththecorrectlocation,whilegenerate_doc +andinstall_hookarenotcalled. + +Args: +mock_exit(MagicMock):Amockfortheexitfunction. +mock_get_token(MagicMock):Amockfortheget_tokenfunction. +mock_generate_doc(MagicMock):Amockforthegenerate_docfunction. +mock_uninstall_hook(MagicMock):Amockfortheuninstall_hookfunction. +mock_install_hook(MagicMock):Amockfortheinstall_hookfunction. +""" + +#Setup +mock_get_token.return_value='fake-token' + +#Testuninstall-hooksubcommand +args=MagicMock(docgen_subcommand='uninstall-hook',location='hook_location') +handle_docgen(args) +mock_uninstall_hook.assert_called_once_with('hook_location') +mock_generate_doc.assert_not_called() +mock_install_hook.assert_not_called() + + +@patch('penify_hook.commands.doc_commands.install_git_hook') +@patch('penify_hook.commands.doc_commands.uninstall_git_hook') +@patch('penify_hook.commands.doc_commands.generate_doc') +@patch('penify_hook.commands.doc_commands.get_token') +deftest_handle_docgen_generate(mock_get_token,mock_generate_doc, +mock_uninstall_hook,mock_install_hook): +"""Testthedirectdocumentationgenerationfunctionality. + +Thisfunctionteststhe`handle_docgen`functionwhennosubcommandis +provided.Itverifiesthatthedocumentgenerationhookiscalledand +theuninstallandinstallhooksarenotcalled. + +Args: +mock_get_token(MagicMock):Mockedfunctiontogetauthenticationtoken. +mock_generate_doc(MagicMock):Mockedfunctionforgeneratingdocumentation. +mock_uninstall_hook(MagicMock):Mockedfunctionforuninstallingthedocumentgenerationhook. +mock_install_hook(MagicMock):Mockedfunctionforinstallingthedocumentgenerationhook. +""" + +#Setup +mock_get_token.return_value='fake-token' + +#Testdirectdocumentationgeneration +args=MagicMock(docgen_subcommand=None,location='doc_location') +handle_docgen(args) +mock_generate_doc.assert_called_once() +mock_install_hook.assert_not_called() +mock_uninstall_hook.assert_not_called() + + +@patch('penify_hook.commands.doc_commands.get_token') +@patch('sys.exit') +deftest_handle_docgen_no_token(mock_exit,mock_get_token): +"""Testthebehaviorofthe`handle_docgen`functionwhennotokenis +provided. + +Thisfunctionassertsthatifnotokenisreturnedby`mock_get_token`, +the`handle_docgen`functionwillcall`mock_exit`withastatuscodeof +1. + +Args: +mock_exit(MagicMock):AMagicMockobjectsimulatingthe`exit`function. +mock_get_token(MagicMock):AMagicMockobjectsimulatingthe`get_token`function. +""" + +#Testwithnotoken +mock_get_token.return_value=None +args=MagicMock(docgen_subcommand=None,location='doc_location') +handle_docgen(args) +mock_exit.assert_called_once_with(1) + + +@patch('penify_hook.commands.doc_commands.os.getcwd') +@patch('penify_hook.api_client.APIClient') +deftest_generate_doc_with_file_exception(mock_api_client,mock_getcwd): +"""GeneratedocumentationfromaPythonsourcefile. + +ThisfunctionreadsaPythonfileandgeneratesadocstringbasedonits +content.ItusesmockobjectstosimulateAPIcallsanddirectory +operationsduringtesting. + +Args: +mock_api_client(unittest.mock.MagicMock):AmockobjectforsimulatingAPIclientbehavior. +mock_getcwd(unittest.mock.MagicMock):Amockobjectforsimulatingthecurrentworkingdirectoryfunction. +""" + +#Setup +mock_api_client.side_effect=Exception("APIerror") +mock_getcwd.return_value='/fake/current/dir' + +#Testfilelocationwithexception +withpytest.raises(SystemExit): +generate_doc('http://api.example.com','fake-token','example.py') + + +@patch('penify_hook.commands.doc_commands.os.getcwd') +@patch('penify_hook.api_client.APIClient') +deftest_generate_doc_with_folder_exception(mock_api_client,mock_getcwd): +"""GeneratedocumentationfromagivenAPIendpointandsaveittoa +folder. + +ThisfunctionfetchesdatafromthespecifiedAPIendpoint,processes +it,andsavesthegenerateddocumentationintheprovidedfolder.Ifan +erroroccursduringthefetchingprocess,aSystemExitexceptionis +raisedwithanappropriatemessage. + +Args: +api_url(str):TheURLoftheAPIendpointfromwhichdatawillbefetched. +token(str):TheauthenticationtokenrequiredtoaccesstheAPI. +folder_path(str):Thepathtothefolderwherethedocumentationwillbesaved. +""" + +#Setup +mock_api_client.side_effect=Exception("APIerror") +mock_getcwd.return_value='/fake/current/dir' + +#Testfolderlocationwithexception +withpytest.raises(SystemExit): +generate_doc('http://api.example.com','fake-token','src_folder') + + + + diff --git a/docs345/xml/test__web__config_8py.xml b/docs345/xml/test__web__config_8py.xml new file mode 100644 index 0000000..9482cac --- /dev/null +++ b/docs345/xml/test__web__config_8py.xml @@ -0,0 +1,110 @@ + + + + test_web_config.py + tests::test_web_config::TestWebConfig + tests + tests::test_web_config + + + + + +importpytest +importjson +importhttp.server +importthreading +importsocketserver +importtime +fromunittest.mockimportpatch,MagicMock,mock_open +importwebbrowser + +frompenify_hook.commands.config_commandsimportconfig_llm_web,config_jira_web + + +classTestWebConfig: + +@patch('webbrowser.open') +@patch('socketserver.TCPServer') +@patch('pkg_resources.resource_filename') +deftest_config_llm_web_server_setup(self,mock_resource_filename,mock_server,mock_webbrowser): +"""SetupandtestthewebserverconfigurationforanLLM(LargeLanguage +Model)webinterface. + +Thisfunctionconfiguresamockwebserverfortestingpurposes, +includingsettingupresourcefilenames,mockingserverbehavior,and +verifyingthatthewebbrowserisopenedandtheserverstarts +correctly.Thefunctionusesvariousmockstosimulateexternal +dependenciessuchas`resource_filename`and`server`. + +Args: +mock_resource_filename(MagicMock):AMagicMockobjectsimulatingthe`resource_filename`function. +mock_server(MagicMock):AMagicMockobjectsimulatingthecontextmanagerforthewebserver. +mock_webbrowser(MagicMock):AMagicMockobjectsimulatingthe`webbrowser`module. +""" + +#Setupmocks +mock_resource_filename.return_value='mock/template/path' +mock_server_instance=MagicMock() +mock_server.return_value.__enter__.return_value=mock_server_instance + +#Mocktheserve_forevermethodtostopafterbeingcalledonce +defstop_server_after_call(): +mock_server_instance.shutdown() +mock_server_instance.serve_forever.side_effect=stop_server_after_call + +#Callfunctionwithpatchedwebbrowser +withpatch('builtins.print'):#Suppressprintstatements +config_llm_web() + +#Verifywebbrowserwasopened +mock_webbrowser.assert_called_once() +assertmock_webbrowser.call_args[0][0].startswith('http://localhost:') + +#Verifyserverwasstarted +mock_server.assert_called_once() +mock_server_instance.serve_forever.assert_called_once() + +@patch('webbrowser.open') +@patch('socketserver.TCPServer') +@patch('pkg_resources.resource_filename') +deftest_config_jira_web_server_setup(self,mock_resource_filename,mock_server,mock_webbrowser): +"""TesttheconfigurationandsetupofaJIRAwebserver. + +ThisfunctionteststheentireprocessofsettingupaJIRAwebserver, +includingmockingnecessaryresources,configuringtheservertoshut +downafterhandlingonerequest,andverifyingthatthewebbrowseris +openedwiththecorrectURL.Thefunctionusesseveralmockstosimulate +externaldependenciessuchasresourcefiles,servers,andwebbrowsers. + +Args: +mock_resource_filename(MagicMock):AMagicMockobjectforsimulatingthe`resource_filename`function. +mock_server(MagicMock):AMagicMockobjectforsimulatingtheserversetup. +mock_webbrowser(MagicMock):AMagicMockobjectforsimulatingthewebbrowseropening. +""" + +#Setupmocks +mock_resource_filename.return_value='mock/template/path' +mock_server_instance=MagicMock() +mock_server.return_value.__enter__.return_value=mock_server_instance + +#Mocktheserve_forevermethodtostopafterbeingcalledonce +defstop_server_after_call(): +mock_server_instance.shutdown() +mock_server_instance.serve_forever.side_effect=stop_server_after_call + +#Callfunctionwithpatchedwebbrowser +withpatch('builtins.print'):#Suppressprintstatements +config_jira_web() + +#Verifywebbrowserwasopened +mock_webbrowser.assert_called_once() +assertmock_webbrowser.call_args[0][0].startswith('http://localhost:') + +#Verifyserverwasstarted +mock_server.assert_called_once() +mock_server_instance.serve_forever.assert_called_once() + + + + diff --git a/docs345/xml/tests_2____init_____8py.xml b/docs345/xml/tests_2____init_____8py.xml new file mode 100644 index 0000000..b5fdf08 --- /dev/null +++ b/docs345/xml/tests_2____init_____8py.xml @@ -0,0 +1,15 @@ + + + + __init__.py + tests + + + + + +#EmptyfiletomaketestsdirectoryaproperPythonpackage + + + + diff --git a/docs345/xml/ui__utils_8py.xml b/docs345/xml/ui__utils_8py.xml new file mode 100644 index 0000000..52bf215 --- /dev/null +++ b/docs345/xml/ui__utils_8py.xml @@ -0,0 +1,263 @@ + + + + ui_utils.py + penify_hook + penify_hook::ui_utils + + + + + +""" +UIutilitiesforPenifyCLI. + +ThismoduleprovidesutilityfunctionsforconsistentUIformatting, +coloredoutput,andprogressindicatorsacrossthePenifyCLIapplication. +""" +importos +fromcoloramaimportFore,Style,init +fromtqdmimporttqdm + +#Initializecoloramaforcross-platformcoloredterminaloutput +init(autoreset=True) + +#Colorconstantsfordifferentmessagetypes +INFO_COLOR=Fore.CYAN +SUCCESS_COLOR=Fore.GREEN +WARNING_COLOR=Fore.YELLOW +ERROR_COLOR=Fore.RED +HIGHLIGHT_COLOR=Fore.BLUE +NEUTRAL_COLOR=Fore.WHITE + +#Statussymbols +SUCCESS_SYMBOL="✓" +WARNING_SYMBOL="○" +ERROR_SYMBOL="✗" +PROCESSING_SYMBOL="⟳" + +defformat_info(message): +"""Formataninformationalmessagewithappropriatecolor. + +Args: +message(str):Thetextoftheinformationalmessagetobeformatted. + +Returns: +str:Theformattedinformationalmessagewiththespecifiedcolor. +""" +returnf"{INFO_COLOR}{message}{Style.RESET_ALL}" + +defformat_success(message): +"""Formatasuccessmessagewithappropriatecolor. + +ThisfunctiontakesamessageasinputandwrapsitinANSIescapecodes +todisplayitingreen,indicatingasuccessfuloperation.The +Style.RESET_ALLisappliedattheendtoensurethatanysubsequenttext +isdisplayedinthedefaultstyle. + +Args: +message(str):Themessagetobeformattedasasuccessmessage. + +Returns: +str:Theformattedsuccessmessagewithgreencolorandresetstyle. +""" +returnf"{SUCCESS_COLOR}{message}{Style.RESET_ALL}" + +defformat_warning(message): +"""Formatawarningmessagewithappropriatecolor. + +Args: +message(str):Thewarningmessagetobeformatted. + +Returns: +str:Theformattedwarningmessagewiththespecifiedcolor. +""" +returnf"{WARNING_COLOR}{message}{Style.RESET_ALL}" + +defformat_error(message): +"""Formatanerrormessagewithappropriatecolor. + +ThisfunctiontakesaplainerrormessageandwrapsitinANSIescape +codestoapplythespecifiederrorcolor,ensuringthattheerror +messageisvisuallydistinctwhenoutput.Thefunctionsupportsvarious +errorcolorsdefinedbyconstantslike`ERROR_COLOR`. + +Args: +message(str):Theplaintexterrormessagetobeformatted. + +Returns: +str:Theformattederrormessagewiththeerrorcolorapplied. +""" +returnf"{ERROR_COLOR}{message}{Style.RESET_ALL}" + +defformat_highlight(message): +"""Formatahighlightedmessagewithappropriatecolor. + +Args: +message(str):Themessagetobeformattedandhighlighted. + +Returns: +str:Theformattedmessagewithappliedhighlightstyle. +""" +returnf"{HIGHLIGHT_COLOR}{message}{Style.RESET_ALL}" + +defformat_file_path(file_path): +"""Formatafilepathwithappropriatecolor. + +ThisfunctiontakesafilepathasinputandwrapsitinANSIescape +codestoapplyawarningcolor.Theoriginalfilepathisthenresetto +defaultstyleusingStyle.RESET_ALL. + +Args: +file_path(str):Thefilepathtobeformatted. + +Returns: +str:Theformattedfilepathwiththewarningcolorapplied. +""" +returnf"{WARNING_COLOR}{file_path}{Style.RESET_ALL}" + +defprint_info(message): +"""Printaninformationalmessagewithappropriateformatting. + +Thisfunctiontakesastringmessageasinputandprintsitina +formattedmanner.Itutilizesthe`format_info`functiontoapplyany +necessaryformattingbeforeprinting. + +Args: +message(str):Themessagetobeprinted. +""" +print(format_info(message)) + +defprint_success(message): +"""Printaformattedsuccessmessage. + +Thisfunctiontakesastring`message`andprintsitasaformatted +successmessage.Theformattingincludesaddingaprefix"Success:"to +themessageandenclosingitwithinasterisksforemphasis. + +Args: +message(str):Themessagetobeprintedasasuccessmessage. +""" +print(format_success(message)) + +defprint_warning(message): +"""Printawarningmessagewithappropriateformatting. + +Thisfunctiontakesawarningmessageasinputandprintsitwith +formattedoutput.Theformattingmayincludecolor,timestamp,orother +stylestoemphasizethatitisawarning. + +Args: +message(str):Thewarningmessagetobeprinted. +""" +print(format_warning(message)) + +defprint_error(message): +"""Printanerrormessagewithappropriateformatting. + +Thisfunctiontakesastringmessage,formatsitasanerrormessage, +andthenprintsit.Theformattingtypicallyincludesprefixingthe +messagewith"Error:"toclearlyindicatethatitisanerror. + +Args: +message(str):Theerrormessagetobeprinted. +""" +print(format_error(message)) + +defprint_processing(file_path): +"""Printaprocessingmessageforaspecifiedfile. + +Thisfunctiontakesafilepath,formatsitusing`format_file_path`, +andthenprintsaformattedmessageindicatingthatthefileisbeing +processed.Theformattedpathishighlightedusing`format_highlight`. + +Args: +file_path(str):Thepathofthefiletobeprocessed. +""" +formatted_path=format_file_path(file_path) +print(f"\n{format_highlight(f'Processingfile:{formatted_path}')}") + +defprint_status(status,message): +"""Printastatusmessagewithanappropriatesymbol. + +Thisfunctiontakesastatusandamessage,thenprintsthemwitha +coloredsymbolthatcorrespondstothegivenstatus.Theavailable +statusesare'success','warning','error',andanyothervaluewill +defaulttoaprocessingindicator. + +Args: +status(str):Thestatustype('success','warning','error')oranotherstring. +message(str):Themessagetobedisplayedalongwiththesymbol. +""" +ifstatus=='success': +print(f"{SUCCESS_COLOR}{SUCCESS_SYMBOL}{message}{Style.RESET_ALL}") +elifstatus=='warning': +print(f"{NEUTRAL_COLOR}{WARNING_SYMBOL}{message}{Style.RESET_ALL}") +elifstatus=='error': +print(f"{ERROR_COLOR}{ERROR_SYMBOL}{message}{Style.RESET_ALL}") +else: +print(f"{PROCESSING_SYMBOL}{message}") + +defcreate_progress_bar(total,desc="Processing",unit="item"): +"""Createatqdmprogressbarwithconsistentstyling. + +Args: +total(int):Totalnumberofitemstoprocess. +desc(str):Descriptionfortheprogressbar.Defaultsto"Processing". +unit(str):Unitlabelfortheprogressitems.Defaultsto"item". + +Returns: +tqdm:Aconfiguredtqdmprogressbarinstance. +""" +returntqdm( +total=total, +desc=format_info(desc), +unit=unit, +ncols=80, +ascii=True +) + +defcreate_stage_progress_bar(stages,desc="Processing"): +"""Createatqdmprogressbarforprocessingstageswithconsistent +styling. + +Thisfunctioninitializesandreturnsatqdmprogressbarobjectfor +trackingtheprogressthroughaseriesofstages.Italsoprovidesa +descriptionfortheprogressbartoenhanceitsusability. + +Args: +stages(list):Alistofstringsrepresentingindividualstagesintheprocess. +desc(str?):Adescriptionfortheprogressbar.Defaultsto"Processing". + +Returns: +tuple:Atuplecontainingthetqdmprogressbarobjectandthelistofstages. +""" +pbar=tqdm( +total=len(stages), +desc=format_info(desc), +unit="step", +ncols=80, +ascii=True +) +returnpbar,stages + +defupdate_stage(pbar,stage_name): +"""Updatetheprogressbarwithanewstagename. + +Thisfunctionupdatestheprovidedtqdmprogressbartoreflectthe +currentstageofaprocess.Itclearsanyexistingpostfixandsetsa +newdescriptionbasedontheprovidedstagename.Thedisplayisthen +refreshedtoensurethattheupdateisvisibleimmediately. + +Args: +pbar(tqdm):Theprogressbarobjecttobeupdated. +stage_name(str):Astringrepresentingthecurrentstageoftheprocess. +""" +#Forcerefreshwithacustomdescriptionandensureit'svisible +pbar.set_postfix_str("")#Clearanyexistingpostfix +pbar.set_description_str(f"{format_info(stage_name)}") +pbar.refresh()#Forcerefreshthedisplay + + + + diff --git a/docs345/xml/utils_8py.xml b/docs345/xml/utils_8py.xml new file mode 100644 index 0000000..ba7e019 --- /dev/null +++ b/docs345/xml/utils_8py.xml @@ -0,0 +1,99 @@ + + + + utils.py + penify_hook::utils::GitRepoNotFoundError + penify_hook + penify_hook::utils + + + + + +importlogging +importos +importre + +fromgitimportRepo +logger=logging.getLogger(__name__) + + +classGitRepoNotFoundError(Exception): +pass + + +defget_repo_details(repo:Repo): +"""DeterminethedetailsofarepositoryincludingitsremoteURL,hostingservice,organizationname,andrepositoryname.""" +remote_url=None +hosting_service="Unknown" +org_name=None +repo_name=None + +try: +#GettheremoteURL +remote=repo.remotes.origin.url +remote_url=remote + +#DeterminethehostingservicebasedontheURL +if"github.com"inremote: +hosting_service="GITHUB" +match=re.match(r".*github\.com[:/](.*?)/(.*?)(\.git)?$",remote) +elif"dev.azure.com"inremote: +hosting_service="AZUREDEVOPS" +match=re.match(r".*dev\.azure\.com/(.*?)/(.*?)/_git/(.*?)(\.git)?$",remote) +elif"visualstudio.com"inremote: +hosting_service="AZUREDEVOPS" +match=re.match(r".*@(.*?)\.visualstudio\.com/(.*?)/_git/(.*?)(\.git)?$",remote) +elif"bitbucket.org"inremote: +hosting_service="BITBUCKET" +match=re.match(r".*bitbucket\.org[:/](.*?)/(.*?)(\.git)?$",remote) +elif"gitlab.com"inremote: +hosting_service="GITLAB" +match=re.match(r".*gitlab\.com[:/](.*?)/(.*?)(\.git)?$",remote) +else: +hosting_service="UnknownHostingService" +match=None + +ifmatch: +org_name=match.group(1) +repo_name=match.group(2) + +#ForAzureDevOps,adjustthegroupindices +ifhosting_service=="AZUREDEVOPS": +repo_name=match.group(3) + +exceptExceptionase: +logger.error(f"ErrordeterminingGITprovider:{e}") + +return{ +"organization_name":org_name, +"repo_name":repo_name, +"vendor":hosting_service +} + +defrecursive_search_git_folder(folder_path): +"""Recursivelysearchesfora.gitfolderstartingfromthegivendirectory.""" +ifos.path.isdir(folder_path): +if'.git'inos.listdir(folder_path): +returnfolder_path +#reachedtherootofthefilesystem +eliffolder_path==os.path.dirname(folder_path): +returnNone +else: +returnrecursive_search_git_folder(os.path.dirname(folder_path)) + +deffind_git_parent(path): + +"""Traverseupfromthegivenpathtofindthenearestdirectorycontaininga.gitsubdirectory.""" +current_dir=os.path.abspath(path) + +whilecurrent_dir!=os.path.dirname(current_dir):#Traverseuptotherootdirectory +ifos.path.isdir(os.path.join(current_dir,".git")): +returncurrent_dir#Returntheparentfoldercontainingthe.gitdirectory +current_dir=os.path.dirname(current_dir) + +raiseGitRepoNotFoundError(f"NoGitrepositoryfoundinthepathoranyofitsparentdirectories:{path}") + + + + diff --git a/docs345/xml/xml.xsd b/docs345/xml/xml.xsd new file mode 100644 index 0000000..9f80fe1 --- /dev/null +++ b/docs345/xml/xml.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + +