Parent: [3abb2e] (diff)

Child: [c1be33] (diff)

Download this file

link_main.py    89 lines (69 with data), 2.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#-*- python -*-
import logging
# Non-stdlib imports
import pkg_resources
from tg import expose, validate, redirect, response
from pylons import g, c, request
from pymongo.bson import ObjectId
# Pyforge-specific imports
from allura.app import Application, ConfigOption, SitemapEntry, DefaultAdminController
from allura.lib import helpers as h
from allura.lib.security import require, has_artifact_access
from allura.model import ProjectRole
from allura.controllers import BaseController
# Local imports
from forgelink import version
log = logging.getLogger(__name__)
class ForgeLinkApp(Application):
'''This is the Link app for PyForge'''
__version__ = version.__version__
permissions = [ 'configure', 'read' ]
config_options = Application.config_options + [
ConfigOption('url', str, None)
]
searchable=True
tool_label='External Link'
default_mount_label='Link name'
default_mount_point='link'
ordinal=1
def __init__(self, project, config):
Application.__init__(self, project, config)
self.root = RootController()
self.admin = LinkAdminController(self)
@property
@h.exceptionless([], log)
def sitemap(self):
menu_id = self.config.options.mount_label.title()
return [SitemapEntry(menu_id, '.')[self.sidebar_menu()] ]
def sidebar_menu(self):
return []
def admin_menu(self):
return super(ForgeLinkApp, self).admin_menu()
@property
def templates(self):
return pkg_resources.resource_filename('forgelink', 'templates')
def install(self, project):
'Set up any default permissions and roles here'
self.config.options['project_name'] = project.name
super(ForgeLinkApp, self).install(project)
# Setup permissions
role_anon = ProjectRole.query.get(name='*anonymous')._id
self.config.acl.update(
configure=c.project.acl['tool'],
read=[role_anon])
def uninstall(self, project):
"Remove all the tool's artifacts from the database"
super(ForgeLinkApp, self).uninstall(project)
class RootController(BaseController):
def _check_security(self):
require(has_artifact_access('read'))
@expose('jinja:link/index.html')
def index(self, **kw):
url = c.app.config.options.get('url')
if url:
redirect(url)
return dict()
class LinkAdminController(DefaultAdminController):
@expose()
def index(self, **kw):
redirect('options')