add git task
This commit is contained in:
parent
46941749b6
commit
848908aca0
4
main.py
4
main.py
|
@ -12,6 +12,9 @@ from auth.authenticate import JWTAuthenticate
|
|||
from auth.oauth import oauth_login, oauth_authorize
|
||||
from redis import redis
|
||||
from resolvers.base import resolvers
|
||||
from resolvers.zine import GitTask
|
||||
|
||||
import asyncio
|
||||
|
||||
import_module('resolvers')
|
||||
schema = make_executable_schema(load_schema_from_path("schema.graphql"), resolvers)
|
||||
|
@ -23,6 +26,7 @@ middleware = [
|
|||
|
||||
async def start_up():
|
||||
await redis.connect()
|
||||
git_task = asyncio.create_task(GitTask.git_task_worker())
|
||||
|
||||
|
||||
async def shutdown():
|
||||
|
|
|
@ -7,6 +7,47 @@ from auth.authenticate import login_required
|
|||
from settings import SHOUTS_REPO
|
||||
|
||||
import subprocess
|
||||
import asyncio
|
||||
|
||||
class GitTask:
|
||||
|
||||
queue = asyncio.Queue()
|
||||
|
||||
def __init__(self, shout_id, shout_body, username, user_email, comment):
|
||||
self.shout_id = shout_id;
|
||||
self.shout_body = shout_body;
|
||||
self.username = username;
|
||||
self.user_email = user_email;
|
||||
self.comment = comment;
|
||||
|
||||
GitTask.queue.put_nowait(self)
|
||||
|
||||
def execute(self):
|
||||
cmd = "cd %s; git checkout master" % (SHOUTS_REPO)
|
||||
output = subprocess.check_output(cmd, shell=True)
|
||||
print(output)
|
||||
|
||||
shout_filename = "shout%s.md" % (self.shout_id)
|
||||
shout_full_filename = "%s/%s" % (SHOUTS_REPO, shout_filename)
|
||||
with open(shout_full_filename, mode='w', encoding='utf-8') as shout_file:
|
||||
shout_file.write(self.shout_body)
|
||||
|
||||
author = "%s <%s>" % (self.username, self.user_email)
|
||||
cmd = "cd %s; git add %s; git commit -m '%s' --author='%s'" % \
|
||||
(SHOUTS_REPO, shout_filename, self.comment, author)
|
||||
output = subprocess.check_output(cmd, shell=True)
|
||||
print(output)
|
||||
|
||||
@staticmethod
|
||||
async def git_task_worker():
|
||||
print("git task worker start")
|
||||
while True:
|
||||
task = await GitTask.queue.get()
|
||||
try:
|
||||
task.execute()
|
||||
except Exception as err:
|
||||
print("git task worker error = %s" % (err))
|
||||
|
||||
|
||||
@query.field("topShouts")
|
||||
async def top_shouts(_, info):
|
||||
|
@ -26,24 +67,21 @@ async def create_shout(_, info, body):
|
|||
auth = info.context["request"].auth
|
||||
user_id = auth.user_id
|
||||
|
||||
with local_session() as session:
|
||||
user = session.query(User).filter(User.id == user_id).first()
|
||||
|
||||
new_shout = Shout.create(
|
||||
author_id = user_id,
|
||||
body = body
|
||||
)
|
||||
|
||||
branch_name = "shout%s" % (new_shout.id)
|
||||
|
||||
cmd = "cd %s; git checkout master && git checkout -b %s && git branch %s-dev" % (SHOUTS_REPO, branch_name, branch_name)
|
||||
output = subprocess.check_output(cmd, shell=True)
|
||||
print(output)
|
||||
|
||||
shout_filename = "%s/body" % (SHOUTS_REPO)
|
||||
with open(shout_filename, mode='w', encoding='utf-8') as shout_file:
|
||||
shout_file.write(body)
|
||||
|
||||
cmd = "cd %s; git commit -a -m 'initial version'" % (SHOUTS_REPO)
|
||||
output = subprocess.check_output(cmd, shell=True)
|
||||
print(output)
|
||||
task = GitTask(
|
||||
new_shout.id,
|
||||
body,
|
||||
user.username,
|
||||
user.email,
|
||||
"new shout %s" % (new_shout.id)
|
||||
)
|
||||
|
||||
return {
|
||||
"shout" : new_shout
|
||||
|
|
Loading…
Reference in New Issue
Block a user