[gen] Bugfixes.
This commit is contained in:
parent
70b18f597f
commit
446a2d9a16
|
@ -3,13 +3,13 @@
|
||||||
- mixins/ToolMixin is mixed in with the generated application Tool class.'''
|
- mixins/ToolMixin is mixed in with the generated application Tool class.'''
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
import os, os.path, sys, types, mimetypes, urllib, cgi
|
import os, os.path, sys, types, urllib, cgi
|
||||||
from appy import Object
|
from appy import Object
|
||||||
import appy.gen as gen
|
import appy.gen as gen
|
||||||
from appy.gen.utils import *
|
from appy.gen.utils import *
|
||||||
from appy.gen.layout import Table, defaultPageLayouts, ColumnLayout
|
from appy.gen.layout import Table, defaultPageLayouts, ColumnLayout
|
||||||
from appy.gen.descriptors import WorkflowDescriptor, ClassDescriptor
|
from appy.gen.descriptors import WorkflowDescriptor, ClassDescriptor
|
||||||
from appy.shared.utils import sequenceTypes, normalizeText, Traceback
|
from appy.shared.utils import sequenceTypes,normalizeText,Traceback,getMimeType
|
||||||
from appy.shared.data import rtlLanguages
|
from appy.shared.data import rtlLanguages
|
||||||
from appy.shared.xml_parser import XmlMarshaller
|
from appy.shared.xml_parser import XmlMarshaller
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ class BaseMixin:
|
||||||
rq = self.REQUEST
|
rq = self.REQUEST
|
||||||
tool = self.getTool()
|
tool = self.getTool()
|
||||||
errorMessage = self.translate('validation_error')
|
errorMessage = self.translate('validation_error')
|
||||||
isNew = rq.get('is_new') == 'True'
|
isNew = self.isTemporary()
|
||||||
# If this object is created from an initiator, get info about him.
|
# If this object is created from an initiator, get info about him.
|
||||||
initiator, initiatorPage, initiatorField = self.getInitiatorInfo()
|
initiator, initiatorPage, initiatorField = self.getInitiatorInfo()
|
||||||
# If the user clicked on 'Cancel', go back to the previous page.
|
# If the user clicked on 'Cancel', go back to the previous page.
|
||||||
|
@ -302,14 +302,17 @@ class BaseMixin:
|
||||||
# Return to the edit or view page?
|
# Return to the edit or view page?
|
||||||
if pageInfo['showOnEdit']:
|
if pageInfo['showOnEdit']:
|
||||||
rq.set('page', pageName)
|
rq.set('page', pageName)
|
||||||
return obj.gotoEdit()
|
# I do not use gotoEdit here because I really need to
|
||||||
|
# redirect the user to the edit page. Indeed, the object
|
||||||
|
# edit URL may have moved from temp_folder to another place.
|
||||||
|
return self.goto(obj.getUrl(mode='edit', page=pageName))
|
||||||
else:
|
else:
|
||||||
return self.goto(obj.getUrl(page=pageName))
|
return self.goto(obj.getUrl(page=pageName))
|
||||||
else:
|
else:
|
||||||
obj.say(msg)
|
obj.say(msg)
|
||||||
return self.goto(obj.getUrl())
|
return self.goto(obj.getUrl())
|
||||||
if rq.get('buttonNext.x', None):
|
if rq.get('buttonNext.x', None):
|
||||||
# Go to the next page for this object
|
# Go to the next page for this object.
|
||||||
# We remember page name, because the next method may set a new
|
# We remember page name, because the next method may set a new
|
||||||
# current page if the current one is not visible anymore.
|
# current page if the current one is not visible anymore.
|
||||||
pageName = rq['page']
|
pageName = rq['page']
|
||||||
|
@ -318,8 +321,8 @@ class BaseMixin:
|
||||||
if pageName:
|
if pageName:
|
||||||
# Return to the edit or view page?
|
# Return to the edit or view page?
|
||||||
if pageInfo['showOnEdit']:
|
if pageInfo['showOnEdit']:
|
||||||
rq.set('page', pageName)
|
# Same remark as above (buttonPrevious).
|
||||||
return obj.gotoEdit()
|
return self.goto(obj.getUrl(mode='edit', page=pageName))
|
||||||
else:
|
else:
|
||||||
return self.goto(obj.getUrl(page=pageName))
|
return self.goto(obj.getUrl(page=pageName))
|
||||||
else:
|
else:
|
||||||
|
@ -1085,7 +1088,7 @@ class BaseMixin:
|
||||||
elif resultType.startswith('file'):
|
elif resultType.startswith('file'):
|
||||||
# msg does not contain a message, but a file instance.
|
# msg does not contain a message, but a file instance.
|
||||||
response = self.REQUEST.RESPONSE
|
response = self.REQUEST.RESPONSE
|
||||||
response.setHeader('Content-Type',mimetypes.guess_type(msg.name)[0])
|
response.setHeader('Content-Type', getMimeType(msg.name))
|
||||||
response.setHeader('Content-Disposition', 'inline;filename="%s"' %\
|
response.setHeader('Content-Disposition', 'inline;filename="%s"' %\
|
||||||
os.path.basename(msg.name))
|
os.path.basename(msg.name))
|
||||||
response.write(msg.read())
|
response.write(msg.read())
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
<input type="hidden" name="action" value="Update"/>
|
<input type="hidden" name="action" value="Update"/>
|
||||||
<input type="hidden" name="page" tal:attributes="value page"/>
|
<input type="hidden" name="page" tal:attributes="value page"/>
|
||||||
<input type="hidden" name="nav" tal:attributes="value request/nav|nothing"/>
|
<input type="hidden" name="nav" tal:attributes="value request/nav|nothing"/>
|
||||||
<input type="hidden" name="is_new" tal:attributes="value contextObj/isTemporary"/>
|
|
||||||
<input type="hidden" name="confirmed" value="False"/>
|
<input type="hidden" name="confirmed" value="False"/>
|
||||||
<metal:show use-macro="context/ui/page/macros/show"/>
|
<metal:show use-macro="context/ui/page/macros/show"/>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,USA.
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
import os, os.path, re, time, sys, traceback, unicodedata, shutil
|
import os, os.path, re, time, sys, traceback, unicodedata, shutil, mimetypes
|
||||||
sequenceTypes = (list, tuple)
|
sequenceTypes = (list, tuple)
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
@ -532,4 +532,16 @@ class FileWrapper:
|
||||||
tool.log(CONVERSION_ERROR % (cmd, errorMessage), type='error')
|
tool.log(CONVERSION_ERROR % (cmd, errorMessage), type='error')
|
||||||
return
|
return
|
||||||
return filePath
|
return filePath
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
def getMimeType(fileName):
|
||||||
|
'''Tries to guess mime type from p_fileName.'''
|
||||||
|
res, encoding = mimetypes.guess_type(fileName)
|
||||||
|
if not res:
|
||||||
|
if fileName.endswith('.po'):
|
||||||
|
res = 'text/plain'
|
||||||
|
encoding = 'utf-8'
|
||||||
|
if not res: return ''
|
||||||
|
if not encoding: return res
|
||||||
|
return '%s;;charset=%s' % (res, encoding)
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in a new issue