gabriel / musehub public
feat patch task/bridge-phase7 #1 / 1
AI Agent gabriel · 150 days ago · Apr 27, 2026 · Diff

feat: add musehub_bridge_mirrors registry — Phase 7

DB model, service, API (create/list/delete mirrors), Alembic migration, test coverage across schema, integration, edge cases, data integrity, auth.

sha256:8dabe95dd23135d4650ed079750f8abaf4503a6bd46ea06a2202f1b7660c6bd4 sha
+88 symbols
sha256:61043fbdba50de8892a9af10a4d97a0fb0ab1d8a363bd8365c1142fefd61859e snapshot
+88
symbols added
0
dead code introduced
Semantic Changes 88 symbols
+ branch_labels variable variable branch_labels L17–17
+ depends_on variable variable depends_on L18–18
+ down_revision variable variable down_revision L16–16
+ downgrade function function downgrade L54–56
+ Sequence import import Sequence L10–10
+ Union import import Union L10–10
+ annotations import import annotations L8–8
+ op import import op L13–13
+ sa import import sa L12–12
+ revision variable variable revision L15–15
+ upgrade function function upgrade L21–51
~ musehub/api/routes/musehub/bridges.py .py 25 symbols added
+ _guard_repo_write function async_function _guard_repo_write L50–61
+ _to_mirror_response function function _to_mirror_response L30–47
+ create_mirror function async_function create_mirror L72–95
+ delete_mirror function async_function delete_mirror L140–156
+ APIRouter import import APIRouter L15–15
+ AsyncSession import import AsyncSession L17–17
+ CreateMirrorRequest import import CreateMirrorRequest L22–22
+ Depends import import Depends L15–15
+ HTTPException import import HTTPException L15–15
+ IntegrityError import import IntegrityError L16–16
+ MirrorListResponse import import MirrorListResponse L22–22
+ MirrorResponse import import MirrorResponse L22–22
+ MusehubBridgeMirror import import MusehubBridgeMirror L21–21
+ TokenClaims import import TokenClaims L19–19
+ annotations import import annotations L11–11
+ bridge_service import import bridge_service L23–23
+ get_db import import get_db L20–20
+ logging import import logging L13–13
+ musehub_repository import import musehub_repository L23–23
+ optional_token import import optional_token L19–19
+ require_valid_token import import require_valid_token L19–19
+ status import import status L15–15
+ list_mirrors function async_function list_mirrors L105–130
+ logger variable variable logger L25–25
+ router variable variable router L27–27
~ musehub/models/bridge.py .py 11 symbols added
+ CreateMirrorRequest class class CreateMirrorRequest L13–35
+ _validate_direction method method _validate_direction L23–28
+ _validate_url method method _validate_url L32–35
+ MirrorListResponse class class MirrorListResponse L57–61
+ MirrorResponse class class MirrorResponse L38–54
+ _VALID_DIRECTIONS variable variable _VALID_DIRECTIONS L10–10
+ CamelModel import import CamelModel L8–8
+ Field import import Field L6–6
+ annotations import import annotations L2–2
+ datetime import import datetime L4–4
+ field_validator import import field_validator L6–6
~ musehub/services/bridge_service.py .py 15 symbols added
+ _utc_now function function _utc_now L26–27
+ create_mirror function async_function create_mirror L30–52
+ delete_mirror function async_function delete_mirror L68–88
+ AsyncSession import import AsyncSession L18–18
+ CreateMirrorRequest import import CreateMirrorRequest L21–21
+ IntegrityError import import IntegrityError L17–17
+ annotations import import annotations L11–11
+ datetime import import datetime L14–14
+ db import import db L20–20
+ logging import import logging L13–13
+ select import import select L16–16
+ timezone import import timezone L14–14
+ list_mirrors function async_function list_mirrors L55–65
+ logger variable variable logger L23–23
+ update_mirror_export_state function async_function update_mirror_export_state L91–108
~ tests/test_bridge_mirrors.py .py 25 symbols added
+ _create_mirror function async_function _create_mirror L56–76
+ _create_repo function async_function _create_repo L42–53
+ AsyncClient import import AsyncClient L28–28
+ AsyncSession import import AsyncSession L30–30
+ CreateMirrorRequest import import CreateMirrorRequest L33–33
+ MirrorListResponse import import MirrorListResponse L33–33
+ MirrorResponse import import MirrorResponse L33–33
+ MusehubBridgeMirror import import MusehubBridgeMirror L32–32
+ MusehubRepo import import MusehubRepo L32–32
+ StrDict import import StrDict L34–34
+ ValidationError import import ValidationError L29–29
+ annotations import import annotations L25–25
+ pytest import import pytest L27–27
+ test_cascade_delete_on_repo_delete function async_function test_cascade_delete_on_repo_delete L235–258
+ test_create_mirror_nonexistent_repo_returns_404 function async_function test_create_mirror_nonexistent_repo_returns_404 L190–200
+ test_create_mirror_request_validates_direction function function test_create_mirror_request_validates_direction L91–104
+ test_create_mirror_stored_in_db function async_function test_create_mirror_stored_in_db L112–132
+ test_create_requires_auth function async_function test_create_requires_auth L266–284
+ test_delete_mirror_removes_row function async_function test_delete_mirror_removes_row L148–165
+ test_delete_nonexistent_mirror_returns_404 function async_function test_delete_nonexistent_mirror_returns_404 L203–213
+ test_delete_requires_owner function async_function test_delete_requires_owner L287–326
+ test_direction_invalid_returns_422 function async_function test_direction_invalid_returns_422 L216–227
+ test_duplicate_url_rejected function async_function test_duplicate_url_rejected L168–182
+ test_list_mirrors_empty_for_new_repo function async_function test_list_mirrors_empty_for_new_repo L135–145
+ test_mirror_model_has_required_fields function function test_mirror_model_has_required_fields L84–88
~ musehub/db/musehub_models.py .py 1 symbol added
+ MusehubBridgeMirror class class MusehubBridgeMirror L1344–1387
← Older Oldest on task/bridge-phase7
All commits
Newer → Latest on task/bridge-phase7

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:8dabe95dd23135d4650ed079750f8abaf4503a6bd46ea06a2202f1b7660c6bd4 --body "your comment"