A wheel whose top-level module is `app` collides with anything else in a user's venv, so the package that is about to be published takes the name it is published under. Only the Python package moves; the repo, the Docker WORKDIR and the compose project keep theirs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
46 lines
1.0 KiB
Python
46 lines
1.0 KiB
Python
from typing import Any
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from fluksio.api.deps import SessionDep
|
|
from fluksio.core.config import settings
|
|
from fluksio.core.security import get_password_hash
|
|
from fluksio.models import (
|
|
User,
|
|
UserPublic,
|
|
)
|
|
|
|
router = APIRouter(tags=["private"], prefix="/private")
|
|
|
|
|
|
def _require_private_api() -> None:
|
|
if not (settings.ENVIRONMENT == "local" and settings.PRIVATE_API_ENABLED):
|
|
raise HTTPException(status_code=403, detail="Private API is disabled")
|
|
|
|
|
|
class PrivateUserCreate(BaseModel):
|
|
email: str
|
|
password: str
|
|
full_name: str
|
|
is_verified: bool = False
|
|
|
|
|
|
@router.post("/users/", response_model=UserPublic)
|
|
def create_user(user_in: PrivateUserCreate, session: SessionDep) -> Any:
|
|
"""
|
|
Create a new user.
|
|
"""
|
|
_require_private_api()
|
|
|
|
user = User(
|
|
email=user_in.email,
|
|
full_name=user_in.full_name,
|
|
hashed_password=get_password_hash(user_in.password),
|
|
)
|
|
|
|
session.add(user)
|
|
session.commit()
|
|
|
|
return user
|