c1r3x commited on
Commit
1e22c34
Β·
1 Parent(s): 88d205f

Review Agent: Removed the pdf export

Browse files
Dockerfile CHANGED
@@ -13,7 +13,6 @@ WORKDIR /app
13
  # Install system dependencies
14
  RUN apt-get update && apt-get install -y --no-install-recommends \
15
  git \
16
- wkhtmltopdf \
17
  && apt-get clean \
18
  && rm -rf /var/lib/apt/lists/*
19
 
 
13
  # Install system dependencies
14
  RUN apt-get update && apt-get install -y --no-install-recommends \
15
  git \
 
16
  && apt-get clean \
17
  && rm -rf /var/lib/apt/lists/*
18
 
README.md CHANGED
@@ -1,10 +1,10 @@
1
  ---
2
  title: Code Review Agent
3
- emoji: πŸ†
4
- colorFrom: yellow
5
- colorTo: green
6
  sdk: gradio
7
- sdk_version: 5.33.0
8
  app_file: app.py
9
  pinned: true
10
  short_description: An AI-powered code review agent that analyzes Github Repos
@@ -110,18 +110,14 @@ python -m pytest tests/
110
  ## πŸ“ Project Structure
111
 
112
  ```
113
- β”œβ”€β”€ .env # Environment variables configuration
114
  β”œβ”€β”€ .gitignore # Git ignore file
115
- β”œβ”€β”€ DEPLOYMENT_GUIDE.md # Guide for deploying to Hugging Face and Modal
116
  β”œβ”€β”€ Dockerfile # Docker configuration
117
  β”œβ”€β”€ LICENSE # MIT License file
118
  β”œβ”€β”€ README.md # Project documentation
119
  β”œβ”€β”€ app.py # Entry point for Hugging Face Spaces
120
  β”œβ”€β”€ docker-compose.yml # Docker Compose configuration
121
  β”œβ”€β”€ modal_deploy.py # Modal deployment configuration
122
- β”œβ”€β”€ prompt.txt # AI prompt templates
123
  β”œβ”€β”€ requirements.txt # Python dependencies
124
- β”œβ”€β”€ run.py # Alternative entry script
125
  β”œβ”€β”€ sample.env # Sample environment variables
126
  β”œβ”€β”€ setup.py # Package setup configuration
127
  β”œβ”€β”€ src/ # Source code directory
 
1
  ---
2
  title: Code Review Agent
3
+ emoji: πŸ‘€
4
+ colorFrom: purple
5
+ colorTo: blue
6
  sdk: gradio
7
+ sdk_version: 5.33.1
8
  app_file: app.py
9
  pinned: true
10
  short_description: An AI-powered code review agent that analyzes Github Repos
 
110
  ## πŸ“ Project Structure
111
 
112
  ```
 
113
  β”œβ”€β”€ .gitignore # Git ignore file
 
114
  β”œβ”€β”€ Dockerfile # Docker configuration
115
  β”œβ”€β”€ LICENSE # MIT License file
116
  β”œβ”€β”€ README.md # Project documentation
117
  β”œβ”€β”€ app.py # Entry point for Hugging Face Spaces
118
  β”œβ”€β”€ docker-compose.yml # Docker Compose configuration
119
  β”œβ”€β”€ modal_deploy.py # Modal deployment configuration
 
120
  β”œβ”€β”€ requirements.txt # Python dependencies
 
121
  β”œβ”€β”€ sample.env # Sample environment variables
122
  β”œβ”€β”€ setup.py # Package setup configuration
123
  β”œβ”€β”€ src/ # Source code directory
requirements.txt CHANGED
@@ -30,8 +30,4 @@ memory-profiler # Memory profiling
30
  openai # OpenAI API client for Nebius integration
31
 
32
  # Deployment
33
- modal
34
-
35
-
36
- pdfkit
37
- wkhtmltopdf
 
30
  openai # OpenAI API client for Nebius integration
31
 
32
  # Deployment
33
+ modal
 
 
 
 
src/services/report_generator.py CHANGED
@@ -14,7 +14,6 @@ import logging
14
  import datetime
15
  from pathlib import Path
16
  import markdown
17
- import pdfkit
18
  import csv
19
 
20
  logger = logging.getLogger(__name__)
@@ -31,9 +30,16 @@ class ReportGenerator:
31
  Args:
32
  output_dir (str): Directory to save generated reports.
33
  """
34
- self.output_dir = output_dir
35
- os.makedirs(output_dir, exist_ok=True)
36
- logger.info(f"Initialized ReportGenerator with output directory: {output_dir}")
 
 
 
 
 
 
 
37
 
38
  def generate_report(self, repo_name, results, format_type="all"):
39
  """
@@ -42,7 +48,7 @@ class ReportGenerator:
42
  Args:
43
  repo_name (str): Name of the repository.
44
  results (dict): Analysis results.
45
- format_type (str): Report format type (json, html, pdf, csv, or all).
46
 
47
  Returns:
48
  dict: Paths to the generated reports.
@@ -63,10 +69,6 @@ class ReportGenerator:
63
  html_path = self._generate_html_report(report_name, report_content)
64
  report_paths["html"] = html_path
65
 
66
- if format_type in ["pdf", "all"]:
67
- pdf_path = self._generate_pdf_report(report_name, report_content)
68
- report_paths["pdf"] = pdf_path
69
-
70
  if format_type in ["csv", "all"]:
71
  csv_path = self._generate_csv_report(report_name, report_content)
72
  report_paths["csv"] = csv_path
@@ -516,35 +518,7 @@ class ReportGenerator:
516
  logger.info(f"Generated HTML report: {report_path}")
517
  return report_path
518
 
519
- def _generate_pdf_report(self, report_name, report_content):
520
- """
521
- Generate a PDF report.
522
-
523
- Args:
524
- report_name (str): Name of the report.
525
- report_content (dict): Report content.
526
-
527
- Returns:
528
- str: Path to the generated report.
529
- """
530
- report_path = os.path.join(self.output_dir, f"{report_name}.pdf")
531
-
532
- # First generate HTML report
533
- html_path = self._generate_html_report(f"{report_name}_temp", report_content)
534
-
535
- try:
536
- # Convert HTML to PDF using pdfkit
537
- pdfkit.from_file(html_path, report_path)
538
-
539
- # Remove temporary HTML file
540
- os.remove(html_path)
541
-
542
- logger.info(f"Generated PDF report: {report_path}")
543
- return report_path
544
-
545
- except Exception as e:
546
- logger.error(f"Error generating PDF report: {e}")
547
- return html_path
548
 
549
  def _generate_csv_report(self, report_name, report_content):
550
  """
 
14
  import datetime
15
  from pathlib import Path
16
  import markdown
 
17
  import csv
18
 
19
  logger = logging.getLogger(__name__)
 
30
  Args:
31
  output_dir (str): Directory to save generated reports.
32
  """
33
+ # Use absolute path for output directory
34
+ if not os.path.isabs(output_dir):
35
+ # Get the absolute path relative to the project root
36
+ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
37
+ self.output_dir = os.path.join(project_root, output_dir)
38
+ else:
39
+ self.output_dir = output_dir
40
+
41
+ os.makedirs(self.output_dir, exist_ok=True)
42
+ logger.info(f"Initialized ReportGenerator with output directory: {self.output_dir}")
43
 
44
  def generate_report(self, repo_name, results, format_type="all"):
45
  """
 
48
  Args:
49
  repo_name (str): Name of the repository.
50
  results (dict): Analysis results.
51
+ format_type (str): Report format type (json, html, csv, or all).
52
 
53
  Returns:
54
  dict: Paths to the generated reports.
 
69
  html_path = self._generate_html_report(report_name, report_content)
70
  report_paths["html"] = html_path
71
 
 
 
 
 
72
  if format_type in ["csv", "all"]:
73
  csv_path = self._generate_csv_report(report_name, report_content)
74
  report_paths["csv"] = csv_path
 
518
  logger.info(f"Generated HTML report: {report_path}")
519
  return report_path
520
 
521
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
522
 
523
  def _generate_csv_report(self, report_name, report_content):
524
  """
src/ui/components/export_manager.py CHANGED
@@ -27,12 +27,6 @@ def create_export_manager():
27
  gr.Markdown("### πŸ“€ Export Results")
28
 
29
  with gr.Row():
30
- # PDF Export
31
- pdf_btn = gr.Button("Export as PDF", variant="secondary")
32
- pdf_format = gr.Textbox(value="pdf", visible=False)
33
- export_buttons.append((pdf_btn, pdf_format))
34
- export_formats.append(pdf_format)
35
-
36
  # JSON Export
37
  json_btn = gr.Button("Export as JSON", variant="secondary")
38
  json_format = gr.Textbox(value="json", visible=False)
 
27
  gr.Markdown("### πŸ“€ Export Results")
28
 
29
  with gr.Row():
 
 
 
 
 
 
30
  # JSON Export
31
  json_btn = gr.Button("Export as JSON", variant="secondary")
32
  json_format = gr.Textbox(value="json", visible=False)