From 58e972e65fed75e070fe8792b60d13a1311a5050 Mon Sep 17 00:00:00 2001 From: venus Date: Wed, 4 Mar 2026 19:46:37 -0600 Subject: [PATCH] vault clones from env vars in compose --- .env | 3 ++- Dockerfile | 23 +++++++++++++++++----- app/__init__.py | 19 ++++++++++++++---- app/build.py | 47 ++++++++++++++++++++++++++++---------------- app/requirements.txt | 2 +- compose.yml | 4 ++++ 6 files changed, 70 insertions(+), 28 deletions(-) diff --git a/.env b/.env index bbd444d..e3092b1 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ obsidian_vault=/home/venus/Documents/Personal-Wiki -obsidian_vault_url=https://git.riverrooks.dev/Personal-Wiki +obsidian_vault_url=git.riverrooks.dev/Personal-Wiki +OBSIDIAN_VAULT_URL=git.riverrooks.dev/Personal-Wiki obsidian_vault_token=bd8cd9301ae2c1c5bacfb3340492acb5e862686a diff --git a/Dockerfile b/Dockerfile index 68174db..9e0b518 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,26 @@ FROM python:3.14-slim -ARG DEBUG_MODE=0 -ENV FLASK_DEBUG=$DEBUG_MODE -ENV FLASK_APP=app - -RUN mkdir /app +#install git +RUN apt-get update && apt-get install -y \ + git \ + && rm -rf /var/lib/apt/lists/* +#install dependencies +RUN mkdir /app COPY app/requirements.txt /app RUN pip3 install -r /app/requirements.txt +#parse from .env file +ARG DEBUG_MODE=0 +ARG obsidian_vault=/home/venus/Documents/Personal-Wiki +ARG OBSIDIAN_VAULT_URL=git.riverrooks.dev/venus/Personal-Wiki +ARG obsidian_vault_token=bd8cd9301ae2c1c5bacfb3340492acb5e862686a + +ENV FLASK_DEBUG=$DEBUG_MODE +ENV FLASK_APP=app +# ENV OBSIDIAN_VAULT=$obsidian_vault +ENV OBSIDIAN_VAULT_URL=$OBSIDIAN_VAULT_URL +ENV OBSIDIAN_VAULT_TOKEN=$obsidian_vault_token + COPY app /app ENTRYPOINT ["flask"] diff --git a/app/__init__.py b/app/__init__.py index b579650..72fcb53 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -2,10 +2,24 @@ from flask import Flask from app import build from pathlib import Path import markdown +import os +from dotenv import load_dotenv + +vault_path = os.getenv("VAULT_PATH", "/vault") # Optional default value app = Flask(__name__) CONTENT_DIR = Path("/content") +VAULT_DIR = "/vault" + +build.obsidian_vault(VAULT_DIR) +# Find obsidian vault path or clone it +# if not os.path.exists(VAULT_DIR): +# # print(os.getenv("OBSIDIAN_VAULT_URL")) +# build.clone_gittea_repo(os.getenv("OBSIDIAN_VAULT_URL"), VAULT_DIR, os.getenv("OBSIDIAN_VALUT_TOKEN")) +# else: +# print("vault already exists") + @app.route("/") def index(): @@ -15,9 +29,6 @@ def index(): html_content = markdown.markdown(md_content) return html_content -@app.route ("/") +@app.route ("/") # renders a filename if not otherwise specified def render_post(filename): return build.render_file(filename, CONTENT_DIR) - # return "test" - - # return rm(filename) diff --git a/app/build.py b/app/build.py index 8d04fc0..5f48b42 100644 --- a/app/build.py +++ b/app/build.py @@ -2,6 +2,7 @@ from obsidian_parser import Vault import shutil import markdown from pathlib import Path +import os def render_file(filename: str, contentPath: Path): #renders markwown from filename @@ -16,24 +17,36 @@ def render_file(filename: str, contentPath: Path): #renders markwown from filena htmlContent = markdown.markdown(textContent) return htmlContent -print("build imported") -# def clone_gittea_repo(url: str, token: str = "", dest: str): # clone a gittea repo using optional security token into dest dirand return a path to the directory - # return dest +def obsidian_vault(dest = "/vault"): # makes sure there is a vault in dest + if os.path.exists(dest): + return "vault exists" -# def public_notes(src: str): # return a list of notes tagged with public from an obsidian directory -# # build vault from source -# vault = Vault(src) -# if vault: -# print ("found vault") -# else: -# print("could not find vault") -# return [] + from git import Repo + url = os.getenv("OBSIDIAN_VAULT_URL") + token = os.getenv("OBSIDIAN_VAULT_TOKEN") -# # return a list ofnotes -# return vault.get_notes_with_tag("public") + if token: + print ("token found") + url = f"https://{token}@{url}" + + print (f"building vault from {url} in {dest}") + Repo.clone_from(url, dest) + print("finished vault!") + +def public_notes(src: str): # return a list of notes tagged with public from an obsidian directory + # build vault from source + vault = Vault(src) + if vault: + print ("found vault") + else: + print("could not find vault") + return [] + + # return a list ofnotes + return vault.get_notes_with_tag("public") -# def buld_public_vault(src: str, dest: str): # build the public vault in dest from an obsidian repo in src -# for note in public_notes(src): -# print(note.title) -# shutil.copy2(f"{note.path}", dest) +# def public_vault(dest: str, url = "", token = ""): # build the public vault in dest from an obsidian repo in src + # for note in public_notes(src): + # print(note.title) + # shutil.copy2(f"{note.path}", dest) diff --git a/app/requirements.txt b/app/requirements.txt index 6522df1..ab354de 100755 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -2,4 +2,4 @@ flask markdown obsidianmd-parser GitPython -py-gitea +python-dotenv diff --git a/compose.yml b/compose.yml index 00a8d1b..07c604d 100755 --- a/compose.yml +++ b/compose.yml @@ -3,10 +3,14 @@ services: build: args: - DEBUG_MODE=1 + - obsidian_vault_url=https://git.riverrooks.dev/Personal-Wiki + - obsidian_vault_token=bd8cd9301ae2c1c5bacfb3340492acb5e862686a + ports: - '80:80' volumes: - ./content:/content + # - /home/venus/Documents/Personal-Wiki:/vault # public_vault_builder: # build: # context: public_vault_builder