annotate pylons_app/lib/app_globals.py @ 20:bbaab7501c1a

Added custom templates, did over check of code to make it work. Added templating for add repository, and styling. App globals now handles our custom static files. (logo etc can be changed)
author Marcin Kuzminski
date Sun, 28 Feb 2010 01:52:38 +0100
parents 525ed90e4577
children 2963f2894a7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 """The application's Globals object"""
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
2 #uncomment the following if you want to serve a single repo
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
3 #from mercurial.hgweb.hgweb_mod import hgweb
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
4 from mercurial.hgweb.hgwebdir_mod import hgwebdir
20
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
5 from mercurial import templater
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
6 from mercurial.hgweb.request import wsgiapplication
20
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
7 from mercurial import ui, config
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
8 import os
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9 class Globals(object):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 """Globals acts as a container for objects available throughout the
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 life of the application
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
13
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16 def __init__(self):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 """One instance of Globals is created during application
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 initialization and is available during requests via the
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19 'app_globals' variable
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 """
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
22 #two ways of building the merc app i don't know
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
23 #the fastest one but belive the wsgiapp is better
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
24 #self.hgapp = self.make_web_app()
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
25 self.hgapp = wsgiapplication(self.make_web_app)
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
26
20
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
27
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
28 def make_web_app(self):
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
29 repos = "hgwebdir.config"
20
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
30 baseui = ui.ui()
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
31 cfg = config.config()
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
32 cfg.read(repos)
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
33 paths = cfg.items('paths')
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
34 self.check_repo_dir(paths)
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
35 self.set_statics(cfg)
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
36
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
37 for k, v in cfg.items('web'):
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
38 baseui.setconfig('web', k, v)
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
39 #magic trick to make our custom template dir working
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
40 templater.path.append(cfg.get('web', 'templates', None))
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
41 hgwebapp = hgwebdir(paths, baseui = baseui)
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 0
diff changeset
42 return hgwebapp
20
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
43
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
44
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
45 def set_statics(self, cfg):
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
46 '''
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
47 set's the statics for use in mako templates
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
48 @param cfg:
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
49 '''
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
50 self.statics = cfg.get('web', 'staticurl', '/static')
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
51 if not self.statics.endswith('/'):
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
52 self.statics += '/'
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
53
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
54
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
55 def check_repo_dir(self, paths):
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
56 repos_path = paths[0][1].split('/')
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
57 if repos_path[-1] in ['*', '**']:
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
58 repos_path = repos_path[:-1]
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
59 if repos_path[0] != '/':
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
60 repos_path[0] = '/'
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
61 if not os.path.isdir(os.path.join(*repos_path)):
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
62 raise Exception('Not a valid repository in %s' % paths[0][1])
bbaab7501c1a Added custom templates, did over check of code to make it work.
Marcin Kuzminski
parents: 10
diff changeset
63