add id loader
This commit is contained in:
parent
641d3ed37c
commit
ee56aa0008
@ -1,3 +1,9 @@
|
|||||||
|
networks:
|
||||||
|
mariadb:
|
||||||
|
external: true
|
||||||
|
name: mariadb
|
||||||
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drive-sync:
|
drive-sync:
|
||||||
image: t0is/transcriptor-gdrive-sync:latest
|
image: t0is/transcriptor-gdrive-sync:latest
|
||||||
@ -5,4 +11,14 @@ services:
|
|||||||
# Set your target Google Drive folder ID here.
|
# Set your target Google Drive folder ID here.
|
||||||
- DRIVE_FOLDER_ID=1qjq9XEC19g6LGw6fwcZXSQYgOO2YuAOA
|
- DRIVE_FOLDER_ID=1qjq9XEC19g6LGw6fwcZXSQYgOO2YuAOA
|
||||||
volumes:
|
volumes:
|
||||||
- /shared/transcriptor/clips:/shared/transcriptor/clips
|
- /shared/transcriptor/clips:/shared/transcriptor/clips
|
||||||
|
|
||||||
|
drive-id-loader:
|
||||||
|
image: t0is/transcriptor-gdrive-sync:id_loader
|
||||||
|
environment:
|
||||||
|
# Set your target Google Drive folder ID here.
|
||||||
|
- DRIVE_FOLDER_ID=1qjq9XEC19g6LGw6fwcZXSQYgOO2YuAOA
|
||||||
|
volumes:
|
||||||
|
- /shared/transcriptor/clips:/shared/transcriptor/clips
|
||||||
|
networks:
|
||||||
|
- mariadb
|
||||||
|
18
docker/id_loader/Dockerfile
Normal file
18
docker/id_loader/Dockerfile
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM python:3.9-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install required system packages including MariaDB development headers and gcc
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y curl rclone bash unzip libmariadb-dev gcc && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy requirements file (if you have one) and install Python dependencies
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir mariadb
|
||||||
|
|
||||||
|
# Copy application code, the entrypoint script, and channels.json
|
||||||
|
COPY gdrive_id_loader.py .
|
||||||
|
COPY rclone.conf /root/.config/rclone/rclone.conf
|
||||||
|
# Default command
|
||||||
|
CMD ["python", "-u", "gdrive_id_loader.py"]
|
90
gdrive_id_loader.py
Normal file
90
gdrive_id_loader.py
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import mariadb
|
||||||
|
|
||||||
|
# Configuration – update these values as needed.
|
||||||
|
LOCAL_DIR = "/shared/transcriptor/clips" # Local folder where clips are stored
|
||||||
|
REMOTE_NAME = "gdrive" # rclone remote name for Google Drive
|
||||||
|
|
||||||
|
# Connect to the MariaDB database
|
||||||
|
try:
|
||||||
|
conn = mariadb.connect(
|
||||||
|
host=os.environ.get("DB_HOST", "192.168.0.187"),
|
||||||
|
user=os.environ.get("DB_USER", "t0is"),
|
||||||
|
password=os.environ.get("DB_PASS", "Silenceisgolden555"),
|
||||||
|
database=os.environ.get("DB_NAME", "transcriptor"),
|
||||||
|
port=int(os.environ.get("DB_PORT", 3306))
|
||||||
|
)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(f"Error connecting to MariaDB: {e}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def get_rclone_link(relative_path):
|
||||||
|
"""
|
||||||
|
Uses rclone to generate a shareable link for the file at the given relative path.
|
||||||
|
"""
|
||||||
|
remote_path = f"{REMOTE_NAME}:{relative_path}"
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["rclone", "link", remote_path],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
check=True
|
||||||
|
)
|
||||||
|
return result.stdout.strip()
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(f"Error obtaining rclone link for {remote_path}: {e.stderr}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def extract_file_id(link):
|
||||||
|
"""
|
||||||
|
Extracts the Google Drive file ID from the shareable URL.
|
||||||
|
Expected URL format: https://drive.google.com/file/d/FILE_ID/view?usp=sharing
|
||||||
|
"""
|
||||||
|
match = re.search(r"/d/([^/]+)/", link)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def update_database(filename, file_id):
|
||||||
|
"""
|
||||||
|
Updates the clips table in the database with the provided Google Drive file ID.
|
||||||
|
This example uses the base name of the file to match the record.
|
||||||
|
Adjust the query as needed for your schema.
|
||||||
|
"""
|
||||||
|
base = os.path.basename(filename)
|
||||||
|
query = "UPDATE clips SET gdrive_file_id = ? WHERE filename LIKE ?"
|
||||||
|
like_pattern = f"%{base}%"
|
||||||
|
try:
|
||||||
|
cursor.execute(query, (file_id, like_pattern))
|
||||||
|
conn.commit()
|
||||||
|
print(f"Updated {base} with file_id: {file_id}")
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(f"Database update failed for {base}: {e}")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Walk through the local directory recursively
|
||||||
|
for root, dirs, files in os.walk(LOCAL_DIR):
|
||||||
|
for file in files:
|
||||||
|
full_path = os.path.join(root, file)
|
||||||
|
# Compute the relative path to preserve folder structure in the remote
|
||||||
|
rel_path = os.path.relpath(full_path, LOCAL_DIR)
|
||||||
|
print(f"Processing file: {full_path} (relative: {rel_path})")
|
||||||
|
link = get_rclone_link(rel_path)
|
||||||
|
if link:
|
||||||
|
file_id = extract_file_id(link)
|
||||||
|
if file_id:
|
||||||
|
update_database(rel_path, file_id)
|
||||||
|
else:
|
||||||
|
print(f"Could not extract file ID from link: {link}")
|
||||||
|
else:
|
||||||
|
print(f"No link generated for file: {full_path}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
@ -3,6 +3,6 @@ type = drive
|
|||||||
client_id = 830644885820-9792hiic15cmglcbjg5nl210im3m7m6r.apps.googleusercontent.com
|
client_id = 830644885820-9792hiic15cmglcbjg5nl210im3m7m6r.apps.googleusercontent.com
|
||||||
client_secret = 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
|
client_secret = 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
|
||||||
scope = drive
|
scope = drive
|
||||||
token = {"access_token":"ya29.a0AeXRPp6RfjrFgD1T1RpH5lMnj9sUc55ePQo0THDsX5OCagZ-u7NXcu0scNuBBvzim9lUvhi8L0x4UQ2g9HuvfdTnP8ydd3T00PxK89pXFUdRMKKajDHIAJw2Upg8d-dtZQnLPjERyqNtx6sls5DJxM7i2l4Ezg2utctrAlf5aCgYKAaASARMSFQHGX2MiE4vJaQGY_rrfT5oXAtwVoA0175","token_type":"Bearer","refresh_token":"1//09gDVl-tGofbeCgYIARAAGAkSNwF-L9IrXic-IxKKryOSicpnI8nX-lzEfe43dcgiCQ4f4KPnQqzSi3VfDHQ5vSqziAJGlQgjw3k","expiry":"2025-03-21T16:39:18.807206+01:00"}
|
token = {"access_token":"ya29.a0AeXRPp5DaLsik9K5sYbr-xRi89lGpkpum_lk74JvBA5ua9DusiFfIVxxBqEjvMlRBmBrRQHx31a4TzQ51GsQQBKnObJPPDNKzTb7KXhOLzAGjT0zBITzQ9K2-ystJNfKv1nMGfDiVje11iOvp3UsynFcBjJj2CS4Qp8rJgqLaCgYKAcASARMSFQHGX2MiykOVhvsUmJ8n1S1TqaOskg0175","token_type":"Bearer","refresh_token":"1//098qddus5NnV-CgYIARAAGAkSNwF-L9Ir4Pm0HUGMFopHsJ4yxSfM1-jjIXaU0AhOyYFriHmf7qVsVPQ6Mxm1ZB5NhcAPiSUp9t4","expiry":"2025-04-01T18:10:24.926353+02:00"}
|
||||||
team_drive =
|
team_drive =
|
||||||
|
|
||||||
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
mariadb
|
Loading…
Reference in New Issue
Block a user