commit to git repository
This commit is contained in:
parent
359c467586
commit
85cbdc00ad
3 changed files with 39 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,6 +3,7 @@ conf/*.db
|
||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules/
|
node_modules/
|
||||||
__pycache__
|
__pycache__
|
||||||
|
storage/*
|
||||||
npm-debug*.log
|
npm-debug*.log
|
||||||
ssl/*.pem
|
ssl/*.pem
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
|
42
diffido.py
42
diffido.py
|
@ -3,11 +3,15 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import shutil
|
||||||
|
import urllib
|
||||||
import logging
|
import logging
|
||||||
|
import datetime
|
||||||
import requests
|
import requests
|
||||||
|
import subprocess
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
from tornado.ioloop import IOLoop
|
from tornado.ioloop import IOLoop
|
||||||
# from lxml.html.diff import htmldiff
|
|
||||||
from apscheduler.triggers.cron import CronTrigger
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
from apscheduler.schedulers.tornado import TornadoScheduler
|
from apscheduler.schedulers.tornado import TornadoScheduler
|
||||||
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
||||||
|
@ -19,10 +23,10 @@ from tornado.options import define, options
|
||||||
import tornado.web
|
import tornado.web
|
||||||
from tornado import gen, escape
|
from tornado import gen, escape
|
||||||
|
|
||||||
CONF_DIR = ''
|
|
||||||
JOBS_STORE = 'sqlite:///conf/jobs.db'
|
JOBS_STORE = 'sqlite:///conf/jobs.db'
|
||||||
API_VERSION = '1.0'
|
API_VERSION = '1.0'
|
||||||
SCHEDULES_FILE = 'conf/schedules.json'
|
SCHEDULES_FILE = 'conf/schedules.json'
|
||||||
|
GIT_CMD = 'git'
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
|
@ -65,8 +69,21 @@ def run_job(id_=None, *args, **kwargs):
|
||||||
if not url:
|
if not url:
|
||||||
return
|
return
|
||||||
print('Running job id:%s title:%s url: %s' % (id_, schedule.get('title', ''), url))
|
print('Running job id:%s title:%s url: %s' % (id_, schedule.get('title', ''), url))
|
||||||
req = requests.get(url, timeout=(30.10, 240))
|
req = requests.get(url, allow_redirects=True, timeout=(30.10, 240))
|
||||||
print(req.text)
|
content = req.text
|
||||||
|
req_path = urllib.parse.urlparse(req.url).path
|
||||||
|
base_name = os.path.basename(req_path) or 'index'
|
||||||
|
def _commit(id_, filename, content):
|
||||||
|
os.chdir('storage/%s' % id_)
|
||||||
|
with open(filename, 'w') as fd:
|
||||||
|
fd.write(content)
|
||||||
|
p = subprocess.Popen([GIT_CMD, 'add', filename])
|
||||||
|
p.communicate()
|
||||||
|
p = subprocess.Popen([GIT_CMD, 'commit', '-m', '%s' % datetime.datetime.utcnow(), '--allow-empty'])
|
||||||
|
p.communicate()
|
||||||
|
p = multiprocessing.Process(target=_commit, args=(id_, base_name, content))
|
||||||
|
p.start()
|
||||||
|
p.join()
|
||||||
|
|
||||||
|
|
||||||
def scheduler_update(scheduler, id_):
|
def scheduler_update(scheduler, id_):
|
||||||
|
@ -86,11 +103,13 @@ def scheduler_update(scheduler, id_):
|
||||||
elif trigger == 'cron':
|
elif trigger == 'cron':
|
||||||
cron_trigger = CronTrigger.from_crontab(schedule.get('cron_crontab'))
|
cron_trigger = CronTrigger.from_crontab(schedule.get('cron_crontab'))
|
||||||
args['trigger'] = cron_trigger
|
args['trigger'] = cron_trigger
|
||||||
|
git_create_repo(id_)
|
||||||
scheduler.add_job(run_job, id=id_, replace_existing=True, kwargs={'id_': id_}, **args)
|
scheduler.add_job(run_job, id=id_, replace_existing=True, kwargs={'id_': id_}, **args)
|
||||||
|
|
||||||
|
|
||||||
def scheduler_delete(scheduler, id_):
|
def scheduler_delete(scheduler, id_):
|
||||||
scheduler.remove_job(job_id=id_)
|
scheduler.remove_job(job_id=id_)
|
||||||
|
git_delete_repo(id_)
|
||||||
|
|
||||||
|
|
||||||
def reset_from_schedules(scheduler):
|
def reset_from_schedules(scheduler):
|
||||||
|
@ -99,6 +118,21 @@ def reset_from_schedules(scheduler):
|
||||||
scheduler_update(scheduler, id_=key)
|
scheduler_update(scheduler, id_=key)
|
||||||
|
|
||||||
|
|
||||||
|
def git_create_repo(id_):
|
||||||
|
repo_dir = 'storage/%s' % id_
|
||||||
|
if os.path.isdir(repo_dir):
|
||||||
|
return
|
||||||
|
p = subprocess.Popen([GIT_CMD, 'init', repo_dir])
|
||||||
|
p.communicate()
|
||||||
|
|
||||||
|
|
||||||
|
def git_delete_repo(id_):
|
||||||
|
repo_dir = 'storage/%s' % id_
|
||||||
|
if not os.path.isdir(repo_dir):
|
||||||
|
return
|
||||||
|
shutil.rmtree(repo_dir)
|
||||||
|
|
||||||
|
|
||||||
class DiffidoBaseException(Exception):
|
class DiffidoBaseException(Exception):
|
||||||
"""Base class for diffido custom exceptions.
|
"""Base class for diffido custom exceptions.
|
||||||
|
|
||||||
|
|
0
storage/.gitkeep
Normal file
0
storage/.gitkeep
Normal file
Loading…
Reference in a new issue