Compare commits
8 Commits
0f423166f1
...
v0.6.0
Author | SHA1 | Date | |
---|---|---|---|
5129cb449e | |||
4d6efac3c4 | |||
88b820e90d | |||
afefea6f68
|
|||
e5fad5ba92
|
|||
5174602c31
|
|||
0043abdbad
|
|||
1bcca0f812 |
13
README.md
13
README.md
@@ -59,6 +59,19 @@ First you need to have a Python interpreter, MongoDB and optionally git. You can
|
||||
|
||||
Learn more about available uvicorn arguments using `uvicorn --help`
|
||||
|
||||
## Upgrading
|
||||
|
||||
When a new version comes out, sometimes you want to upgrade your instance right away. Here's a checklist what to do:
|
||||
|
||||
1. Carefully read the patch notes of the version you want to update to and all the versions that came out between the release of your version and the one you want to upgrade to.
|
||||
Breaking changes will be marked so and config updates will also be described in the patch notes
|
||||
2. Make a backup of your currently working instance. This includes both the PhotosAPI and the database
|
||||
3. Download the latest version using git (`git pull` if you cloned the repo in the past) or from the releases
|
||||
4. Reconfigure the config if needed and apply the changes from the patch notes
|
||||
5. Upgrade the dependencies in your virtual environment using `pip install -r requirements.txt`
|
||||
6. Start the migration using `python photos_api.py --migrate` from your virtual environment
|
||||
7. Test if everything works and troubleshoot/rollback if not
|
||||
|
||||
## Using as a service
|
||||
|
||||
It's a good practice to use your API as a systemd service on Linux. Here's a quick overview how that can be done.
|
||||
|
9
migrations/202311251700.py
Normal file
9
migrations/202311251700.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from mongodb_migrations.base import BaseMigration
|
||||
|
||||
|
||||
class Migration(BaseMigration):
|
||||
def upgrade(self):
|
||||
self.db.users.update_many({}, {"$set": {"quota": None}})
|
||||
|
||||
def downgrade(self):
|
||||
self.db.test_collection.update_many({}, {"$unset": "quota"})
|
23
modules/migrator.py
Normal file
23
modules/migrator.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from typing import Any, Mapping
|
||||
|
||||
from mongodb_migrations.cli import MigrationManager
|
||||
from mongodb_migrations.config import Configuration
|
||||
|
||||
from modules.utils import configGet
|
||||
|
||||
|
||||
def migrate_database() -> None:
|
||||
"""Apply migrations from folder `migrations/` to the database"""
|
||||
db_config: Mapping[str, Any] = configGet("database")
|
||||
|
||||
manager_config = Configuration(
|
||||
{
|
||||
"mongo_host": db_config["host"],
|
||||
"mongo_port": db_config["port"],
|
||||
"mongo_database": db_config["name"],
|
||||
"mongo_username": db_config["user"],
|
||||
"mongo_password": db_config["password"],
|
||||
}
|
||||
)
|
||||
manager = MigrationManager(manager_config)
|
||||
manager.run()
|
@@ -90,7 +90,9 @@ async def get_user(user: str) -> UserInDB:
|
||||
return UserInDB(
|
||||
user=found_user["user"],
|
||||
email=found_user["email"],
|
||||
quota=found_user["quota"],
|
||||
quota=found_user["quota"]
|
||||
if found_user["quota"] is not None
|
||||
else configGet("default_user_quota"),
|
||||
disabled=found_user["disabled"],
|
||||
hash=found_user["hash"],
|
||||
)
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from argparse import ArgumentParser
|
||||
from os import makedirs
|
||||
from pathlib import Path
|
||||
|
||||
@@ -6,6 +7,7 @@ from fastapi.responses import FileResponse
|
||||
|
||||
from modules.app import app
|
||||
from modules.extensions_loader import dynamic_import_from_src
|
||||
from modules.migrator import migrate_database
|
||||
from modules.scheduler import scheduler
|
||||
|
||||
makedirs(Path("data/users"), exist_ok=True)
|
||||
@@ -27,3 +29,15 @@ dynamic_import_from_src("extensions", star_import=True)
|
||||
# =================================================================================
|
||||
|
||||
scheduler.start()
|
||||
|
||||
parser = ArgumentParser(
|
||||
prog="PhotosAPI",
|
||||
description="Small and simple API server for saving photos and videos.",
|
||||
)
|
||||
|
||||
parser.add_argument("--migrate", action="store_true")
|
||||
|
||||
args, unknown = parser.parse_known_args()
|
||||
|
||||
if args.migrate:
|
||||
migrate_database()
|
||||
|
@@ -2,6 +2,7 @@ aiofiles==23.2.1
|
||||
apscheduler~=3.10.1
|
||||
exif==1.6.0
|
||||
fastapi[all]==0.104.1
|
||||
mongodb-migrations==1.3.0
|
||||
opencv-python~=4.8.1.78
|
||||
passlib~=1.7.4
|
||||
pymongo>=4.3.3
|
||||
|
Reference in New Issue
Block a user