Skip to content

Commit 6154b99

Browse files
committed
This commit isn't tested. It captures the state after merging in branch/ssw/agenda/v4.70.
- Legacy-Id: 6273
1 parent 29eaaa9 commit 6154b99

410 files changed

Lines changed: 72038 additions & 824 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Capfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
2+
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
3+
4+
load 'config/deploy' # remove this line to skip loading any of the default tasks

config/deploy.rb

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
2+
# on development host.
3+
# these will need to be adjusted to the host being deployed to.
4+
set :application, "orlando"
5+
set :user, 'orlando'
6+
set :subdir, ""
7+
set :deploy_to, "/data/#{user}/#{subdir}#{application}"
8+
set :pythonver, "2.6"
9+
set :virtualenv, "/data/pythonenv/IETFDB"
10+
set :use_sudo, false
11+
12+
# this depends upon the source of the code.
13+
# branch is not as meaningful for SVN.
14+
set :scm_user, ENV['LOGNAME']
15+
set :ssh_options, { :forward_agent => true }
16+
17+
# GIT
18+
set :scm, :git
19+
set :branch, 'master'
20+
set :repository, "git+ssh://#{scm_user}@code.gatineau.credil.org/git/orlando/ietfdb"
21+
set :git_enable_submodules, true
22+
23+
# SVN
24+
#set :scm, :subversion
25+
#set :repository, "http://svn.tools.ietf.org/svn/tools/ietfdb/branch/ssw/agenda/v4.41"
26+
27+
set :django_environment, "cd #{release_path}"
28+
29+
# host list
30+
role :web, "orlando.gatineau.credil.org"
31+
role :app, "orlando.gatineau.credil.org"
32+
33+
namespace :deploy do
34+
35+
# the untouched "deploy" namespace contains:
36+
# deploy:setup
37+
# deploy:default
38+
# deploy:update
39+
# deploy:update_code
40+
# deploy:finalize_update
41+
# deploy:symlink
42+
# deploy:restart
43+
#
44+
#
45+
# update_code does the actual checkout/clone, then calls finalize_update. So you can override
46+
# finalize_update and still get the checkout and symlink functionality.
47+
#
48+
# setup has to be called separately.
49+
50+
# this overrides rails specific things.
51+
task :start do ; end
52+
task :stop do ; end
53+
54+
desc "Setup a new django instance"
55+
task :setup, :roles => [:app,:web] do
56+
setup_deploy_user_home_dir
57+
logdir
58+
end
59+
60+
61+
desc "Restart the apache server."
62+
task :restart, :roles => :web, :except => { :no_release => true } do
63+
# something to restart django.
64+
run "sudo /usr/sbin/apache2ctl graceful"
65+
end
66+
67+
desc "Adjust a newly checked-out release for use."
68+
task :finalize_update, :roles => [:app,:web,:db] do
69+
copy_settings
70+
#compilemessages
71+
run "env"
72+
end
73+
74+
desc "Copies settings_local.py to the new release."
75+
task :copy_settings, :roles => [:app,:web] do
76+
db_config = "/data/#{user}/settings_local.py"
77+
run "cp #{db_config} #{release_path}/ietf/settings_local.py"
78+
releasenum=File.basename(release_path)
79+
run "echo 'RELEASENUM = \'#{releasenum}\'' >#{release_path}/ietf/releasenum.py"
80+
end
81+
82+
desc "./manage.py compilemessages in the new release."
83+
task :compilemessages, :roles => [:app,:web] do
84+
#run "chmod 2775 #{release_path}/locale/en/LC_MESSAGES"
85+
#run "chmod 2775 #{release_path}/locale/fr/LC_MESSAGES"
86+
run "#{django_environment} && ./manage compilemessages -v 2"
87+
end
88+
89+
desc "./manage.py syncdb --noinit in the new release."
90+
task :syncdb, :roles => [:app,:web] do
91+
run "#{django_environment} && ./manage syncdb --noinput"
92+
end
93+
94+
desc "./manage.py migrate in the new release."
95+
task :migrate, :roles => [:app,:web] do
96+
run "#{django_environment} && ./manage migrate"
97+
end
98+
99+
desc "Creates the (shared) log directory."
100+
task :logdir, :roles => [:app,:web] do
101+
run "mkdir -p #{deploy_to}/log"
102+
end
103+
104+
desc "Set up deploy user\'s directory."
105+
task :setup_deploy_user_home_dir, :roles => [:app,:web] do
106+
run "mkdir -p #{deploy_to}"
107+
run "mkdir -p #{deploy_to}/releases"
108+
logdir
109+
run "echo 'Do not forget to copy the settings_local.py to the deploy home dir.'"
110+
end
111+
112+
end
113+

dajaxice/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
VERSION = (0, 2, 0, 0, 'beta')

