From 498774d47e699b793dd11e55f1e72d331a9dcc5c Mon Sep 17 00:00:00 2001
From: mdipierro
Date: Sat, 28 Jul 2012 02:08:53 -0500
Subject: [PATCH] admin has forms
---
VERSION | 2 +-
applications/admin/controllers/default.py | 126 ++++++++++++---------
applications/admin/views/default/site.html | 92 ++++++---------
3 files changed, 106 insertions(+), 114 deletions(-)
diff --git a/VERSION b/VERSION
index e8e898f2..b6401a53 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-Version 2.00.0 (2012-07-28 01:00:54) dev
+Version 2.00.0 (2012-07-28 02:08:47) dev
diff --git a/applications/admin/controllers/default.py b/applications/admin/controllers/default.py
index 8468d33a..13fc304b 100644
--- a/applications/admin/controllers/default.py
+++ b/applications/admin/controllers/default.py
@@ -167,6 +167,7 @@ def change_password():
redirect(URL('site'))
return dict(form=form)
+
def site():
""" Site handler """
@@ -175,12 +176,32 @@ def site():
# Shortcut to make the elif statements more legible
file_or_appurl = 'file' in request.vars or 'appurl' in request.vars
+ class IS_VALID_APPNAME(object):
+ def __call__(self,value):
+ if not re.compile('[\w_]+').match(value):
+ return (value,T('Invalid application name'))
+ if not request.vars.overwrite and \
+ os.path.exists(os.path.join(apath(r=request),value)):
+ return (value,T('Application exists already'))
+ return (value,None)
+
+ is_appname = IS_VALID_APPNAME()
+ form_create = SQLFORM.factory(Field('name',requires=is_appname),
+ table_name='appcreate')
+ form_update = SQLFORM.factory(Field('name',requires=is_appname),
+ Field('file','upload',uploadfield=False),
+ Field('url'),
+ Field('overwrite','boolean'),
+ table_name='appupdate')
+ form_create.process()
+ form_update.process()
+
if DEMO_MODE:
pass
- elif request.vars.filename and not 'file' in request.vars:
+ elif form_create.accepted:
# create a new application
- appname = cleanpath(request.vars.filename).replace('.', '_')
+ appname = cleanpath(form_create.vars.name)
if app_create(appname, request):
if MULTI_USER_MODE:
db.app.insert(name=appname,owner=auth.user.id)
@@ -189,65 +210,57 @@ def site():
redirect(URL('design',args=appname))
else:
session.flash = \
- T('unable to create application "%s" (it may exist already)', request.vars.filename)
+ T('unable to create application "%s" (it may exist already)',
+ form_create.vars.name)
redirect(URL(r=request))
- elif file_or_appurl and not request.vars.filename:
- # can't do anything without an app name
- msg = 'you must specify a name for the uploaded application'
- response.flash = T(msg)
-
- elif (request.vars.appurl or '').endswith('.git') and request.vars.filename:
- if not have_git:
- session.flash = GIT_MISSING
- elif request.vars.filename:
- target = os.path.join(apath(r=request),request.vars.filename)
- if os.path.exists(target):
- session.flash = 'Application by that name already exists.'
- else:
- try:
- new_repo = Repo.clone_from(request.vars.appurl,target)
- session.flash = T('new application "%s" imported',request.vars.filename)
- except GitCommandError, err:
- session.flash = T('Invalid git repository specified.')
- else:
- session.flash = 'Application Name required for git import.'
- redirect(URL(r=request))
-
- elif file_or_appurl and request.vars.filename:
- # fetch an application via URL or file upload
- f = None
- if request.vars.appurl:
+ elif form_update.accepted:
+ if (form_update.vars.url or '').endswith('.git'):
+ if not have_git:
+ session.flash = GIT_MISSING
+ target = os.path.join(apath(r=request),form_update.vars.name)
try:
- f = urllib.urlopen(request.vars.appurl)
- except Exception, e:
- session.flash = DIV(T('Unable to download app because:'),PRE(str(e)))
- redirect(URL(r=request))
- fname = request.vars.appurl
- elif request.vars.file:
- f = request.vars.file.file
- fname = request.vars.file.filename
+ new_repo = Repo.clone_from(form_update.vars.url,target)
+ session.flash = T('new application "%s" imported',
+ form_update.vars.name)
+ except GitCommandError, err:
+ session.flash = T('Invalid git repository specified.')
+ redirect(URL(r=request))
- if f:
- appname = cleanpath(request.vars.filename).replace('.', '_')
- installed = app_install(appname, f, request, fname,
- overwrite=request.vars.overwrite_check)
- if f and installed:
- msg = 'application %(appname)s installed with md5sum: %(digest)s'
- if MULTI_USER_MODE:
- db.app.insert(name=appname,owner=auth.user.id)
- log_progress(appname)
- session.flash = T(msg, dict(appname=appname,
- digest=md5_hash(installed)))
- elif f and request.vars.overwrite_check:
- msg = 'unable to install application "%(appname)s"'
- session.flash = T(msg, dict(appname=request.vars.filename))
+ elif form_update.vars.url:
+ # fetch an application via URL or file upload
+ if form_update.vars.url:
+ try:
+ form_update.vars.file = \
+ urllib.urlopen(form_update.vars.url)
+ except Exception, e:
+ session.flash = \
+ DIV(T('Unable to download app because:'),PRE(str(e)))
+ redirect(URL(r=request))
+ fname = form_update.vars.url
+
+ elif form_update.accepted and form_update.vars.file:
+ fname = form_update.vars.file.filename
+ appname = cleanpath(form_update.vars.name)
+ installed = app_install(appname, form_update.vars.file.file,
+ request, fname,
+ overwrite=form_update.vars.overwrite)
+ if f and installed:
+ msg = 'application %(appname)s installed with md5sum: %(digest)s'
+ if MULTI_USER_MODE:
+ db.app.insert(name=appname,owner=auth.user.id)
+ log_progress(appname)
+ session.flash = T(msg, dict(appname=appname,
+ digest=md5_hash(installed)))
+ elif f and form_update.vars.overwrite:
+ msg = 'unable to install application "%(appname)s"'
+ session.flash = T(msg, dict(appname=form_update.vars.name))
- else:
- msg = 'unable to install application "%(appname)s"'
- session.flash = T(msg, dict(appname=request.vars.filename))
+ else:
+ msg = 'unable to install application "%(appname)s"'
+ session.flash = T(msg, dict(appname=form_update.vars.name))
- redirect(URL(r=request))
+ redirect(URL(r=request))
regex = re.compile('^\w+$')
@@ -261,7 +274,8 @@ def site():
apps = sorted(apps,lambda a,b:cmp(a.upper(),b.upper()))
- return dict(app=None, apps=apps, myversion=myversion)
+ return dict(app=None, apps=apps, myversion=myversion,
+ form_create=form_create, form_update=form_update)
def report_progress(app):
diff --git a/applications/admin/views/default/site.html b/applications/admin/views/default/site.html
index fd809416..879dccc2 100644
--- a/applications/admin/views/default/site.html
+++ b/applications/admin/views/default/site.html
@@ -70,12 +70,12 @@
{{else:}}
{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}}
- {{pass}}
+ {{=button(URL('default','reload_routes'), T('Reload routes'))}}
-
- {{=button(URL('default','reload_routes'), T('Reload routes'))}}
+
{{pass}}
@@ -87,64 +87,42 @@
{{=T("New simple application")}}
-
+ {{=form_create.custom.begin}}
+
|
+ {{=LABEL(T("Application name:"))}}
+ |
+ {{=form_create.custom.widget.name}}
+ |
+
+ |
+ {{=form_create.custom.end}}
{{=T("Upload and install packed application")}}
-