Mercurial > piecrust2
comparison piecrust/serving/procloop.py @ 553:cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Sat, 08 Aug 2015 22:01:47 -0700 |
| parents | 9612cfc6455a |
| children | ff714d7f074d |
comparison
equal
deleted
inserted
replaced
| 552:9612cfc6455a | 553:cc6f3dbe3048 |
|---|---|
| 4 import json | 4 import json |
| 5 import queue | 5 import queue |
| 6 import logging | 6 import logging |
| 7 import itertools | 7 import itertools |
| 8 import threading | 8 import threading |
| 9 from piecrust.app import PieCrust | |
| 10 from piecrust.processing.pipeline import ProcessorPipeline | |
| 9 | 11 |
| 10 | 12 |
| 11 logger = logging.getLogger(__name__) | 13 logger = logging.getLogger(__name__) |
| 12 | 14 |
| 13 # This flag is for cancelling all long running requests like SSEs. | 15 # This flag is for cancelling all long running requests like SSEs. |
| 70 self._proc_loop.removeObserver(self) | 72 self._proc_loop.removeObserver(self) |
| 71 self._running = 2 | 73 self._running = 2 |
| 72 | 74 |
| 73 | 75 |
| 74 class ProcessingLoop(threading.Thread): | 76 class ProcessingLoop(threading.Thread): |
| 75 def __init__(self, pipeline): | 77 def __init__(self, root_dir, out_dir, sub_cache_dir=None, debug=False): |
| 76 super(ProcessingLoop, self).__init__( | 78 super(ProcessingLoop, self).__init__( |
| 77 name='pipeline-reloader', daemon=True) | 79 name='pipeline-reloader', daemon=True) |
| 78 self.pipeline = pipeline | 80 # TODO: re-create the app when `config.yml` is changed. |
| 81 self.app = PieCrust(root_dir=root_dir, debug=debug) | |
| 82 if sub_cache_dir: | |
| 83 self.app._useSubCacheDir(sub_cache_dir) | |
| 84 self.pipeline = ProcessorPipeline(self.app, out_dir) | |
| 79 self.last_status_id = 0 | 85 self.last_status_id = 0 |
| 80 self.interval = 1 | 86 self.interval = 1 |
| 81 self._paths = set() | 87 self._paths = set() |
| 82 self._record = None | 88 self._record = None |
| 83 self._last_bake = 0 | 89 self._last_bake = 0 |
| 92 with self._obs_lock: | 98 with self._obs_lock: |
| 93 self._obs.remove(obs) | 99 self._obs.remove(obs) |
| 94 | 100 |
| 95 def run(self): | 101 def run(self): |
| 96 # Build the first list of known files and run the pipeline once. | 102 # Build the first list of known files and run the pipeline once. |
| 97 app = self.pipeline.app | 103 roots = [os.path.join(self.app.root_dir, r) |
| 98 roots = [os.path.join(app.root_dir, r) | |
| 99 for r in self.pipeline.mounts.keys()] | 104 for r in self.pipeline.mounts.keys()] |
| 100 for root in roots: | 105 for root in roots: |
| 101 for dirpath, dirnames, filenames in os.walk(root): | 106 for dirpath, dirnames, filenames in os.walk(root): |
| 102 self._paths |= set([os.path.join(dirpath, f) | 107 self._paths |= set([os.path.join(dirpath, f) |
| 103 for f in filenames]) | 108 for f in filenames]) |
