Implement ECP in Ipsilon
[cascardo/ipsilon.git] / ipsilon / ipsilon
1 #!/usr/bin/python
2 #
3 # Copyright (C) 2013 Ipsilon project Contributors, for license see COPYING
4
5 import sys
6 sys.stdout = sys.stderr
7 import glob
8 import os
9 import atexit
10 import cherrypy
11 from ipsilon.util.data import AdminStore
12 from ipsilon.util import page
13 from ipsilon.root import Root
14 from jinja2 import Environment, FileSystemLoader, ChoiceLoader
15 import ipsilon.util.sessions
16
17
18 def nuke_session_locks():
19     if cherrypy.config['tools.sessions.on']:
20         try:
21             sessdir = cherrypy.config['tools.sessions.storage_path']
22             for l in glob.glob(os.path.join(sessdir, '*.lock')):
23                 try:
24                     os.remove(l)
25                 except Exception:  # pylint: disable=broad-except
26                     pass
27         except Exception:  # pylint: disable=broad-except
28             pass
29
30 cfgfile = None
31 if (len(sys.argv) > 1):
32     cfgfile = sys.argv[-1]
33 elif os.path.isfile('ipsilon.conf'):
34     cfgfile = 'ipsilon.conf'
35 elif os.path.isfile('/etc/ipsilon/ipsilon.conf'):
36     cfgfile = '/etc/ipsilon/ipsilon.conf'
37 else:
38     raise IOError("Configuration file not found")
39
40 cherrypy.lib.sessions.SqlSession = ipsilon.util.sessions.SqlSession
41 cherrypy.config.update(cfgfile)
42
43 nuke_session_locks()
44
45 datastore = AdminStore()
46 admin_config = datastore.load_config()
47 for option in admin_config:
48     cherrypy.config[option] = admin_config[option]
49
50 template_loaders = []
51 default_template_dir = 'templates'
52 template_dir = cherrypy.config.get('template_dir', default_template_dir)
53 if template_dir.startswith('/'):
54     template_loaders.append(FileSystemLoader(template_dir))
55 else:
56     template_loaders.append(FileSystemLoader(
57         os.path.join(cherrypy.config['base.dir'],
58                      template_dir)))
59 # Fall-back to the default templates
60 template_loaders.append(FileSystemLoader(
61     os.path.join(cherrypy.config['base.dir'],
62                  default_template_dir)))
63 template_env = Environment(loader=ChoiceLoader(template_loaders))
64
65 if __name__ == "__main__":
66     conf = {'/': {'tools.staticdir.root': os.getcwd()},
67             '/ui': {'tools.staticdir.on': True,
68                     'tools.staticdir.dir': 'ui'}}
69     cherrypy.quickstart(Root('default', template_env),
70                         cherrypy.config['base.mount'], conf)
71
72 else:
73     cherrypy.config['environment'] = 'embedded'
74
75     if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0:
76         cherrypy.engine.start(blocking=False)
77         atexit.register(cherrypy.engine.stop)
78
79     application = cherrypy.Application(Root('default', template_env),
80                                        script_name=None, config=None)