Skip to content

Commit a8a7863

Browse files
author
Tom Softreck
committed
update structure
1 parent 918a0e2 commit a8a7863

File tree

2 files changed

+70
-21
lines changed

2 files changed

+70
-21
lines changed

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
[![PyPI Version](https://img.shields.io/pypi/v/taskprovision.svg)](https://pypi.org/project/taskprovision/)
66
[![Python Version](https://img.shields.io/pypi/pyversions/taskprovision.svg)](https://pypi.org/project/taskprovision/)
7-
[![License](https://img.shields.io/pypi/l/taskprovision.svg)](https://github.com/softreck/taskprovision/blob/main/LICENSE)
8-
[![Build Status](https://img.shields.io/github/actions/workflow/status/softreck/taskprovision/tests.yml?branch=main&label=tests)](https://github.com/softreck/taskprovision/actions)
9-
[![Code Coverage](https://img.shields.io/codecov/c/github/softreck/taskprovision?label=coverage)](https://codecov.io/gh/softreck/taskprovision)
7+
[![License](https://img.shields.io/pypi/l/taskprovision.svg)](https://github.com/taskprovision/python/blob/main/LICENSE)
8+
[![Build Status](https://img.shields.io/github/actions/workflow/status/taskprovision/python/tests.yml?branch=main&label=tests)](https://github.com/taskprovision/python/actions)
9+
[![Code Coverage](https://img.shields.io/codecov/c/github/taskprovision/python?label=coverage)](https://codecov.io/gh/taskprovision/python)
1010
[![Documentation Status](https://img.shields.io/readthedocs/taskprovision/latest?label=docs)](https://taskprovision.readthedocs.io/)
1111
[![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
12-
[![Code Quality](https://img.shields.io/lgtm/grade/python/github/softreck/taskprovision.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/softreck/taskprovision/context:python)
13-
[![Total alerts](https://img.shields.io/lgtm/alerts/g/softreck/taskprovision.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/softreck/taskprovision/alerts/)
12+
[![Code Quality](https://img.shields.io/lgtm/grade/python/github/taskprovision/python.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/taskprovision/python/context:python)
13+
[![Total alerts](https://img.shields.io/lgtm/alerts/g/taskprovision/python.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/taskprovision/python/alerts/)
1414
[![PyPI Downloads](https://img.shields.io/pypi/dm/taskprovision.svg?color=blue)](https://pypistats.org/packages/taskprovision)
1515
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
1616
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

src/taskprovision/core/code_generator.py

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -603,38 +603,83 @@ def _get_sql_prompt(self) -> str:
603603
Generate optimized SQL code:"""
604604
605605
async def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationResult:
606-
"""Generate code based on request"""
606+
"""Generate code based on request with enhanced error handling.
607+
608+
Args:
609+
request: CodeGenerationRequest containing generation parameters
610+
611+
Returns:
612+
CodeGenerationResult with the generated code and quality metrics
613+
614+
Raises:
615+
ValueError: If request validation fails
616+
RuntimeError: If code generation fails after maximum retries
617+
"""
607618
import time
608619
start_time = time.time()
609620
621+
# Input validation
622+
if not request or not isinstance(request, CodeGenerationRequest):
623+
raise ValueError("Request must be a valid CodeGenerationRequest instance")
624+
625+
if not request.description or not request.description.strip():
626+
raise ValueError("Description cannot be empty")
627+
628+
if not isinstance(request.language, CodeLanguage):
629+
raise ValueError(f"Invalid language: {request.language}. Must be a CodeLanguage enum value")
630+
631+
if request.max_length <= 0:
632+
raise ValueError(f"max_length must be positive, got {request.max_length}")
633+
634+
logger.info(f"Generating {request.language.value} code for: {request.description[:100]}...")
635+
610636
try:
611637
# Build prompt
612638
prompt = self._build_prompt(request)
613639
614-
# Generate initial code
615-
generated_code = await self._generate_initial_code(prompt)
640+
# Generate initial code with retry logic
641+
try:
642+
generated_code = await self._generate_initial_code(prompt)
643+
except Exception as e:
644+
raise RuntimeError(f"Failed to generate initial code: {str(e)}") from e
616645
617646
# Quality check and improvement
618-
quality_result = await self._improve_code_quality(
619-
generated_code,
620-
request.language,
621-
max_iterations=3
622-
)
647+
try:
648+
quality_result = await self._improve_code_quality(
649+
generated_code,
650+
request.language,
651+
max_iterations=3
652+
)
653+
except Exception as e:
654+
logger.warning(f"Code quality improvement failed, using initial code: {str(e)}")
655+
quality_result = {
656+
'code': generated_code,
657+
'score': 0.7, # Default score for unimproved code
658+
'suggestions': ["Quality improvement step was skipped"],
659+
'iterations': 0
660+
}
623661
624662
# Generate tests if Python
625663
tests = None
626664
if request.language == CodeLanguage.PYTHON:
627-
tests = await self._generate_tests(quality_result['code'])
665+
try:
666+
tests = await self._generate_tests(quality_result['code'])
667+
except Exception as e:
668+
logger.warning(f"Test generation failed: {str(e)}")
628669
629670
# Generate documentation
630-
documentation = await self._generate_documentation(
631-
quality_result['code'],
632-
request.language
633-
)
671+
try:
672+
documentation = await self._generate_documentation(
673+
quality_result['code'],
674+
request.language
675+
)
676+
except Exception as e:
677+
logger.warning(f"Documentation generation failed: {str(e)}")
678+
documentation = "Documentation generation failed"
634679
635680
execution_time = time.time() - start_time
636681
637-
return CodeGenerationResult(
682+
result = CodeGenerationResult(
638683
generated_code=quality_result['code'],
639684
language=request.language,
640685
quality_score=quality_result['score'],
@@ -645,9 +690,13 @@ async def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationR
645690
iterations=quality_result['iterations']
646691
)
647692
693+
logger.info(f"Successfully generated {request.language.value} code in {execution_time:.2f}s")
694+
return result
695+
648696
except Exception as e:
649-
logger.error(f"Code generation failed: {e}")
650-
raise
697+
error_msg = f"Code generation failed: {str(e)}"
698+
logger.error(error_msg, exc_info=True)
699+
raise RuntimeError(error_msg) from e
651700
652701
def _build_prompt(self, request: CodeGenerationRequest) -> str:
653702
"""Build prompt for code generation"""

0 commit comments

Comments
 (0)