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