Mercurial > piecrust2
annotate foodtruck/sites.py @ 610:efc1dc916e7c
admin: Configuration changes.
* Move publish targets to site configuration.
* Add direct accessor for the current site.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 28 Jan 2016 22:17:58 -0800 |
parents | c6bc0ef03f82 |
children | e2e955a3bb25 |
rev | line source |
---|---|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import os |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import os.path |
598
3cec8634209a
admin: Ability to configure SCM stuff per site.
Ludovic Chabant <ludovic@chabant.com>
parents:
596
diff
changeset
|
3 import copy |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 import shlex |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 import logging |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 import threading |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 import subprocess |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 from piecrust.app import PieCrust |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
9 from piecrust.configuration import merge_dicts |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 logger = logging.getLogger(__name__) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 class UnauthorizedSiteAccessError(Exception): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 pass |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
19 class InvalidSiteError(Exception): |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
20 pass |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
21 |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
22 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 class Site(object): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 def __init__(self, name, root_dir, config): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 self.name = name |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 self.root_dir = root_dir |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
27 self._global_config = config |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 self._piecrust_app = None |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 self._scm = None |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
30 self._publish_thread = None |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 logger.debug("Creating site object for %s" % self.name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 @property |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 def piecrust_app(self): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 if self._piecrust_app is None: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 s = PieCrust(self.root_dir) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 s.config.set('site/root', '/site/%s/' % self.name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 self._piecrust_app = s |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 return self._piecrust_app |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 @property |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 def scm(self): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 if self._scm is None: |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
44 cfg = copy.deepcopy(self._global_config.get('scm', {})) |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
45 merge_dicts(cfg, self.piecrust_app.config.get('scm', {})) |
598
3cec8634209a
admin: Ability to configure SCM stuff per site.
Ludovic Chabant <ludovic@chabant.com>
parents:
596
diff
changeset
|
46 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
47 if os.path.isdir(os.path.join(self.root_dir, '.hg')): |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 from .scm.mercurial import MercurialSourceControl |
598
3cec8634209a
admin: Ability to configure SCM stuff per site.
Ludovic Chabant <ludovic@chabant.com>
parents:
596
diff
changeset
|
49 self._scm = MercurialSourceControl(self.root_dir, cfg) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
50 elif os.path.isdir(os.path.join(self.root_dir, '.git')): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
51 from .scm.git import GitSourceControl |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
52 self._scm = GitSourceControl(self.root_dir, cfg) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 else: |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
54 self._scm = False |
598
3cec8634209a
admin: Ability to configure SCM stuff per site.
Ludovic Chabant <ludovic@chabant.com>
parents:
596
diff
changeset
|
55 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 return self._scm |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 @property |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
59 def is_publish_running(self): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
60 return (self._publish_thread is not None and |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
61 self._publish_thread.is_alive()) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 @property |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
64 def publish_thread(self): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
65 return self._publish_thread |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
66 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
67 def publish(self, target): |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
68 target_cfg = self.piecrust_app.config.get('publish/%s' % target) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
69 if not target_cfg: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
70 raise Exception("No such publish target: %s" % target) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
72 target_cmd = target_cfg.get('cmd') |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
73 if not target_cmd: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
74 raise Exception("No command specified for publish target: %s" % |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
75 target) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
76 publish_args = shlex.split(target_cmd) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
78 logger.debug( |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
79 "Executing publish target '%s': %s" % (target, publish_args)) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
80 proc = subprocess.Popen(publish_args, cwd=self.root_dir, |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 stdout=subprocess.PIPE, |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 stderr=subprocess.PIPE) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
84 pid_file_path = os.path.join(self.root_dir, '.ft_pub.pid') |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 with open(pid_file_path, 'w') as fp: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 fp.write(str(proc.pid)) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
88 logger.debug("Running publishing monitor for PID %d" % proc.pid) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
89 self._publish_thread = _PublishThread( |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
90 self.name, self.root_dir, proc, self._onPublishEnd) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
91 self._publish_thread.start() |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
93 def _onPublishEnd(self): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
94 os.unlink(os.path.join(self.root_dir, '.ft_pub.pid')) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
95 self._publish_thread = None |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
98 class _PublishThread(threading.Thread): |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 def __init__(self, sitename, siteroot, proc, callback): |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
100 super(_PublishThread, self).__init__( |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
101 name='%s_publish' % sitename, daemon=True) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 self.sitename = sitename |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 self.siteroot = siteroot |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 self.proc = proc |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
105 self.callback = callback |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
107 log_file_path = os.path.join(self.siteroot, '.ft_pub.log') |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 self.log_fp = open(log_file_path, 'w', encoding='utf8') |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 def run(self): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 for line in self.proc.stdout: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 self.log_fp.write(line.decode('utf8')) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 for line in self.proc.stderr: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 self.log_fp.write(line.decode('utf8')) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
115 self.proc.communicate() |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
116 if self.proc.returncode != 0: |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
117 self.log_fp.write("Error, publish process returned code %d" % |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
118 self.proc.returncode) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
119 self.log_fp.close() |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
120 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
121 logger.debug("Publish ended for %s." % self.sitename) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
122 self.callback() |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
123 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
124 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
125 class FoodTruckSites(): |
596
e2c91ba44d6c
admin: Make sure we have a valid default site to start with.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
126 def __init__(self, config, current_site): |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
127 self._sites = {} |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
128 self.config = config |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 self.current_site = current_site |
596
e2c91ba44d6c
admin: Make sure we have a valid default site to start with.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
130 if current_site is None: |
e2c91ba44d6c
admin: Make sure we have a valid default site to start with.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
131 raise Exception("No current site was given.") |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
132 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
133 def get_root_dir(self, name=None): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
134 name = name or self.current_site |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
135 root_dir = self.config.get('sites/%s' % name) |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
136 if root_dir is None: |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
137 raise InvalidSiteError("No such site: %s" % name) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 if not os.path.isdir(root_dir): |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
139 raise InvalidSiteError("Site '%s' has an invalid path." % name) |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
140 return root_dir |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
141 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 def get(self, name=None): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 name = name or self.current_site |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 s = self._sites.get(name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
145 if s: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
146 return s |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
147 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
148 root_dir = self.get_root_dir(name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
149 s = Site(name, root_dir, self.config) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
150 self._sites[name] = s |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
151 return s |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
152 |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
153 def getall(self): |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
154 for name in self.config.get('sites'): |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
155 yield self.get(name) |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
156 |