gitflow-analytics 3.13.6__py3-none-any.whl → 3.13.8__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.
- gitflow_analytics/_version.py +1 -1
- gitflow_analytics/cli.py +14 -4
- gitflow_analytics/qualitative/enhanced_analyzer.py +2 -1
- gitflow_analytics/reports/analytics_writer.py +2 -1
- gitflow_analytics/reports/json_exporter.py +3 -2
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/METADATA +1 -1
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/RECORD +11 -11
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/WHEEL +0 -0
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/entry_points.txt +0 -0
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/licenses/LICENSE +0 -0
- {gitflow_analytics-3.13.6.dist-info → gitflow_analytics-3.13.8.dist-info}/top_level.txt +0 -0
gitflow_analytics/_version.py
CHANGED
gitflow_analytics/cli.py
CHANGED
|
@@ -3908,11 +3908,12 @@ def analyze(
|
|
|
3908
3908
|
traceback.print_exc()
|
|
3909
3909
|
raise
|
|
3910
3910
|
|
|
3911
|
-
#
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
date_range = f"{start_date.strftime('%Y%m%d')}_{end_date.strftime('%Y%m%d')}"
|
|
3911
|
+
# Calculate date range for consistent filename formatting across all markdown reports
|
|
3912
|
+
# Define outside conditional blocks so it's available for all report types
|
|
3913
|
+
date_range = f"{start_date.strftime('%Y%m%d')}_{end_date.strftime('%Y%m%d')}"
|
|
3915
3914
|
|
|
3915
|
+
# Generate markdown reports if enabled (requires CSV files)
|
|
3916
|
+
if "markdown" in cfg.output.formats and generate_csv:
|
|
3916
3917
|
try:
|
|
3917
3918
|
logger.debug("Starting narrative report generation")
|
|
3918
3919
|
narrative_gen = NarrativeReportGenerator()
|
|
@@ -4039,6 +4040,15 @@ def analyze(
|
|
|
4039
4040
|
|
|
4040
4041
|
traceback.print_exc()
|
|
4041
4042
|
raise
|
|
4043
|
+
elif "markdown" in cfg.output.formats and not generate_csv:
|
|
4044
|
+
# Narrative report requires CSV files, but CSV generation is disabled
|
|
4045
|
+
logger.info(
|
|
4046
|
+
"Skipping narrative report generation - CSV files required but CSV generation is disabled"
|
|
4047
|
+
)
|
|
4048
|
+
if not display:
|
|
4049
|
+
click.echo(
|
|
4050
|
+
" ℹ️ Narrative report skipped (requires CSV files - enable with --csv flag)"
|
|
4051
|
+
)
|
|
4042
4052
|
|
|
4043
4053
|
# Generate database-backed qualitative report
|
|
4044
4054
|
if "markdown" in cfg.output.formats:
|
|
@@ -2247,6 +2247,7 @@ class EnhancedQualitativeAnalyzer:
|
|
|
2247
2247
|
n = len(sorted_values)
|
|
2248
2248
|
cumsum = np.cumsum(sorted_values)
|
|
2249
2249
|
|
|
2250
|
-
|
|
2250
|
+
# Use builtin sum instead of np.sum for generator expression (numpy deprecation)
|
|
2251
|
+
return (2 * sum((i + 1) * sorted_values[i] for i in range(n))) / (n * cumsum[-1]) - (
|
|
2251
2252
|
n + 1
|
|
2252
2253
|
) / n
|
|
@@ -956,7 +956,8 @@ class AnalyticsReportGenerator:
|
|
|
956
956
|
sorted_values = sorted(values)
|
|
957
957
|
n = len(values)
|
|
958
958
|
cumsum = np.cumsum(sorted_values)
|
|
959
|
-
|
|
959
|
+
# Use builtin sum instead of np.sum for generator expression (numpy deprecation)
|
|
960
|
+
return (2 * sum((i + 1) * sorted_values[i] for i in range(n))) / (n * cumsum[-1]) - (n + 1) / n
|
|
960
961
|
|
|
961
962
|
def _get_week_start(self, date: datetime) -> datetime:
|
|
962
963
|
"""Get Monday of the week for a given date."""
|
|
@@ -2612,8 +2612,9 @@ class ComprehensiveJSONExporter(BaseReportGenerator):
|
|
|
2612
2612
|
sorted_values = sorted(values)
|
|
2613
2613
|
n = len(values)
|
|
2614
2614
|
cumsum = np.cumsum(sorted_values)
|
|
2615
|
-
|
|
2616
|
-
|
|
2615
|
+
|
|
2616
|
+
# Use builtin sum instead of np.sum for generator expression (numpy deprecation)
|
|
2617
|
+
return (2 * sum((i + 1) * sorted_values[i] for i in range(n))) / (n * cumsum[-1]) - (n + 1) / n
|
|
2617
2618
|
|
|
2618
2619
|
def _anonymize_value(self, value: str, field_type: str) -> str:
|
|
2619
2620
|
"""Anonymize a value if anonymization is enabled."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
gitflow_analytics/__init__.py,sha256=W3Jaey5wuT1nBPehVLTIRkVIyBa5jgYOlBKc_UFfh-4,773
|
|
2
|
-
gitflow_analytics/_version.py,sha256=
|
|
3
|
-
gitflow_analytics/cli.py,sha256=
|
|
2
|
+
gitflow_analytics/_version.py,sha256=NrK5CHkptcEXHAM0rsxaSuosWfuwaiMjAT1Ujb8Vq50,138
|
|
3
|
+
gitflow_analytics/cli.py,sha256=Yd_fLDwme6po7brH0ZrbzGVFCKLOmRnkYDfGC6yHfz4,310519
|
|
4
4
|
gitflow_analytics/config.py,sha256=XRuxvzLWyn_ML7mDCcuZ9-YFNAEsnt33vIuWxQQ_jxg,1033
|
|
5
5
|
gitflow_analytics/constants.py,sha256=GXEncUJS9ijOI5KWtQCTANwdqxPfXpw-4lNjhaWTKC4,2488
|
|
6
6
|
gitflow_analytics/verify_activity.py,sha256=q82VnU8FhHEPlnupYMvh1XtyaDJfIPPg-AI8cSM0PIk,27054
|
|
@@ -62,7 +62,7 @@ gitflow_analytics/pm_framework/adapters/__init__.py,sha256=vS5btB-yIwVHZfoFYacWx
|
|
|
62
62
|
gitflow_analytics/pm_framework/adapters/jira_adapter.py,sha256=E5-NuKHFDGkqObjhWvXqoEsVVnLXrnAiF2v81hTYQ7A,72527
|
|
63
63
|
gitflow_analytics/qualitative/__init__.py,sha256=fwlb_xrv7Gatjylk5wclzckZxyss8K5cdZhhTHMWfYw,1184
|
|
64
64
|
gitflow_analytics/qualitative/chatgpt_analyzer.py,sha256=nQDk1Rf2z2svpsnXoz0mxbwLXytFo3EgImbegg53FvI,11816
|
|
65
|
-
gitflow_analytics/qualitative/enhanced_analyzer.py,sha256=
|
|
65
|
+
gitflow_analytics/qualitative/enhanced_analyzer.py,sha256=iPftj8fQt6m2wd9pepV_YhteuFo3oUrVA9iC-Kb2ssE,92819
|
|
66
66
|
gitflow_analytics/qualitative/example_enhanced_usage.py,sha256=pKKhAjOCwmBaJPzZ8RDl8R4uG23NwFXUUeAqv6oYM2E,14924
|
|
67
67
|
gitflow_analytics/qualitative/classifiers/__init__.py,sha256=lgabpW-_aub_O-1CVbmgeUVEo2jf5O-DK0Y2dF-WrZc,346
|
|
68
68
|
gitflow_analytics/qualitative/classifiers/change_type.py,sha256=3glCIkNxTQAbk0s0Urp4nLp9OXtYzF0-I8SzOEpx9JE,23291
|
|
@@ -91,7 +91,7 @@ gitflow_analytics/qualitative/utils/cost_tracker.py,sha256=GPoO3ywlGqiJkjz6Uca4T
|
|
|
91
91
|
gitflow_analytics/qualitative/utils/metrics.py,sha256=_Gfyfrenxv-ynkSxVnkGpViROCDpDb1EI6K-x461nEk,13054
|
|
92
92
|
gitflow_analytics/qualitative/utils/text_processing.py,sha256=j3fF5K9DYuRauKGIAxnezyGmqedXkR9wIXailkhG0BY,9205
|
|
93
93
|
gitflow_analytics/reports/__init__.py,sha256=bU43ev2EDMKsCEQEzCyZU5yO2ZL4Oymq4N_3YD3pCQg,2156
|
|
94
|
-
gitflow_analytics/reports/analytics_writer.py,sha256=
|
|
94
|
+
gitflow_analytics/reports/analytics_writer.py,sha256=Dp_7-W5XQIY_ddDEVuTOYHpjAzuxu35i8zx09aAqGRc,45303
|
|
95
95
|
gitflow_analytics/reports/base.py,sha256=IjYX7PbnpVyyB6LI6dz_oLd3vtYsu1eBB978X0zIJDE,23203
|
|
96
96
|
gitflow_analytics/reports/branch_health_writer.py,sha256=Yfd4rGQLx1oBK8tA8t_jQ0b3OeTXEb4GJYrPbXHmsBU,13111
|
|
97
97
|
gitflow_analytics/reports/classification_writer.py,sha256=3kyISHrLXUu8h4vtqBfn0N_k9uESfa2dSUX_MYqEQsc,46115
|
|
@@ -104,7 +104,7 @@ gitflow_analytics/reports/factory.py,sha256=1UutSVProqPS0pEqNik7tqQO55RgfHiN9bjt
|
|
|
104
104
|
gitflow_analytics/reports/formatters.py,sha256=RFocNTbDwrNCw4IoL5etemWOPeengvDJ-97xzIyxzmU,19274
|
|
105
105
|
gitflow_analytics/reports/html_generator.py,sha256=gl4vhQZb8_oxvDonBP--v_wOXXgn32OCLwwyuzuKncE,62549
|
|
106
106
|
gitflow_analytics/reports/interfaces.py,sha256=XJJxmwhQ3-4iJrDQ1n5r8vFgL4gRgw_3HMpW3RPYrAU,12194
|
|
107
|
-
gitflow_analytics/reports/json_exporter.py,sha256=
|
|
107
|
+
gitflow_analytics/reports/json_exporter.py,sha256=6kpEtTAfRDRuQLNYbPVN9KAwkJnUr_PgUfjwMKL3QSw,114401
|
|
108
108
|
gitflow_analytics/reports/narrative_writer.py,sha256=9yZN_zQcjOlkpIJH7yhGXdBV8bxv-mRu5BB8waB0e1o,119756
|
|
109
109
|
gitflow_analytics/reports/story_point_correlation.py,sha256=V9fnqNOxJxK00w0Mx69BMpcZgdgQJyja_Pu4qD-SWw0,51210
|
|
110
110
|
gitflow_analytics/reports/weekly_trends_writer.py,sha256=m_TQ6ThSaa5rkAwfQpPRms2Jwgq3RReYwVBsts67cLk,15720
|
|
@@ -127,9 +127,9 @@ gitflow_analytics/ui/__init__.py,sha256=UBhYhZMvwlSrCuGWjkIdoP2zNbiQxOHOli-I8mqI
|
|
|
127
127
|
gitflow_analytics/ui/progress_display.py,sha256=omCS86mCQR0QeMoM0YnsV3Gf2oALsDLu8u7XseQU6lk,59306
|
|
128
128
|
gitflow_analytics/utils/__init__.py,sha256=YE3E5Mx-LmVRqLIgUUwDmbstm6gkpeavYHrQmVjwR3o,197
|
|
129
129
|
gitflow_analytics/utils/commit_utils.py,sha256=TBgrWW73EODGOegGCF79ch0L0e5R6gpydNWutiQOa14,1356
|
|
130
|
-
gitflow_analytics-3.13.
|
|
131
|
-
gitflow_analytics-3.13.
|
|
132
|
-
gitflow_analytics-3.13.
|
|
133
|
-
gitflow_analytics-3.13.
|
|
134
|
-
gitflow_analytics-3.13.
|
|
135
|
-
gitflow_analytics-3.13.
|
|
130
|
+
gitflow_analytics-3.13.8.dist-info/licenses/LICENSE,sha256=xwvSwY1GYXpRpmbnFvvnbmMwpobnrdN9T821sGvjOY0,1066
|
|
131
|
+
gitflow_analytics-3.13.8.dist-info/METADATA,sha256=SB9ftI95cTtgIWpy2Jq5a-gfUMm1QwFl5dpuVsC2qe4,40374
|
|
132
|
+
gitflow_analytics-3.13.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
133
|
+
gitflow_analytics-3.13.8.dist-info/entry_points.txt,sha256=ZOsX0GLsnMysp5FWPOfP_qyoS7WJ8IgcaDFDxWBYl1g,98
|
|
134
|
+
gitflow_analytics-3.13.8.dist-info/top_level.txt,sha256=CQyxZXjKvpSB1kgqqtuE0PCRqfRsXZJL8JrYpJKtkrk,18
|
|
135
|
+
gitflow_analytics-3.13.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|