Add helper functions for ProgrammingLanguage
This commit is contained in:
parent
bb153b99d5
commit
934bb49229
94
helpers/programminglanguage_helpers.py
Normal file
94
helpers/programminglanguage_helpers.py
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
from typing import List, Optional, Dict, Union
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
import random
|
||||||
|
from pydantic import BaseModel, validator
|
||||||
|
from models.programming_language import ProgrammingLanguage
|
||||||
|
|
||||||
|
def validate_language_name(name: str) -> bool:
|
||||||
|
"""
|
||||||
|
Validate programming language name format.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name: Programming language name to validate
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if name format is valid, False otherwise
|
||||||
|
"""
|
||||||
|
# Language name should be at least 1 character and contain only letters, numbers, and common symbols
|
||||||
|
return bool(name and len(name.strip()) > 0 and all(c.isalnum() or c in '+-#.' for c in name))
|
||||||
|
|
||||||
|
def get_random_language(db: Session) -> Optional[ProgrammingLanguage]:
|
||||||
|
"""
|
||||||
|
Get a random programming language from the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db: Database session
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Random ProgrammingLanguage object if any exist, None otherwise
|
||||||
|
"""
|
||||||
|
languages = db.query(ProgrammingLanguage).all()
|
||||||
|
return random.choice(languages) if languages else None
|
||||||
|
|
||||||
|
def get_language_by_name(db: Session, name: str) -> Optional[ProgrammingLanguage]:
|
||||||
|
"""
|
||||||
|
Get a programming language by its name.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db: Database session
|
||||||
|
name: Language name to search for
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ProgrammingLanguage object if found, None otherwise
|
||||||
|
"""
|
||||||
|
return db.query(ProgrammingLanguage).filter(ProgrammingLanguage.name == name).first()
|
||||||
|
|
||||||
|
def create_language_safely(
|
||||||
|
db: Session,
|
||||||
|
name: str,
|
||||||
|
description: Optional[str] = None
|
||||||
|
) -> Union[ProgrammingLanguage, Dict[str, str]]:
|
||||||
|
"""
|
||||||
|
Create a new programming language with validation and error handling.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db: Database session
|
||||||
|
name: Language name
|
||||||
|
description: Optional language description
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ProgrammingLanguage object if created successfully, error dict otherwise
|
||||||
|
"""
|
||||||
|
if not validate_language_name(name):
|
||||||
|
return {"error": "Invalid language name format"}
|
||||||
|
|
||||||
|
existing_language = get_language_by_name(db, name)
|
||||||
|
if existing_language:
|
||||||
|
return {"error": "Language already exists"}
|
||||||
|
|
||||||
|
db_language = ProgrammingLanguage(
|
||||||
|
name=name,
|
||||||
|
description=description
|
||||||
|
)
|
||||||
|
|
||||||
|
db.add(db_language)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_language)
|
||||||
|
|
||||||
|
return db_language
|
||||||
|
|
||||||
|
def filter_languages_by_pattern(db: Session, pattern: str) -> List[ProgrammingLanguage]:
|
||||||
|
"""
|
||||||
|
Filter programming languages by name pattern.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
db: Database session
|
||||||
|
pattern: Search pattern to filter languages
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of ProgrammingLanguage objects matching the pattern
|
||||||
|
"""
|
||||||
|
search = f"%{pattern}%"
|
||||||
|
return db.query(ProgrammingLanguage).filter(
|
||||||
|
ProgrammingLanguage.name.ilike(search)
|
||||||
|
).all()
|
Loading…
x
Reference in New Issue
Block a user