dajaxice/core/Dajaxice.py

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
import logging
2+
3+
from django.conf import settings
4+
5+
# Python 2.7 has an importlib with import_module.
6+
# For older Pythons, Django's bundled copy provides it.
7+
# For older Django's dajaxice reduced_import_module.
8+
try:
9+
from importlib import import_module
10+
except:
11+
try:
12+
from django.utils.importlib import import_module
13+
except:
14+
from dajaxice.utils import simple_import_module as import_module
15+
16+
log = logging.getLogger('dajaxice.DajaxiceRequest')
17+
18+
19+
class DajaxiceFunction(object):
20+
21+
def __init__(self, name, path, doc=None):
22+
self.name = name
23+
self.path = path
24+
self.doc = doc
25+
26+
def get_callable_path(self):
27+
return '%s.%s' % (self.path.replace('.ajax', ''), self.name)
28+
29+
def __cmp__(self, other):
30+
return (self.name == other.name and self.path == other.path)
31+
32+
33+
class DajaxiceModule(object):
34+
def __init__(self, module):
35+
self.functions = []
36+
self.sub_modules = []
37+
self.name = module[0]
38+
39+
sub_module = module[1:]
40+
if len(sub_module) != 0:
41+
self.add_submodule(sub_module)
42+
43+
def get_module(self, module):
44+
"""
45+
Recursively get_module util we found it.
46+
"""
47+
if len(module) == 0:
48+
return self
49+
50+
for dajaxice_module in self.sub_modules:
51+
if dajaxice_module.name == module[0]:
52+
return dajaxice_module.get_module(module[1:])
53+
return None
54+
55+
def add_function(self, function):
56+
self.functions.append(function)
57+
58+
def has_sub_modules(self):
59+
return len(self.sub_modules) > 0
60+
61+
def add_submodule(self, module):
62+
"""
63+
Recursively add_submodule, if it's not registered, create it.
64+
"""
65+
if len(module) == 0:
66+
return
67+
else:
68+
sub_module = self.exist_submodule(module[0])
69+
70+
if type(sub_module) == int:
71+
self.sub_modules[sub_module].add_submodule(module[1:])
72+
else:
73+
self.sub_modules.append(DajaxiceModule(module))
74+
75+
def exist_submodule(self, name):
76+
"""
77+
Check if submodule name was already registered.
78+
"""
79+
for module in self.sub_modules:
80+
if module.name == name:
81+
return self.sub_modules.index(module)
82+
return False
83+
84+
85+
class Dajaxice(object):
86+
def __init__(self):
87+
self._registry = []
88+
self._callable = []
89+
90+
for function in getattr(settings, 'DAJAXICE_FUNCTIONS', ()):
91+
function = function.rsplit('.', 1)
92+
self.register_function(function[0], function[1])
93+
94+
def register(self, function):
95+
self.register_function(function.__module__, function.__name__, function.__doc__)
96+
97+
def register_function(self, module, name, doc=None):
98+
"""
99+
Register function at 'module' depth
100+
"""
101+
#Create the dajaxice function.
102+
function = DajaxiceFunction(name=name, path=module, doc=doc)
103+
104+
#Check for already registered functions.
105+
full_path = '%s.%s' % (module, name)
106+
if full_path in self._callable:
107+
log.warning('%s already registered as dajaxice function.' % full_path)
108+
return
109+
110+
self._callable.append(full_path)
111+
112+
#Dajaxice path without ajax.
113+
module_without_ajax = module.replace('.ajax', '').split('.')
114+
115+
#Register module if necessary.
116+
exist_module = self._exist_module(module_without_ajax[0])
117+
118+
if type(exist_module) == int:
119+
self._registry[exist_module].add_submodule(module_without_ajax[1:])
120+
else:
121+
self._registry.append(DajaxiceModule(module_without_ajax))
122+
123+
#Register Function
124+
module = self.get_module(module_without_ajax)
125+
if module:
126+
module.add_function(function)
127+
128+
def get_module(self, module):
129+
"""
130+
Recursively get module from registry
131+
"""
132+
for dajaxice_module in self._registry:
133+
if dajaxice_module.name == module[0]:
134+
return dajaxice_module.get_module(module[1:])
135+
return None
136+
137+
def is_callable(self, name):
138+
return name in self._callable
139+
140+
def _exist_module(self, module_name):
141+
for module in self._registry:
142+
if module.name == module_name:
143+
return self._registry.index(module)
144+
return False
145+
146+
def get_functions(self):
147+
return self._registry
148+
149+
150+
LOADING_DAJAXICE = False
151+
152+
153+
def dajaxice_autodiscover():
154+
"""
155+
Auto-discover INSTALLED_APPS ajax.py modules and fail silently when
156+
not present.
157+
NOTE: dajaxice_autodiscover was inspired/copied from django.contrib.admin autodiscover
158+
"""
159+
global LOADING_DAJAXICE
160+
if LOADING_DAJAXICE:
161+
return
162+
LOADING_DAJAXICE = True
163+
164+
import imp
165+
from django.conf import settings
166+
167+
for app in settings.INSTALLED_APPS:
168+
169+
try:
170+
app_path = import_module(app).__path__
171+
except AttributeError:
172+
continue
173+
174+
try:
175+
imp.find_module('ajax', app_path)
176+
except ImportError:
177+
continue
178+
179+
import_module("%s.ajax" % app)
180+
181+
LOADING_DAJAXICE = False

0 commit comments

Comments
 (0)