gitflow-analytics 1.0.1__py3-none-any.whl → 1.3.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. gitflow_analytics/__init__.py +11 -11
  2. gitflow_analytics/_version.py +2 -2
  3. gitflow_analytics/classification/__init__.py +31 -0
  4. gitflow_analytics/classification/batch_classifier.py +752 -0
  5. gitflow_analytics/classification/classifier.py +464 -0
  6. gitflow_analytics/classification/feature_extractor.py +725 -0
  7. gitflow_analytics/classification/linguist_analyzer.py +574 -0
  8. gitflow_analytics/classification/model.py +455 -0
  9. gitflow_analytics/cli.py +4490 -378
  10. gitflow_analytics/cli_rich.py +503 -0
  11. gitflow_analytics/config/__init__.py +43 -0
  12. gitflow_analytics/config/errors.py +261 -0
  13. gitflow_analytics/config/loader.py +904 -0
  14. gitflow_analytics/config/profiles.py +264 -0
  15. gitflow_analytics/config/repository.py +124 -0
  16. gitflow_analytics/config/schema.py +441 -0
  17. gitflow_analytics/config/validator.py +154 -0
  18. gitflow_analytics/config.py +44 -398
  19. gitflow_analytics/core/analyzer.py +1320 -172
  20. gitflow_analytics/core/branch_mapper.py +132 -132
  21. gitflow_analytics/core/cache.py +1554 -175
  22. gitflow_analytics/core/data_fetcher.py +1193 -0
  23. gitflow_analytics/core/identity.py +571 -185
  24. gitflow_analytics/core/metrics_storage.py +526 -0
  25. gitflow_analytics/core/progress.py +372 -0
  26. gitflow_analytics/core/schema_version.py +269 -0
  27. gitflow_analytics/extractors/base.py +13 -11
  28. gitflow_analytics/extractors/ml_tickets.py +1100 -0
  29. gitflow_analytics/extractors/story_points.py +77 -59
  30. gitflow_analytics/extractors/tickets.py +841 -89
  31. gitflow_analytics/identity_llm/__init__.py +6 -0
  32. gitflow_analytics/identity_llm/analysis_pass.py +231 -0
  33. gitflow_analytics/identity_llm/analyzer.py +464 -0
  34. gitflow_analytics/identity_llm/models.py +76 -0
  35. gitflow_analytics/integrations/github_integration.py +258 -87
  36. gitflow_analytics/integrations/jira_integration.py +572 -123
  37. gitflow_analytics/integrations/orchestrator.py +206 -82
  38. gitflow_analytics/metrics/activity_scoring.py +322 -0
  39. gitflow_analytics/metrics/branch_health.py +470 -0
  40. gitflow_analytics/metrics/dora.py +542 -179
  41. gitflow_analytics/models/database.py +986 -59
  42. gitflow_analytics/pm_framework/__init__.py +115 -0
  43. gitflow_analytics/pm_framework/adapters/__init__.py +50 -0
  44. gitflow_analytics/pm_framework/adapters/jira_adapter.py +1845 -0
  45. gitflow_analytics/pm_framework/base.py +406 -0
  46. gitflow_analytics/pm_framework/models.py +211 -0
  47. gitflow_analytics/pm_framework/orchestrator.py +652 -0
  48. gitflow_analytics/pm_framework/registry.py +333 -0
  49. gitflow_analytics/qualitative/__init__.py +29 -0
  50. gitflow_analytics/qualitative/chatgpt_analyzer.py +259 -0
  51. gitflow_analytics/qualitative/classifiers/__init__.py +13 -0
  52. gitflow_analytics/qualitative/classifiers/change_type.py +742 -0
  53. gitflow_analytics/qualitative/classifiers/domain_classifier.py +506 -0
  54. gitflow_analytics/qualitative/classifiers/intent_analyzer.py +535 -0
  55. gitflow_analytics/qualitative/classifiers/llm/__init__.py +35 -0
  56. gitflow_analytics/qualitative/classifiers/llm/base.py +193 -0
  57. gitflow_analytics/qualitative/classifiers/llm/batch_processor.py +383 -0
  58. gitflow_analytics/qualitative/classifiers/llm/cache.py +479 -0
  59. gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py +435 -0
  60. gitflow_analytics/qualitative/classifiers/llm/openai_client.py +403 -0
  61. gitflow_analytics/qualitative/classifiers/llm/prompts.py +373 -0
  62. gitflow_analytics/qualitative/classifiers/llm/response_parser.py +287 -0
  63. gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py +607 -0
  64. gitflow_analytics/qualitative/classifiers/risk_analyzer.py +438 -0
  65. gitflow_analytics/qualitative/core/__init__.py +13 -0
  66. gitflow_analytics/qualitative/core/llm_fallback.py +657 -0
  67. gitflow_analytics/qualitative/core/nlp_engine.py +382 -0
  68. gitflow_analytics/qualitative/core/pattern_cache.py +479 -0
  69. gitflow_analytics/qualitative/core/processor.py +673 -0
  70. gitflow_analytics/qualitative/enhanced_analyzer.py +2236 -0
  71. gitflow_analytics/qualitative/example_enhanced_usage.py +420 -0
  72. gitflow_analytics/qualitative/models/__init__.py +25 -0
  73. gitflow_analytics/qualitative/models/schemas.py +306 -0
  74. gitflow_analytics/qualitative/utils/__init__.py +13 -0
  75. gitflow_analytics/qualitative/utils/batch_processor.py +339 -0
  76. gitflow_analytics/qualitative/utils/cost_tracker.py +345 -0
  77. gitflow_analytics/qualitative/utils/metrics.py +361 -0
  78. gitflow_analytics/qualitative/utils/text_processing.py +285 -0
  79. gitflow_analytics/reports/__init__.py +100 -0
  80. gitflow_analytics/reports/analytics_writer.py +550 -18
  81. gitflow_analytics/reports/base.py +648 -0
  82. gitflow_analytics/reports/branch_health_writer.py +322 -0
  83. gitflow_analytics/reports/classification_writer.py +924 -0
  84. gitflow_analytics/reports/cli_integration.py +427 -0
  85. gitflow_analytics/reports/csv_writer.py +1700 -216
  86. gitflow_analytics/reports/data_models.py +504 -0
  87. gitflow_analytics/reports/database_report_generator.py +427 -0
  88. gitflow_analytics/reports/example_usage.py +344 -0
  89. gitflow_analytics/reports/factory.py +499 -0
  90. gitflow_analytics/reports/formatters.py +698 -0
  91. gitflow_analytics/reports/html_generator.py +1116 -0
  92. gitflow_analytics/reports/interfaces.py +489 -0
  93. gitflow_analytics/reports/json_exporter.py +2770 -0
  94. gitflow_analytics/reports/narrative_writer.py +2289 -158
  95. gitflow_analytics/reports/story_point_correlation.py +1144 -0
  96. gitflow_analytics/reports/weekly_trends_writer.py +389 -0
  97. gitflow_analytics/training/__init__.py +5 -0
  98. gitflow_analytics/training/model_loader.py +377 -0
  99. gitflow_analytics/training/pipeline.py +550 -0
  100. gitflow_analytics/tui/__init__.py +5 -0
  101. gitflow_analytics/tui/app.py +724 -0
  102. gitflow_analytics/tui/screens/__init__.py +8 -0
  103. gitflow_analytics/tui/screens/analysis_progress_screen.py +496 -0
  104. gitflow_analytics/tui/screens/configuration_screen.py +523 -0
  105. gitflow_analytics/tui/screens/loading_screen.py +348 -0
  106. gitflow_analytics/tui/screens/main_screen.py +321 -0
  107. gitflow_analytics/tui/screens/results_screen.py +722 -0
  108. gitflow_analytics/tui/widgets/__init__.py +7 -0
  109. gitflow_analytics/tui/widgets/data_table.py +255 -0
  110. gitflow_analytics/tui/widgets/export_modal.py +301 -0
  111. gitflow_analytics/tui/widgets/progress_widget.py +187 -0
  112. gitflow_analytics-1.3.6.dist-info/METADATA +1015 -0
  113. gitflow_analytics-1.3.6.dist-info/RECORD +122 -0
  114. gitflow_analytics-1.0.1.dist-info/METADATA +0 -463
  115. gitflow_analytics-1.0.1.dist-info/RECORD +0 -31
  116. {gitflow_analytics-1.0.1.dist-info → gitflow_analytics-1.3.6.dist-info}/WHEEL +0 -0
  117. {gitflow_analytics-1.0.1.dist-info → gitflow_analytics-1.3.6.dist-info}/entry_points.txt +0 -0
  118. {gitflow_analytics-1.0.1.dist-info → gitflow_analytics-1.3.6.dist-info}/licenses/LICENSE +0 -0
  119. {gitflow_analytics-1.0.1.dist-info → gitflow_analytics-1.3.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,122 @@
1
+ gitflow_analytics/__init__.py,sha256=yN1dyAUu4l9qX-YNAGRItEf4RFFe-5GQiOntXPIfdxo,683
2
+ gitflow_analytics/_version.py,sha256=9PnCSmhRIvnAdYvd_L43lJY5JxZ9voHOQOlNDFzIYB8,137
3
+ gitflow_analytics/cli.py,sha256=RtXDOZlE3fq-xV0sWIvU_F1Slwr9Ma23CJNIdSrO8s0,207102
4
+ gitflow_analytics/cli_rich.py,sha256=1Heeyadbqpn5d13jtI7jtcrpmbA0BmPY9lnMXrgSncI,19326
5
+ gitflow_analytics/config.py,sha256=XRuxvzLWyn_ML7mDCcuZ9-YFNAEsnt33vIuWxQQ_jxg,1033
6
+ gitflow_analytics/classification/__init__.py,sha256=p8shPUZpGaw7-ivhfAVrPDbSP2LrpvWC1WEsBJIg-PI,969
7
+ gitflow_analytics/classification/batch_classifier.py,sha256=-6--0j_7la-BDKczAtxAclQ69kL0j11vYRnVDZrKW1A,30539
8
+ gitflow_analytics/classification/classifier.py,sha256=U1vpdiMXqGdHR8iHWf_wPdrJxxNRB5By94BDpck8R9g,17750
9
+ gitflow_analytics/classification/feature_extractor.py,sha256=W82vztPQO8-MFw9Yt17K1kXrLZ5lNtuMSwC1NBsZPLQ,23804
10
+ gitflow_analytics/classification/linguist_analyzer.py,sha256=HjLx9mM7hGXtrvMba6osovHJLAacTx9oDmN6CS5w0bE,17687
11
+ gitflow_analytics/classification/model.py,sha256=2KbmFh9MpyvHMcNHbqwUTAAVLHHu3MiTfFIPyZSGa-8,16356
12
+ gitflow_analytics/config/__init__.py,sha256=lzFOHsJGoeDHuu_NEgcSeUFwU0bgV3lnL9w0Pyc4FI0,1037
13
+ gitflow_analytics/config/errors.py,sha256=IBKhAIwJ4gscZFnLDyE3jEp03wn2stPR7JQJXNSIfok,10386
14
+ gitflow_analytics/config/loader.py,sha256=afdr_uQN5BDhK0iEIbUL4O3XbDVtCSEWZ-by_zp8E58,34172
15
+ gitflow_analytics/config/profiles.py,sha256=yUjFAWW6uzOUdi5qlPE-QV9681HigyrLiSJFpL8X9A0,7967
16
+ gitflow_analytics/config/repository.py,sha256=maptMAdCKDsuMAfoTAaTrMPVfVd_tKNLRenvuPe1-t4,4350
17
+ gitflow_analytics/config/schema.py,sha256=NQO2KmaVDaCiPH6kwmMvAOw7cwufSjp3-Gpwl8-ox2U,14636
18
+ gitflow_analytics/config/validator.py,sha256=l7AHjXYJ8wEmyA1rn2WiItZXtAiRb9YBLjFCDl53qKM,5907
19
+ gitflow_analytics/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ gitflow_analytics/core/analyzer.py,sha256=59kGObzjziOb8geFyZMKCUvWmo3hcXE0eTgrjYEc1XA,58736
21
+ gitflow_analytics/core/branch_mapper.py,sha256=1L1ctrhTEqMZ61eS1nZRkcyaarLipeQgotw4HdXcSmM,7407
22
+ gitflow_analytics/core/cache.py,sha256=O3I_1Jbuj3GcnUo6CBe0nEJ_8fxKY2wcxeq9sff-OhY,67807
23
+ gitflow_analytics/core/data_fetcher.py,sha256=eroe7MKA6g9_3Uxs03DSXAYX65Rc6_JyLYlcRi11xPo,52987
24
+ gitflow_analytics/core/identity.py,sha256=k7i-vcRJ2eiTU0_kYGY5QOhxcqnitibTTx7DVONW0kg,31237
25
+ gitflow_analytics/core/metrics_storage.py,sha256=hNXVXjpAaPHYoBFUCj_qR-hs9g8PbQKux_5esyevNEQ,21199
26
+ gitflow_analytics/core/progress.py,sha256=KUQU7ToX63JvPTm8RRy31OmnVeqzc8HfrdGpb2ZvtoY,12509
27
+ gitflow_analytics/core/schema_version.py,sha256=fhYKxerCgPHJoX4SAoJQO38sQcKDNguMEUWSj367Ilc,10660
28
+ gitflow_analytics/extractors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ gitflow_analytics/extractors/base.py,sha256=AKbYkFiMhNxVj7zfNzsJfh0rpyTdNr4Faea3bcZPPBo,1168
30
+ gitflow_analytics/extractors/ml_tickets.py,sha256=ZQpb8s_1HMy7F037UcBd0CTJPZilS-Djxumnlhj_E5E,43177
31
+ gitflow_analytics/extractors/story_points.py,sha256=IggP-Ei832oV9aD08a3li08kmjF3BqyU9i8EgAZcpfs,5324
32
+ gitflow_analytics/extractors/tickets.py,sha256=Ga_wdaViy_Wp8ok9JJ6ZhDYyOHyVdldxhx8PhVCWpx8,39979
33
+ gitflow_analytics/identity_llm/__init__.py,sha256=tpWDwapm6zIyb8LxLO8A6pHlE3wNorT_fBL-Yp9-XnU,250
34
+ gitflow_analytics/identity_llm/analysis_pass.py,sha256=mJUC8Cts2m6vAd_VEXRcZOF1FqHtnma8-N5yqd1Csh0,8787
35
+ gitflow_analytics/identity_llm/analyzer.py,sha256=iYx7CxgYpfiliY0qOtTpoy1GLAM-hvrJdtNuFO9llqc,17336
36
+ gitflow_analytics/identity_llm/models.py,sha256=YcTh1tz0_OgBPqapMzVglBAIUOfG5uPzur72631VFUU,2375
37
+ gitflow_analytics/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ gitflow_analytics/integrations/github_integration.py,sha256=52lyq5GNJIlTXIv7iwrkuxg0firpTcwYtTU9RAn8EIk,13324
39
+ gitflow_analytics/integrations/jira_integration.py,sha256=owGCiCPXKrrcVACjCRjE-U-IXO8xbcLmo9LJijssJdU,28757
40
+ gitflow_analytics/integrations/orchestrator.py,sha256=qbHEAuFCk0FUA487ustkEthwO2qVUtGg10ekKRX8blA,12230
41
+ gitflow_analytics/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ gitflow_analytics/metrics/activity_scoring.py,sha256=h1uj_6dTKpCwNJfsimfaY0TB3Qaexw7I7IEFutoHwUY,12539
43
+ gitflow_analytics/metrics/branch_health.py,sha256=WxQS2IHl81lPCmkxMediHULyl_lQtuGKRAKNEA8yb9A,17401
44
+ gitflow_analytics/metrics/dora.py,sha256=U4Xk0tr7kPcpR7r-PevYBUDtZPkDIG-w_yS2DJOlTrk,27549
45
+ gitflow_analytics/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ gitflow_analytics/models/database.py,sha256=IVSEoAYT-V0EOFlKnrZujZlq_iiFboRr-hN2OnC1Eqs,39925
47
+ gitflow_analytics/pm_framework/__init__.py,sha256=2wEfO1uF6TlsymnKeMJimdLYay3K9rigGThhpGVBA3A,3698
48
+ gitflow_analytics/pm_framework/base.py,sha256=3fXjekfscGy_WslIbyVXdAhWDIIElei9okSyleUJgqU,15247
49
+ gitflow_analytics/pm_framework/models.py,sha256=uikCapq6KGe_zbWymzvNFvJaN38Nld9i9gBJFKTVtNo,7115
50
+ gitflow_analytics/pm_framework/orchestrator.py,sha256=RrcCFkbVHeYiF7CKGPhj5rCl99GjG1Z8-8F-8CDgfAs,27219
51
+ gitflow_analytics/pm_framework/registry.py,sha256=ggUHS3WFsKXifaYPZgY15r2vGZEKyx-G33bjIv0kwJQ,13636
52
+ gitflow_analytics/pm_framework/adapters/__init__.py,sha256=vS5btB-yIwVHZfoFYacWxHk3HszxIMWLnvBUgVDdNDU,1756
53
+ gitflow_analytics/pm_framework/adapters/jira_adapter.py,sha256=Cp4SAqvF6Yu9-HkmjNFMXk5phgCkePj0eKTWhNRtL38,72330
54
+ gitflow_analytics/qualitative/__init__.py,sha256=fwlb_xrv7Gatjylk5wclzckZxyss8K5cdZhhTHMWfYw,1184
55
+ gitflow_analytics/qualitative/chatgpt_analyzer.py,sha256=CHiaGO5ESGCcQ6pJPxfVZI9gTMp_9OD4TTltmgxCypU,11816
56
+ gitflow_analytics/qualitative/enhanced_analyzer.py,sha256=XWN27-hRkxLcQUt_XVejyGkPCkxA1qpHyGyACe2xtw8,92429
57
+ gitflow_analytics/qualitative/example_enhanced_usage.py,sha256=pKKhAjOCwmBaJPzZ8RDl8R4uG23NwFXUUeAqv6oYM2E,14924
58
+ gitflow_analytics/qualitative/classifiers/__init__.py,sha256=lgabpW-_aub_O-1CVbmgeUVEo2jf5O-DK0Y2dF-WrZc,346
59
+ gitflow_analytics/qualitative/classifiers/change_type.py,sha256=3glCIkNxTQAbk0s0Urp4nLp9OXtYzF0-I8SzOEpx9JE,23291
60
+ gitflow_analytics/qualitative/classifiers/domain_classifier.py,sha256=2bEXyKeO2QVCD8nBuSboi3kVSBnZAeNhxtYuPtaBpdQ,15747
61
+ gitflow_analytics/qualitative/classifiers/intent_analyzer.py,sha256=jjCbc0mdNccnLKTRTgZ3HsYka_yD_u-o-p_IGStpjw8,17442
62
+ gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py,sha256=_FqTydUQV9dbJRyRmRC-O7TfKra6HJf91m6vJHPfp_M,21484
63
+ gitflow_analytics/qualitative/classifiers/risk_analyzer.py,sha256=UoSUa0DF2rEK5chA-dzUvWf44w-ofnghS1W6xbEv8KI,15015
64
+ gitflow_analytics/qualitative/classifiers/llm/__init__.py,sha256=QWBt39jmINB_Z2jJMuBiMxmd5Xlgw1v3otAq-0ymLHU,953
65
+ gitflow_analytics/qualitative/classifiers/llm/base.py,sha256=1_GEb-Q5hxj109nvJaZlimAJPyGErovSXV1atbNLyjM,6058
66
+ gitflow_analytics/qualitative/classifiers/llm/batch_processor.py,sha256=oSlJPYOAp-JXQRYVj9PFNSkoiFp8BdZViH-0cNNpo5E,13138
67
+ gitflow_analytics/qualitative/classifiers/llm/cache.py,sha256=5UWRMgz0bOc_GRShE5gvYEzLhxB-VBDkhZKRECNmjOI,16930
68
+ gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py,sha256=2mqWPHo9SrhwZQ0Q_FNViI_M83Rl18sJVg3p1lwkcBM,14902
69
+ gitflow_analytics/qualitative/classifiers/llm/openai_client.py,sha256=845819deLuN6o5gZ2_lakklmmqovp0MWIbAYbuBGO0g,14083
70
+ gitflow_analytics/qualitative/classifiers/llm/prompts.py,sha256=7dLvCb8bQyZGOsQF_ajZpFxaXyHIbtfUfTO2yQJPxJs,12906
71
+ gitflow_analytics/qualitative/classifiers/llm/response_parser.py,sha256=AyGfTpmvpx4QvRKJDWGS3CbylLm2SOAD0nSZVrkGTrM,9931
72
+ gitflow_analytics/qualitative/core/__init__.py,sha256=22tZJDPyYE0k5-9lx_84R2SsZN8PRc_1I1L6prSkoSE,315
73
+ gitflow_analytics/qualitative/core/llm_fallback.py,sha256=-Q1tqy-vqN7kBe_tQN6odJjCGcFzVasS-piwuO1TGRw,24068
74
+ gitflow_analytics/qualitative/core/nlp_engine.py,sha256=c-R0chjKmCif5ilBl3JIURNushVNw5musc8INJhL3cc,14490
75
+ gitflow_analytics/qualitative/core/pattern_cache.py,sha256=H_t759ftWGJC3QQy6dKqdt3Mf2TojWfV6C41eVdPZTo,18537
76
+ gitflow_analytics/qualitative/core/processor.py,sha256=qcyCuw1c6gwYwOCBzMnbch9adOtXvWwb3SeyWRDGMDo,26507
77
+ gitflow_analytics/qualitative/models/__init__.py,sha256=Ro_lAXyt3jfL29xgZ6jn_DvDRv3PZ6myzsrXq_ctqRQ,457
78
+ gitflow_analytics/qualitative/models/schemas.py,sha256=9GRvp_mFOtIRiAbaNjzxq5Lo8PzD-r4F_-sqoyOjN3w,10670
79
+ gitflow_analytics/qualitative/utils/__init__.py,sha256=YGLGiP4WWFO-KnZERJ6uj8M3uJsmizsSeoR1tsoGK0c,319
80
+ gitflow_analytics/qualitative/utils/batch_processor.py,sha256=r0P_SrgDjBoed1K_VRNvxnilh32SBZa1X0symsnWtmg,11697
81
+ gitflow_analytics/qualitative/utils/cost_tracker.py,sha256=GPoO3ywlGqiJkjz6Uca4TVq3UGxz_NwAqP5B6_R6cNQ,12130
82
+ gitflow_analytics/qualitative/utils/metrics.py,sha256=_Gfyfrenxv-ynkSxVnkGpViROCDpDb1EI6K-x461nEk,13054
83
+ gitflow_analytics/qualitative/utils/text_processing.py,sha256=j3fF5K9DYuRauKGIAxnezyGmqedXkR9wIXailkhG0BY,9205
84
+ gitflow_analytics/reports/__init__.py,sha256=bU43ev2EDMKsCEQEzCyZU5yO2ZL4Oymq4N_3YD3pCQg,2156
85
+ gitflow_analytics/reports/analytics_writer.py,sha256=_w7rZrO6RzxqtqC7L3-NvBr074cN8_d88naTYBv7jhU,45217
86
+ gitflow_analytics/reports/base.py,sha256=IjYX7PbnpVyyB6LI6dz_oLd3vtYsu1eBB978X0zIJDE,23203
87
+ gitflow_analytics/reports/branch_health_writer.py,sha256=Yfd4rGQLx1oBK8tA8t_jQ0b3OeTXEb4GJYrPbXHmsBU,13111
88
+ gitflow_analytics/reports/classification_writer.py,sha256=3kyISHrLXUu8h4vtqBfn0N_k9uESfa2dSUX_MYqEQsc,46115
89
+ gitflow_analytics/reports/cli_integration.py,sha256=4znVx9arRT6WQHvbS4MDjJmdg_8HBLdegXGqH00qAqw,15361
90
+ gitflow_analytics/reports/csv_writer.py,sha256=XxyjcUIz3T6tvqUygOymOdzpkfjJgcGxLK6PbJ_QuO8,75685
91
+ gitflow_analytics/reports/data_models.py,sha256=ZUWVzafwT1fBQ2YWM5f4xk0OuWxofy8zwvUrnuJmwhg,14140
92
+ gitflow_analytics/reports/database_report_generator.py,sha256=WoYkCCKfO55UVDTXhZq5jZaJfmT31ruudUob3sKHkyo,17876
93
+ gitflow_analytics/reports/example_usage.py,sha256=MLIkSsbh_8VLXWZSPddoc2BVKXqnemAXD1k7AWcXiXo,11572
94
+ gitflow_analytics/reports/factory.py,sha256=1UutSVProqPS0pEqNik7tqQO55RgfHiN9bjtUiIerBI,15890
95
+ gitflow_analytics/reports/formatters.py,sha256=RFocNTbDwrNCw4IoL5etemWOPeengvDJ-97xzIyxzmU,19274
96
+ gitflow_analytics/reports/html_generator.py,sha256=gl4vhQZb8_oxvDonBP--v_wOXXgn32OCLwwyuzuKncE,62549
97
+ gitflow_analytics/reports/interfaces.py,sha256=XJJxmwhQ3-4iJrDQ1n5r8vFgL4gRgw_3HMpW3RPYrAU,12194
98
+ gitflow_analytics/reports/json_exporter.py,sha256=p-GpOBJsdmvXpwORTy7LLpipFFUzI8eGuNasmKn57kA,114323
99
+ gitflow_analytics/reports/narrative_writer.py,sha256=cCLnIHjXICUqq0Rd2Y20JnXxlOAYRUUDgjZeDj8Dn60,116360
100
+ gitflow_analytics/reports/story_point_correlation.py,sha256=V9fnqNOxJxK00w0Mx69BMpcZgdgQJyja_Pu4qD-SWw0,51210
101
+ gitflow_analytics/reports/weekly_trends_writer.py,sha256=m_TQ6ThSaa5rkAwfQpPRms2Jwgq3RReYwVBsts67cLk,15720
102
+ gitflow_analytics/training/__init__.py,sha256=YT5p7Wm4U8trzLnbS5FASJBWPMKhqp3rlAThjpxWnxo,143
103
+ gitflow_analytics/training/model_loader.py,sha256=xGZLSopGxDhC--2XN6ytRgi2CyjOKY4zS4fZ-ZlO6lM,13245
104
+ gitflow_analytics/training/pipeline.py,sha256=PQegTk_-OsPexVyRDfiy-3Df-7pcs25C4vPASr-HT9E,19951
105
+ gitflow_analytics/tui/__init__.py,sha256=1liMpth2RvUkmKfNUEnYEZkYi2RpYITFMmGKtBBwiUk,126
106
+ gitflow_analytics/tui/app.py,sha256=lZMgnAzfOqv-t3WlqecEgSAigyrfHSUEdwVsNoK4SGY,22029
107
+ gitflow_analytics/tui/screens/__init__.py,sha256=JVnPy-o4V6D2jehliXAbRET9x8zWmHR7PPk2is-l9OM,327
108
+ gitflow_analytics/tui/screens/analysis_progress_screen.py,sha256=FGFJ50-wB1a51XmldP1CqyjFPSGpsXHnRcwzNHeLQ-o,21160
109
+ gitflow_analytics/tui/screens/configuration_screen.py,sha256=QLtTz8xFAGdIxYsRmUyBr4m-1PteAk3_kxfE1UexqgA,19345
110
+ gitflow_analytics/tui/screens/loading_screen.py,sha256=5kh0kKKCa6-NMlZyPfu2fE4ROgmjU8_jA2xCUX3z5iY,14451
111
+ gitflow_analytics/tui/screens/main_screen.py,sha256=6aIzJrDtgXDlgGcW--wQUqncBBa_hcUytiLu76fMALw,11482
112
+ gitflow_analytics/tui/screens/results_screen.py,sha256=_u_gBbgLsemt3zAZq9lyjaTyNz3dUBHRCgv4O0YtYEw,28623
113
+ gitflow_analytics/tui/widgets/__init__.py,sha256=85l6vkJuRGJNvej-nUZZoNg562zl_1JFOlewVer1mLI,259
114
+ gitflow_analytics/tui/widgets/data_table.py,sha256=8fGNG4m7H41vCid3QwCHJa7bd8qu_DKrDf22iCks3XA,8722
115
+ gitflow_analytics/tui/widgets/export_modal.py,sha256=L-XKPOc6u-fow2TudPgDnC0kXZM1WZuGd_jahtV8lhg,10737
116
+ gitflow_analytics/tui/widgets/progress_widget.py,sha256=Qny6Q1nU0Pr3aj4aHfXLaRjya9MH3rldR2HWYiaQyGE,6167
117
+ gitflow_analytics-1.3.6.dist-info/licenses/LICENSE,sha256=xwvSwY1GYXpRpmbnFvvnbmMwpobnrdN9T821sGvjOY0,1066
118
+ gitflow_analytics-1.3.6.dist-info/METADATA,sha256=lkK6bJEnq7bp50-CI5adwJtGQxP4ush1UeRdV9k_pak,34091
119
+ gitflow_analytics-1.3.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
120
+ gitflow_analytics-1.3.6.dist-info/entry_points.txt,sha256=a3y8HnfLOvK1QVOgAkDY6VQXXm3o9ZSQRZrpiaS3hEM,65
121
+ gitflow_analytics-1.3.6.dist-info/top_level.txt,sha256=CQyxZXjKvpSB1kgqqtuE0PCRqfRsXZJL8JrYpJKtkrk,18
122
+ gitflow_analytics-1.3.6.dist-info/RECORD,,
@@ -1,463 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: gitflow-analytics
3
- Version: 1.0.1
4
- Summary: Analyze Git repositories for developer productivity insights
5
- Author-email: Bob Matyas <bobmatnyc@gmail.com>
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/bobmatnyc/gitflow-analytics
8
- Project-URL: Documentation, https://github.com/bobmatnyc/gitflow-analytics/blob/main/README.md
9
- Project-URL: Repository, https://github.com/bobmatnyc/gitflow-analytics
10
- Project-URL: Issues, https://github.com/bobmatnyc/gitflow-analytics/issues
11
- Keywords: git,analytics,productivity,metrics,development
12
- Classifier: Development Status :: 5 - Production/Stable
13
- Classifier: Intended Audience :: Developers
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
- Classifier: Programming Language :: Python :: 3.9
17
- Classifier: Programming Language :: Python :: 3.10
18
- Classifier: Programming Language :: Python :: 3.11
19
- Classifier: Programming Language :: Python :: 3.12
20
- Classifier: Topic :: Software Development :: Version Control :: Git
21
- Classifier: Topic :: Software Development :: Quality Assurance
22
- Requires-Python: >=3.8
23
- Description-Content-Type: text/markdown
24
- License-File: LICENSE
25
- Requires-Dist: click>=8.1
26
- Requires-Dist: gitpython>=3.1
27
- Requires-Dist: tqdm>=4.65
28
- Requires-Dist: sqlalchemy>=2.0
29
- Requires-Dist: pandas>=2.0
30
- Requires-Dist: pyyaml>=6.0
31
- Requires-Dist: python-dateutil>=2.8
32
- Requires-Dist: python-dotenv>=1.0
33
- Provides-Extra: dev
34
- Requires-Dist: pytest>=7.0; extra == "dev"
35
- Requires-Dist: pytest-cov>=4.0; extra == "dev"
36
- Requires-Dist: pytest-mock>=3.0; extra == "dev"
37
- Requires-Dist: ruff>=0.1.0; extra == "dev"
38
- Requires-Dist: mypy>=1.0; extra == "dev"
39
- Requires-Dist: black>=23.0; extra == "dev"
40
- Provides-Extra: github
41
- Requires-Dist: pygithub>=1.58; extra == "github"
42
- Provides-Extra: all
43
- Requires-Dist: gitflow-analytics[github]; extra == "all"
44
- Dynamic: license-file
45
-
46
- # GitFlow Analytics
47
-
48
- A Python package for analyzing Git repositories to generate comprehensive developer productivity reports. It extracts data directly from Git history and GitHub APIs, providing weekly summaries, productivity insights, and gap analysis.
49
-
50
- ## Features
51
-
52
- - 🚀 **Multi-repository analysis** with project grouping
53
- - 🏢 **Organization-based repository discovery** from GitHub
54
- - 👥 **Developer identity resolution** and normalization
55
- - 📊 **Work volume analysis** (absolute vs relative effort)
56
- - 🎯 **Story point extraction** from commit messages and PR descriptions
57
- - 🎫 **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)
58
- - 📈 **Weekly CSV reports** with productivity metrics
59
- - 🔒 **Data anonymization** for external sharing
60
- - ⚡ **Smart caching** for fast repeated analyses
61
- - 🔄 **Batch processing** for large repositories
62
-
63
- ## Quick Start
64
-
65
- ### Installation
66
-
67
- ```bash
68
- pip install gitflow-analytics
69
- ```
70
-
71
- ### Basic Usage
72
-
73
- 1. Create a configuration file (`config.yaml`):
74
-
75
- **Option A: Organization-based (Automatic Repository Discovery)**
76
- ```yaml
77
- version: "1.0"
78
-
79
- github:
80
- token: "${GITHUB_TOKEN}"
81
- organization: "myorg" # Automatically discovers all repositories
82
-
83
- analysis:
84
- story_point_patterns:
85
- - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
86
- - "\\[(\\d+)\\s*(?:sp|pts?)\\]"
87
- ```
88
-
89
- **Option B: Repository-based (Manual Configuration)**
90
- ```yaml
91
- version: "1.0"
92
-
93
- github:
94
- token: "${GITHUB_TOKEN}"
95
- owner: "${GITHUB_OWNER}"
96
-
97
- repositories:
98
- - name: "frontend"
99
- path: "~/repos/frontend"
100
- github_repo: "myorg/frontend"
101
- project_key: "FRONTEND"
102
-
103
- - name: "backend"
104
- path: "~/repos/backend"
105
- github_repo: "myorg/backend"
106
- project_key: "BACKEND"
107
-
108
- analysis:
109
- story_point_patterns:
110
- - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
111
- - "\\[(\\d+)\\s*(?:sp|pts?)\\]"
112
- ```
113
-
114
- 2. Create a `.env` file in the same directory as your `config.yaml`:
115
-
116
- ```bash
117
- # .env
118
- GITHUB_TOKEN=ghp_your_github_token_here
119
- GITHUB_OWNER=your_github_org # Only for repository-based setup
120
- ```
121
-
122
- 3. Run the analysis:
123
-
124
- ```bash
125
- gitflow-analytics analyze -c config.yaml
126
- ```
127
-
128
- ## Configuration Options
129
-
130
- ### Environment Variables and Credentials
131
-
132
- GitFlow Analytics automatically loads environment variables from a `.env` file in the same directory as your configuration YAML. This is the recommended approach for managing credentials securely.
133
-
134
- #### Step 1: Create a `.env` file
135
-
136
- Create a `.env` file next to your configuration YAML:
137
-
138
- ```bash
139
- # .env file (same directory as your config.yaml)
140
- # GitHub credentials (required)
141
- GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
142
- GITHUB_OWNER=myorg # Optional: default owner for repositories
143
-
144
- # JIRA credentials (optional - only if using JIRA integration)
145
- JIRA_ACCESS_USER=your.email@company.com
146
- JIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx
147
-
148
- # Other optional tokens
149
- CLICKUP_TOKEN=pk_xxxxxxxxxxxx
150
- LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
151
- ```
152
-
153
- #### Step 2: Reference in YAML configuration
154
-
155
- Use `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:
156
-
157
- ```yaml
158
- # config.yaml
159
- version: "1.0"
160
-
161
- github:
162
- token: "${GITHUB_TOKEN}" # Required
163
- owner: "${GITHUB_OWNER}" # Optional
164
- organization: "${GITHUB_ORG}" # Optional (for org-based discovery)
165
-
166
- # Optional: JIRA integration
167
- jira:
168
- access_user: "${JIRA_ACCESS_USER}"
169
- access_token: "${JIRA_ACCESS_TOKEN}"
170
- base_url: "https://yourcompany.atlassian.net"
171
-
172
- # Optional: Configure which JIRA fields contain story points
173
- jira_integration:
174
- story_point_fields:
175
- - "Story Points"
176
- - "customfield_10016" # Your custom field ID
177
- ```
178
-
179
- #### Important Notes:
180
-
181
- - **Never commit `.env` files** to version control (add to `.gitignore`)
182
- - If credentials are not found in the `.env` file, the tool will exit with an informative error
183
- - The `.env` file must be in the same directory as your YAML configuration
184
- - All configured services must have corresponding environment variables set
185
-
186
- ### Organization vs Repository-based Setup
187
-
188
- GitFlow Analytics supports two main configuration approaches:
189
-
190
- #### Organization-based Configuration (Recommended)
191
-
192
- Automatically discovers all non-archived repositories from a GitHub organization:
193
-
194
- ```yaml
195
- version: "1.0"
196
-
197
- github:
198
- token: "${GITHUB_TOKEN}"
199
- organization: "myorg" # Your GitHub organization name
200
-
201
- # Optional: Customize analysis settings
202
- analysis:
203
- story_point_patterns:
204
- - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
205
-
206
- exclude:
207
- authors:
208
- - "dependabot[bot]"
209
- - "github-actions[bot]"
210
- ```
211
-
212
- **Benefits:**
213
- - Automatically discovers new repositories as they're added to the organization
214
- - No need to manually configure each repository
215
- - Simplified configuration management
216
- - Perfect for teams with many repositories
217
-
218
- **Requirements:**
219
- - Your GitHub token must have organization read access
220
- - Repositories will be automatically cloned to local directories if they don't exist
221
-
222
- #### Repository-based Configuration
223
-
224
- Manually specify each repository to analyze:
225
-
226
- ```yaml
227
- version: "1.0"
228
-
229
- github:
230
- token: "${GITHUB_TOKEN}"
231
- owner: "${GITHUB_OWNER}" # Default owner for repositories
232
-
233
- repositories:
234
- - name: "frontend"
235
- path: "~/repos/frontend"
236
- github_repo: "myorg/frontend"
237
- project_key: "FRONTEND"
238
-
239
- - name: "backend"
240
- path: "~/repos/backend"
241
- github_repo: "myorg/backend"
242
- project_key: "BACKEND"
243
-
244
- analysis:
245
- story_point_patterns:
246
- - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
247
- ```
248
-
249
- **Benefits:**
250
- - Fine-grained control over which repositories to analyze
251
- - Custom project keys and local paths
252
- - Works with mixed-ownership repositories
253
- - Compatible with existing configurations
254
-
255
- ### Directory Defaults
256
-
257
- GitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:
258
-
259
- - **Reports**: Default to same directory as config file (unless overridden with `--output`)
260
- - **Cache**: Default to `.gitflow-cache/` in config file directory
261
- - **Backward compatibility**: Absolute paths in configuration continue to work as before
262
-
263
- Example directory structure:
264
- ```
265
- /project/
266
- ├── config.yaml # Configuration file
267
- ├── weekly_metrics.csv # Reports generated here by default
268
- ├── summary.csv
269
- └── .gitflow-cache/ # Cache directory
270
- ├── gitflow_cache.db
271
- └── identities.db
272
- ```
273
-
274
- ## Command Line Interface
275
-
276
- ### Main Commands
277
-
278
- ```bash
279
- # Analyze repositories
280
- gitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports
281
-
282
- # Show cache statistics
283
- gitflow-analytics cache-stats -c config.yaml
284
-
285
- # List known developers
286
- gitflow-analytics list-developers -c config.yaml
287
-
288
- # Merge developer identities
289
- gitflow-analytics merge-identity -c config.yaml dev1_id dev2_id
290
-
291
- # Discover JIRA story point fields
292
- gitflow-analytics discover-jira-fields -c config.yaml
293
- ```
294
-
295
- ### Options
296
-
297
- - `--weeks, -w`: Number of weeks to analyze (default: 12)
298
- - `--output, -o`: Output directory for reports (default: ./reports)
299
- - `--anonymize`: Anonymize developer information
300
- - `--no-cache`: Disable caching for fresh analysis
301
- - `--clear-cache`: Clear cache before analysis
302
- - `--validate-only`: Validate configuration without running
303
-
304
- ## Complete Configuration Example
305
-
306
- Here's a complete example showing `.env` file and corresponding YAML configuration:
307
-
308
- ### `.env` file
309
- ```bash
310
- # GitHub Configuration
311
- GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
312
- GITHUB_ORG=EWTN-Global
313
-
314
- # JIRA Configuration
315
- JIRA_ACCESS_USER=developer@ewtn.com
316
- JIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx
317
-
318
- # Optional: Other integrations
319
- # CLICKUP_TOKEN=pk_xxxxxxxxxxxx
320
- # LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
321
- ```
322
-
323
- ### `config.yaml` file
324
- ```yaml
325
- version: "1.0"
326
-
327
- # GitHub configuration with organization discovery
328
- github:
329
- token: "${GITHUB_TOKEN}"
330
- organization: "${GITHUB_ORG}"
331
-
332
- # JIRA integration for story points
333
- jira:
334
- access_user: "${JIRA_ACCESS_USER}"
335
- access_token: "${JIRA_ACCESS_TOKEN}"
336
- base_url: "https://ewtn.atlassian.net"
337
-
338
- jira_integration:
339
- enabled: true
340
- fetch_story_points: true
341
- story_point_fields:
342
- - "Story point estimate" # Your field name
343
- - "customfield_10016" # Fallback field ID
344
-
345
- # Analysis configuration
346
- analysis:
347
- # Only track JIRA tickets (ignore GitHub issues, etc.)
348
- ticket_platforms:
349
- - jira
350
-
351
- # Exclude bot commits and boilerplate files
352
- exclude:
353
- authors:
354
- - "dependabot[bot]"
355
- - "renovate[bot]"
356
- paths:
357
- - "**/node_modules/**"
358
- - "**/*.min.js"
359
- - "**/package-lock.json"
360
-
361
- # Developer identity consolidation
362
- identity:
363
- similarity_threshold: 0.85
364
- manual_mappings:
365
- - primary_email: "john.doe@company.com"
366
- aliases:
367
- - "jdoe@oldcompany.com"
368
- - "john@personal.com"
369
-
370
- # Output configuration
371
- output:
372
- directory: "./reports"
373
- formats:
374
- - csv
375
- - markdown
376
- ```
377
-
378
- ## Output Reports
379
-
380
- The tool generates three CSV reports:
381
-
382
- 1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)
383
- - Week-by-week developer productivity
384
- - Story points, commits, lines changed
385
- - Ticket coverage percentages
386
- - Per-project breakdown
387
-
388
- 2. **Summary Statistics** (`summary_YYYYMMDD.csv`)
389
- - Overall project statistics
390
- - Platform-specific ticket counts
391
- - Top contributors
392
-
393
- 3. **Developer Report** (`developers_YYYYMMDD.csv`)
394
- - Complete developer profiles
395
- - Total contributions
396
- - Identity aliases
397
-
398
- ## Story Point Patterns
399
-
400
- Configure custom regex patterns to match your team's story point format:
401
-
402
- ```yaml
403
- story_point_patterns:
404
- - "SP: (\\d+)" # SP: 5
405
- - "\\[([0-9]+) pts\\]" # [3 pts]
406
- - "estimate: (\\d+)" # estimate: 8
407
- ```
408
-
409
- ## Ticket Platform Support
410
-
411
- Automatically detects and tracks tickets from:
412
- - **JIRA**: `PROJ-123`
413
- - **GitHub**: `#123`, `GH-123`
414
- - **ClickUp**: `CU-abc123`
415
- - **Linear**: `ENG-123`
416
-
417
- ### JIRA Integration
418
-
419
- GitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:
420
-
421
- ```yaml
422
- jira:
423
- access_user: "${JIRA_ACCESS_USER}"
424
- access_token: "${JIRA_ACCESS_TOKEN}"
425
- base_url: "https://your-company.atlassian.net"
426
-
427
- jira_integration:
428
- enabled: true
429
- story_point_fields:
430
- - "Story point estimate" # Your custom field name
431
- - "customfield_10016" # Or use field ID
432
- ```
433
-
434
- To discover your JIRA story point fields:
435
- ```bash
436
- gitflow-analytics discover-jira-fields -c config.yaml
437
- ```
438
-
439
- ## Caching
440
-
441
- The tool uses SQLite for intelligent caching:
442
- - Commit analysis results
443
- - Developer identity mappings
444
- - Pull request data
445
-
446
- Cache is automatically managed with configurable TTL.
447
-
448
- ## Developer Identity Resolution
449
-
450
- Intelligently merges developer identities across:
451
- - Different email addresses
452
- - Name variations
453
- - GitHub usernames
454
-
455
- Manual overrides supported in configuration.
456
-
457
- ## Contributing
458
-
459
- Contributions are welcome! Please feel free to submit a Pull Request.
460
-
461
- ## License
462
-
463
- This project is licensed under the MIT License - see the LICENSE file for details.
@@ -1,31 +0,0 @@
1
- gitflow_analytics/__init__.py,sha256=9g64-8GIadOL3mCDsxHPMIlUhztZAx_nUISQtRotsuY,682
2
- gitflow_analytics/_version.py,sha256=d6tbYJNPyd-1yr5YWMYdu12zn6-tSRgYnpW5-dGvQWA,136
3
- gitflow_analytics/cli.py,sha256=1zC5kOSFKtgGHaew6JOjezRUXh3FrVmZEYE2mu5h0QY,21103
4
- gitflow_analytics/config.py,sha256=xQpsQTKtTU5L3k44YG3grtXl-b4miL9l5GcPV0w5Vkc,15896
5
- gitflow_analytics/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- gitflow_analytics/core/analyzer.py,sha256=7DRofL9aRdafuRaTxKne0h42QAhdDn245-cIhkDyNaQ,10379
7
- gitflow_analytics/core/branch_mapper.py,sha256=p1MzezL2aMjhVX0672aC9Zc_1QPVnKmw1EEn4CSZTCc,7603
8
- gitflow_analytics/core/cache.py,sha256=nAWdkT210mrsMrpC50pCYXJ5e7mi5YzgrgB5Bd0UXOo,11641
9
- gitflow_analytics/core/identity.py,sha256=FXD5aeMbf1yyFwDKQqu943kHIMRLbb7lclw1m421qF4,17046
10
- gitflow_analytics/extractors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- gitflow_analytics/extractors/base.py,sha256=EIs8udjsJOMJMuqo6GJD9m-LQ-bmXuD8Ofdxr9KHYzQ,1208
12
- gitflow_analytics/extractors/story_points.py,sha256=2NUViohigV5QHMw5U_NMwEuNd4pFLVuFYphM7ZliZ-Y,5038
13
- gitflow_analytics/extractors/tickets.py,sha256=pjexGozeZlxy0oG6D-qxtkWrQiWbdU2PU3CmdJxIZfY,6655
14
- gitflow_analytics/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- gitflow_analytics/integrations/github_integration.py,sha256=snRjPKZXBP0XK_vProHJeqRWDAxAVbuGEbRf1yWsZew,6719
16
- gitflow_analytics/integrations/jira_integration.py,sha256=UE8UmMt90Py2PZTldAjLhBYHhFF81F5gwAuvjtHAI18,10549
17
- gitflow_analytics/integrations/orchestrator.py,sha256=72l6mt2MGk5eJBO1GuwUEMg_K16SeK8fzp1TNlm8wbQ,5688
18
- gitflow_analytics/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- gitflow_analytics/metrics/dora.py,sha256=hn99XATw-lWr8RdQQb5u7XwT-tAZs0CC5Qbj0xOHkWw,12709
20
- gitflow_analytics/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- gitflow_analytics/models/database.py,sha256=y93oyZHe1EyYX9YYgI2jDnuXtBG4_BsvJx7ei9mRgl0,5521
22
- gitflow_analytics/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- gitflow_analytics/reports/analytics_writer.py,sha256=FoXLcdS11q6DekB2QfR-1J30gUQkARfiR-hyWZZO5hw,19496
24
- gitflow_analytics/reports/csv_writer.py,sha256=SgQLa9mNc-pLhLwy1hhttMjKPTXcRYvOaUwvUD1WI84,13021
25
- gitflow_analytics/reports/narrative_writer.py,sha256=GKBdbFL6_Qwfi8xXsD5C_inFf12h4_gy-9QasanTv1Q,12879
26
- gitflow_analytics-1.0.1.dist-info/licenses/LICENSE,sha256=xwvSwY1GYXpRpmbnFvvnbmMwpobnrdN9T821sGvjOY0,1066
27
- gitflow_analytics-1.0.1.dist-info/METADATA,sha256=yy2hzjV1Y1DdhXUn7MuOdnyjVxYIZ5u306ux_VZYKFk,12677
28
- gitflow_analytics-1.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
29
- gitflow_analytics-1.0.1.dist-info/entry_points.txt,sha256=a3y8HnfLOvK1QVOgAkDY6VQXXm3o9ZSQRZrpiaS3hEM,65
30
- gitflow_analytics-1.0.1.dist-info/top_level.txt,sha256=CQyxZXjKvpSB1kgqqtuE0PCRqfRsXZJL8JrYpJKtkrk,18
31
- gitflow_analytics-1.0.1.dist-info/RECORD,,