Skip to content

Commit dff1f99

Browse files
committedJan 12, 2015
Broken implementation of rebuilds
Signed-off-by: Chris Warrick <kwpolska@gmail.com>
1 parent 03b0fe7 commit dff1f99

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed
 

‎comet/utils.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ def parse_redis(url):
5151
:rtype: dict
5252
:raises ValueError: invalid URL
5353
"""
54+
55+
# TODO get rid of kombu and roll our own
5456
redis_raw = kombu.parse_url(url)
5557
if redis_raw['transport'] == 'redis':
5658
return {'host': redis_raw['hostname'] or 'localhost',
@@ -140,7 +142,7 @@ def reload_site(self):
140142
self._read_indexlist('pages')
141143

142144
self.revision = rev
143-
self.logger.error("Site updated to revision {0}.".format(rev))
145+
self.logger.info("Site updated to revision {0}.".format(rev))
144146
elif rev == self.revision and self.db.exists('site:rev'):
145147
pass
146148
else:
@@ -159,11 +161,11 @@ def _write_indexlist(self, name):
159161
def scan_posts(self, really=True, ignore_quit=False, quiet=True):
160162
"""Rescan the site."""
161163
while self.db.exists('site:lock') and int(self.db.get('site:lock')) != 0:
162-
self.logger.error("Waiting for DB lock...")
164+
self.logger.info("Waiting for DB lock...")
163165
time.sleep(0.5)
164166
self.db.incr('site:lock')
165-
self.logger.error("Lock acquired.")
166-
self.logger.error("Scanning site...")
167+
self.logger.info("Lock acquired.")
168+
self.logger.info("Scanning site...")
167169

168170
self._site.scan_posts(really, ignore_quit, quiet)
169171

@@ -181,8 +183,8 @@ def scan_posts(self, really=True, ignore_quit=False, quiet=True):
181183
self.db.incr('site:rev')
182184

183185
self.db.decr('site:lock')
184-
self.logger.error("Lock released.")
185-
self.logger.error("Site scanned.")
186+
self.logger.info("Lock released.")
187+
self.logger.info("Site scanned.")
186188
self.reload_site()
187189

188190
@property

‎comet/web.py

+40-4
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828
from __future__ import print_function, unicode_literals
2929
import json
3030
import os
31+
import sys
3132
import io
3233
import pkg_resources
3334
import nikola.__main__
3435
import logbook
3536
import redis
37+
import rq
38+
import comet.tasks
3639
from nikola.utils import (unicode_str, get_logger, ColorfulStderrHandler,
3740
write_metadata, TranslatableSetting)
3841
import nikola.plugins.command.new_post
@@ -42,11 +45,14 @@
4245
from flask.ext.bcrypt import Bcrypt
4346
from comet.utils import USER_FIELDS, PERMISSIONS, parse_redis, SiteProxy
4447

48+
4549
_site = None
4650
site = None
4751
app = None
4852
db = None
49-
53+
q = None
54+
build_job = None
55+
orphans_job = None
5056

5157
def scan_site():
5258
"""Rescan the site."""
@@ -64,7 +70,7 @@ def configure_url(url):
6470

6571
def configure_site():
6672
"""Configure the site for Comet."""
67-
global _site, site, db
73+
global _site, site, db, q
6874

6975
nikola.__main__._RETURN_DOITNIKOLA = True
7076
_dn = nikola.__main__.main([])
@@ -115,6 +121,7 @@ def configure_site():
115121
# Redis configuration
116122
redis_conn = parse_redis(app.config['REDIS_URL'])
117123
db = redis.StrictRedis(**redis_conn)
124+
q = rq.Queue(connection=db)
118125

119126
_site.template_hooks['menu_alt'].append(generate_menu_alt)
120127

@@ -606,12 +613,41 @@ def delete():
606613
return redirect('/')
607614

608615

616+
@app.route('/api/rebuild')
617+
@login_required
618+
def api_rebuild():
619+
"""Rebuild the site (internally)."""
620+
621+
#e = {'out': '', 'milestone': 0, 'total': 1, 'return': None , 'status': None}
622+
623+
build_job = q.fetch_job('build')
624+
orphans_job = q.fetch_job('orphans')
625+
626+
o = json.dumps({'build': build_job.meta, 'orphans': orphans_job.meta})
627+
628+
if 'status' in build_job.meta and build_job.meta['status'] is True and 'status' in orphans_job.meta and orphans_job.meta['status'] is True:
629+
build_job = None
630+
orphans_job = None
631+
632+
return o
633+
634+
609635
@app.route('/rebuild')
610636
@login_required
611637
def rebuild():
612-
"""Rebuild the site."""
613-
return "<h1>Not implemented.</h1>", 500
638+
"""Rebuild the site with a nice UI."""
639+
640+
executable = sys.executable
641+
if executable.endswith('uwsgi'):
642+
import uwsgi
643+
executable = os.path.join(uwsgi.opt['virtualenv'], 'bin', 'python')
644+
645+
if not q.fetch_job('build') and not q.fetch_job('orphans'):
646+
b = q.enqueue(comet.tasks.build, executable, job_id='build')
647+
o = q.enqueue(comet.tasks.orphans, executable, job_id='orphans', depends_on=b)
614648

649+
return render('comet_rebuild.tmpl',
650+
{'title': 'Rebuild', 'permalink': '/rebuild'})
615651

616652
@app.route('/bower_components/<path:path>')
617653
def serve_bower_components(path):

0 commit comments

Comments
 (0)
Please sign in to comment.