Add code
This commit is contained in:
parent
0dd64a9fc3
commit
ae24ede23e
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
content
|
||||
content.zip
|
||||
venv
|
||||
env
|
||||
.venv
|
||||
.env
|
5
commit_script.sh
Executable file
5
commit_script.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
cd content
|
||||
git add .
|
||||
git commit -m "$(date -Iseconds)"
|
||||
git push --set-upstream origin $GIT_BRANCH_NAME
|
13
pre_sync.sh
Executable file
13
pre_sync.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
git clone "$GIT_REMOTE_URL" content
|
||||
cd content
|
||||
git switch -c "$GIT_BRANCH_NAME"
|
||||
git config user.name "$GIT_USER_NAME"
|
||||
git config user.email "$GIT_USER_EMAIL"
|
||||
git remote add origin "$GIT_REMOTE_URL"
|
||||
git fetch
|
||||
# The next command could fail if the branch is not yet created on the remote.
|
||||
git branch --set-upstream-to="origin/$GIT_BRANCH_NAME"
|
||||
if [ $? -eq 0 ]; then
|
||||
git pull
|
||||
fi
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
beautifulsoup4
|
||||
requests
|
63
sync.py
Normal file
63
sync.py
Normal file
@ -0,0 +1,63 @@
|
||||
from sys import path as file_dir
|
||||
from os import chdir
|
||||
from shutil import unpack_archive
|
||||
from subprocess import run
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
settings = {
|
||||
# Overleaf instance url
|
||||
"OVERLEAF_INSTANCE_URL": "http://hostname.com",
|
||||
# Project id (can be seen in the url when project is opened)
|
||||
"OVERLEAF_PROJECT_ID": "",
|
||||
# Overleaf login email
|
||||
"OVERLEAF_USER_EMAIL": "",
|
||||
# Overleaf login password
|
||||
"OVERLEAF_USER_PASSWORD": "",
|
||||
# A subdirectory where the project code is stored to in repository
|
||||
"GIT_SUBDIR": "latex",
|
||||
# Git branch name
|
||||
"GIT_BRANCH_NAME": "main",
|
||||
# Git commit user name
|
||||
"GIT_USER_NAME": "User Name",
|
||||
# Git commit user email
|
||||
"GIT_USER_EMAIL": "user@domain.com",
|
||||
# Git repository url. Repo must already be created
|
||||
"GIT_REMOTE_URL": "git@github.com:user/repo.git"
|
||||
}
|
||||
|
||||
def main():
|
||||
# Prepare repository directory
|
||||
run(["/bin/bash", "-c", "./pre_sync.sh"], env=settings)
|
||||
|
||||
# Get data from overleaf
|
||||
s = requests.Session()
|
||||
# First get the login site to get a valid csrf token
|
||||
r = s.get(f"{settings['OVERLEAF_INSTANCE_URL']}/login")
|
||||
soup = BeautifulSoup(r.text, "html.parser")
|
||||
csrf_token = soup.select_one('input[name="_csrf"]')['value']
|
||||
|
||||
# Now login
|
||||
r = s.post(f"{settings['OVERLEAF_INSTANCE_URL']}/login", json={"email": settings["OVERLEAF_USER_EMAIL"], "password": settings["OVERLEAF_USER_PASSWORD"], "_csrf": csrf_token}, headers={"Content-Type": "application/json", "X-Csrf-Token": csrf_token})
|
||||
# Then just download the project zip file
|
||||
r = s.get(f"{settings['OVERLEAF_INSTANCE_URL']}/project/{settings['OVERLEAF_PROJECT_ID']}/download/zip")
|
||||
with open("content.zip", "wb") as file:
|
||||
file.write(r.content)
|
||||
|
||||
# Unzip it
|
||||
unzip_path = "content"
|
||||
if(settings["GIT_SUBDIR"] and settings["GIT_SUBDIR"] != ""):
|
||||
unzip_path += "/" + settings["GIT_SUBDIR"]
|
||||
unpack_archive("content.zip", unzip_path)
|
||||
|
||||
# Git commit and push
|
||||
run(["/bin/bash", "-c", "./commit_script.sh"], env=settings)
|
||||
|
||||
# Cleanup
|
||||
run(["rm", "content.zip"])
|
||||
run(["rm", "-rf", "content"])
|
||||
|
||||
if __name__ == "__main__":
|
||||
chdir(file_dir[0])
|
||||
main()
|
Loading…
Reference in New Issue
Block a user