ai-cr 3.2.1__py3-none-any.whl → 3.2.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ai-cr
3
- Version: 3.2.1
3
+ Version: 3.2.2
4
4
  Summary: AI code review tool that works with any language model provider. It detects issues in GitHub pull requests or local changes—instantly, reliably, and without vendor lock-in.
5
5
  License: MIT
6
6
  Keywords: static code analysis,code review,code quality,ai,coding,assistant,llm,github,automation,devops,developer tools,github actions,workflows,git
@@ -23,7 +23,7 @@ gito/pipeline_steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
23
23
  gito/pipeline_steps/jira.py,sha256=NjFgpGFAkT5PSXi6jQ9Yr8CY9M8sa3_rMb7RFhdpoNg,1862
24
24
  gito/pipeline_steps/linear.py,sha256=6UDc8nGKGpwHruPq8VItE2QBWshWxaTapoMhu_qjN_g,2445
25
25
  gito/project_config.py,sha256=ZdHy4aNzjlVAgTUjmznrGcdd2NHMMvGX8VeSmAnzZ34,3237
26
- gito/report_struct.py,sha256=96gDYnw0MXhOZrrGaNOTyWstqpjjS7_cuWufd0XJzR4,4320
26
+ gito/report_struct.py,sha256=zSMhPojsBIK34Kp9i74qKJ09DupKluuHHsubS1t9_1E,4399
27
27
  gito/tpl/answer.j2,sha256=JrBOv-a8xBqTccRJeWly2U1Y5jehc_mOBt5nSbRJldI,700
28
28
  gito/tpl/github_workflows/components/env-vars.j2,sha256=ypmf938h5PA38mXTZnP1eI4Un3AIhhmnl6wXg2X4kqI,406
29
29
  gito/tpl/github_workflows/components/installs.j2,sha256=j5wl0yVEIrXZDpAgzqBwmhXQA9End3xFspPxr2ZzHR0,693
@@ -33,9 +33,9 @@ gito/tpl/partial/aux_files.j2,sha256=lJhqnCsHBbEEocpyyOmQX27jzuLvEIuEVXY0RGqxWnY
33
33
  gito/tpl/questions/changes_summary.j2,sha256=N80OQoo9UKii0CWLuck5bOwbijul5RefvCqHJljenmE,2213
34
34
  gito/tpl/questions/release_notes.j2,sha256=OXi6o7T1bum88_2Pt4FiLHmKUe86A1t9Be_3s4mrnmU,889
35
35
  gito/tpl/questions/test_cases.j2,sha256=bB7ESjy02mwWml4zyq87DqkFDj-I0-BYpfJVgzE77cc,1410
36
- gito/utils.py,sha256=OSBn7IeWKjoLJoGOcdgQcJHBA69UiHUChtaYMInUeko,6852
37
- ai_cr-3.2.1.dist-info/LICENSE,sha256=VbdF_GbbDK24JvdTfnsxa2M6jmhsxmRSFeHCx-lICGE,1075
38
- ai_cr-3.2.1.dist-info/METADATA,sha256=SfLgtno0Kb_YCu-x7mCqqdqwNXJ9jNQ2B0lv_C1khog,8874
39
- ai_cr-3.2.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
40
- ai_cr-3.2.1.dist-info/entry_points.txt,sha256=Ua1DxkhJJ8TZuLgnH-IlWCkrre_0S0dq_GtYRaYupWk,38
41
- ai_cr-3.2.1.dist-info/RECORD,,
36
+ gito/utils.py,sha256=-agcMHug8nbrPxfz2nAtOKEAox7Kt-0_AIC3d-X23NE,7693
37
+ ai_cr-3.2.2.dist-info/LICENSE,sha256=VbdF_GbbDK24JvdTfnsxa2M6jmhsxmRSFeHCx-lICGE,1075
38
+ ai_cr-3.2.2.dist-info/METADATA,sha256=9M0y1sbIyF1v3zl96TjACPBfdKn8ha5PZWk0t_sS-B0,8874
39
+ ai_cr-3.2.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
40
+ ai_cr-3.2.2.dist-info/entry_points.txt,sha256=Ua1DxkhJJ8TZuLgnH-IlWCkrre_0S0dq_GtYRaYupWk,38
41
+ ai_cr-3.2.2.dist-info/RECORD,,
gito/report_struct.py CHANGED
@@ -12,7 +12,7 @@ import textwrap
12
12
 
13
13
  from .constants import JSON_REPORT_FILE_NAME, HTML_TEXT_ICON, HTML_CR_COMMENT_MARKER
14
14
  from .project_config import ProjectConfig
15
- from .utils import syntax_hint, block_wrap_lr, max_line_len, remove_html_comments
15
+ from .utils import syntax_hint, block_wrap_lr, max_line_len, remove_html_comments, filter_kwargs
16
16
 
17
17
 
18
18
  @dataclass
@@ -40,7 +40,7 @@ class Issue:
40
40
 
41
41
  def __post_init__(self):
42
42
  self.affected_lines = [
43
- Issue.AffectedCode(**dict(file=self.file) | i)
43
+ Issue.AffectedCode(**filter_kwargs(Issue.AffectedCode, dict(file=self.file) | i))
44
44
  for i in self.affected_lines
45
45
  ]
46
46
 
@@ -63,7 +63,7 @@ class Report:
63
63
  MARKDOWN = "md"
64
64
  CLI = "cli"
65
65
 
66
- issues: dict[str, list[Issue]] = field(default_factory=dict)
66
+ issues: dict[str, list[Issue | dict]] = field(default_factory=dict)
67
67
  summary: str = field(default="")
68
68
  number_of_processed_files: int = field(default=0)
69
69
  total_issues: int = field(init=False)
@@ -84,10 +84,10 @@ class Report:
84
84
  for file in self.issues.keys():
85
85
  self.issues[file] = [
86
86
  Issue(
87
- **{
87
+ **filter_kwargs(Issue, {
88
88
  "id": (issue_id := issue_id + 1),
89
89
  "file": file,
90
- } | issue
90
+ } | issue)
91
91
  )
92
92
  for issue in self.issues[file]
93
93
  ]
gito/utils.py CHANGED
@@ -1,6 +1,8 @@
1
+ import logging
1
2
  import re
2
3
  import sys
3
4
  import os
5
+ from dataclasses import fields
4
6
  from pathlib import Path
5
7
  import importlib.metadata
6
8
  from typing import Optional
@@ -240,3 +242,26 @@ def remove_html_comments(text):
240
242
  Removes all HTML comments (<!-- ... -->) from the input text.
241
243
  """
242
244
  return re.sub(r'<!--.*?-->\s*', '', text, flags=re.DOTALL)
245
+
246
+
247
+ def filter_kwargs(cls, kwargs, log_warnings=True):
248
+ """
249
+ Filters the keyword arguments to only include those that are fields of the given dataclass.
250
+ Args:
251
+ cls: The dataclass type to filter against.
252
+ kwargs: A dictionary of keyword arguments.
253
+ log_warnings: If True, logs warnings for fields not in the dataclass.
254
+ Returns:
255
+ A dictionary containing only the fields that are defined in the dataclass.
256
+ """
257
+ cls_fields = {f.name for f in fields(cls)}
258
+ filtered = {}
259
+ for k, v in kwargs.items():
260
+ if k in cls_fields:
261
+ filtered[k] = v
262
+ else:
263
+ if log_warnings:
264
+ logging.warning(
265
+ f"Warning: field '{k}' not in {cls.__name__}, dropping."
266
+ )
267
+ return filtered
File without changes
File without changes