71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
from pathlib import Path
|
|
from settings import SHOUTS_REPO
|
|
|
|
import asyncio
|
|
import subprocess
|
|
|
|
|
|
class GitTask:
|
|
"""every shout update use a new task"""
|
|
|
|
queue = asyncio.Queue()
|
|
|
|
def __init__(self, input, username, user_email, comment):
|
|
self.slug = input["slug"]
|
|
self.shout_body = input["body"]
|
|
self.username = username
|
|
self.user_email = user_email
|
|
self.comment = comment
|
|
|
|
GitTask.queue.put_nowait(self)
|
|
|
|
def init_repo(self):
|
|
repo_path = "%s" % (SHOUTS_REPO)
|
|
|
|
Path(repo_path).mkdir()
|
|
|
|
cmd = (
|
|
"cd %s && git init && "
|
|
"git config user.name 'discours' && "
|
|
"git config user.email 'discours@discours.io' && "
|
|
"touch initial && git add initial && "
|
|
"git commit -m 'init repo'" % (repo_path)
|
|
)
|
|
output = subprocess.check_output(cmd, shell=True)
|
|
print(output)
|
|
|
|
def execute(self):
|
|
repo_path = "%s" % (SHOUTS_REPO)
|
|
|
|
if not Path(repo_path).exists():
|
|
self.init_repo()
|
|
|
|
# cmd = "cd %s && git checkout master" % (repo_path)
|
|
# output = subprocess.check_output(cmd, shell=True)
|
|
# print(output)
|
|
|
|
shout_filename = "%s.mdx" % (self.slug)
|
|
shout_full_filename = "%s/%s" % (repo_path, shout_filename)
|
|
with open(shout_full_filename, mode="w", encoding="utf-8") as shout_file:
|
|
shout_file.write(bytes(self.shout_body, "utf-8").decode("utf-8", "ignore"))
|
|
|
|
author = "%s <%s>" % (self.username, self.user_email)
|
|
cmd = "cd %s && git add %s && git commit -m '%s' --author='%s'" % (
|
|
repo_path,
|
|
shout_filename,
|
|
self.comment,
|
|
author,
|
|
)
|
|
output = subprocess.check_output(cmd, shell=True)
|
|
print(output)
|
|
|
|
@staticmethod
|
|
async def git_task_worker():
|
|
print("[service.git] starting task worker")
|
|
while True:
|
|
task = await GitTask.queue.get()
|
|
try:
|
|
task.execute()
|
|
except Exception as err:
|
|
print("[service.git] worker error: %s" % (err))
|