Skip to content

Commit

Permalink
Merge commit 'c8e99801ac0aa037f31ab9b8e2a02f6fea4fd0ed'
Browse files Browse the repository at this point in the history
  • Loading branch information
Dilawar Singh committed Jun 26, 2016
2 parents 1eb469f + c8e9980 commit 498a2ae
Show file tree
Hide file tree
Showing 62 changed files with 14,482 additions and 27 deletions.
2 changes: 1 addition & 1 deletion moose-gui/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
all = [ "plugins" ]
all = [ "plugins", 'suds' ]
1 change: 0 additions & 1 deletion moose-gui/biomodelsclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@

# Code:


from suds.client import Client
from suds.transport.http import HttpTransport as SudsHttpTransport
import os
Expand Down
80 changes: 59 additions & 21 deletions moose-gui/mgui.py
Original file line number Diff line number Diff line change
Expand Up @@ -1101,27 +1101,25 @@ def loadModelDialogSlot(self):
self.tr('Load model from file'))

if dialog.exec_():
fileNames = dialog.selectedFiles()
for fileName in fileNames:
modelName = dialog.getTargetPath()
if '/' in modelName:
raise mexception.ElementNameError('Model name cannot contain `/`')
ret = loadFile(str(fileName),'%s' %(modelName),merge=False)
#ret = loadFile(str(fileName), '/model/%s' % (modelName), merge=False)
#Harsha: This will clear out object editor's objectpath and make it invisible
self.objectEditSlot('/',False)

# Harsha: if subtype is None, in case of cspace then pluginLookup = /cspace/None
# which will not call kkit plugin so cleaning to /cspace
pluginLookup = '%s/%s' % (ret['modeltype'], ret['subtype'])
try:
pluginName = subtype_plugin_map['%s/%s' % (ret['modeltype'], ret['subtype'])]
except KeyError:
pluginName = 'default'
print 'Loaded model', ret['model'].path
# if not moose.exists(ret['model'].path+'/info'):
# moose.Annotator(ret['model'].path+'/info')

valid = False
ret = []
ret,pluginName = self.checkPlugin(dialog)
if pluginName == 'kkit':
compt = moose.wildcardFind(ret['model'].path+'/##[ISA=ChemCompt]')
if not len(compt):
reply = QtGui.QMessageBox.question(self, "Model is empty","Model has no compartment, atleast one compartment should exist to display the widget\n Do you want another file",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
dialog = LoaderDialog(self,self.tr('Load model from file'))
if dialog.exec_():
ret,pluginName = self.checkPlugin(dialog)
ret,valid = self.dialog_check(ret)
else:
QtGui.QApplication.restoreOverrideCursor()
return
else:
valid = True
if valid == True:
modelAnno = moose.Annotator(ret['model'].path+'/info')
if ret['subtype']:
modelAnno.modeltype = ret['subtype']
Expand All @@ -1133,6 +1131,46 @@ def loadModelDialogSlot(self):
if pluginName == 'kkit':
QtCore.QCoreApplication.sendEvent(self.plugin.getEditorView().getCentralWidget().view, QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Qt.Key_A, Qt.Qt.NoModifier))

def checkPlugin(self,dialog):
fileNames = dialog.selectedFiles()
for fileName in fileNames:
modelName = dialog.getTargetPath()
if '/' in modelName:
raise mexception.ElementNameError('Model name cannot contain `/`')
ret = loadFile(str(fileName),'%s' %(modelName),merge=False)
#ret = loadFile(str(fileName), '/model/%s' % (modelName), merge=False)
#This will clear out object editor's objectpath and make it invisible
self.objectEditSlot('/',False)
#if subtype is None, in case of cspace then pluginLookup = /cspace/None
# which will not call kkit plugin so cleaning to /cspace
pluginLookup = '%s/%s' % (ret['modeltype'], ret['subtype'])
try:
pluginName = subtype_plugin_map['%s/%s' % (ret['modeltype'], ret['subtype'])]
except KeyError:
pluginName = 'default'
print 'Loaded model', ret['model'].path
return ret,pluginName

def dialog_check(self,ret):
pluginLookup = '%s/%s' % (ret['modeltype'], ret['subtype'])
try:
pluginName = subtype_plugin_map['%s/%s' % (ret['modeltype'], ret['subtype'])]
except KeyError:
pluginName = 'default'
if pluginName == 'kkit':
compt = moose.wildcardFind(ret['model'].path+'/##[ISA=ChemCompt]')
if not len(compt):
reply = QtGui.QMessageBox.question(self, "Model is empty","Model has no compartment, atleast one compartment should exist to display the widget\n Do you want another file",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
dialog = LoaderDialog(self,self.tr('Load model from file'))
if dialog.exec_():
ret,pluginName = self.checkPlugin(dialog)
else:
QtGui.QApplication.restoreOverrideCursor()
return
else:
return ret,True
def newModelDialogSlot(self):
#Harsha: Create a new dialog widget for model building
self.popup.close()
Expand Down
4 changes: 2 additions & 2 deletions moose-gui/mload.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@
from plugins.setsolver import *

def loadGenCsp(target,filename,solver="gsl"):
target = target.replace(" ", "")
path = '/'+target
#Harsha: Moving the model under /modelname/model and graphs under /model/graphs.
#Moving the model under /modelname/model and graphs under /model/graphs.
#This is passed while loading-time which will be easy for setting the stoich path
mpath = '/'+target+'/'+"model"
if moose.exists(mpath):
moose.delete(mpath)

modelpath1 = moose.Neutral('%s' %(target))
modelpath = moose.Neutral('%s/%s' %(modelpath1.path,"model"))
model = moose.loadModel(filename, modelpath.path,solver)
Expand Down
7 changes: 5 additions & 2 deletions moose-gui/plugins/kkitUtil.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,11 @@ def colorCheck(fc_bgcolor,fcbg):
elif fc_bgcolor.isdigit():
""" color is int a map from int to r,g,b triplets from pickled color map file """
tc = int(fc_bgcolor)
tc = 2*tc
pickledColor = colorMap[tc]
tc = tc*2
if tc < len(colorMap):
pickledColor = colorMap[tc]
else:
pickledColor = (255, 0, 0)
fc_bgcolor = QColor(*pickledColor)

elif fc_bgcolor.isalpha() or fc_bgcolor.isalnum():
Expand Down
192 changes: 192 additions & 0 deletions moose-gui/suds/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# This program is free software; you can redistribute it and/or modify
# it under the terms of the (LGPL) GNU Lesser General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Lesser General Public License for more details at
# ( http://www.gnu.org/licenses/lgpl.html ).
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# written by: Jeff Ortel ( [email protected] )

"""
Suds is a lightweight SOAP Python client providing a Web Service proxy.
"""

import sys


#
# Project properties
#

from version import __build__, __version__


#
# Exceptions
#

class MethodNotFound(Exception):
def __init__(self, name):
Exception.__init__(self, u"Method not found: '%s'" % name)

class PortNotFound(Exception):
def __init__(self, name):
Exception.__init__(self, u"Port not found: '%s'" % name)

class ServiceNotFound(Exception):
def __init__(self, name):
Exception.__init__(self, u"Service not found: '%s'" % name)

class TypeNotFound(Exception):
def __init__(self, name):
Exception.__init__(self, u"Type not found: '%s'" % tostr(name))

class BuildError(Exception):
msg = """
An error occurred while building an instance of (%s). As a result the
object you requested could not be constructed. It is recommended that
you construct the type manually using a Suds object. Please open a
ticket with a description of this error.
Reason: %s
"""
def __init__(self, name, exception):
Exception.__init__(self, BuildError.msg % (name, exception))

class SoapHeadersNotPermitted(Exception):
msg = """
Method (%s) was invoked with SOAP headers. The WSDL does not define
SOAP headers for this method. Retry without the soapheaders keyword
argument.
"""
def __init__(self, name):
Exception.__init__(self, self.msg % name)

class WebFault(Exception):
def __init__(self, fault, document):
if hasattr(fault, 'faultstring'):
Exception.__init__(self, u"Server raised fault: '%s'" %
fault.faultstring)
self.fault = fault
self.document = document


#
# Logging
#

class Repr:
def __init__(self, x):
self.x = x
def __str__(self):
return repr(self.x)


#
# Utility
#

class null:
"""
The I{null} object.
Used to pass NULL for optional XML nodes.
"""
pass

def objid(obj):
return obj.__class__.__name__ + ':' + hex(id(obj))

def tostr(object, encoding=None):
""" get a unicode safe string representation of an object """
if isinstance(object, basestring):
if encoding is None:
return object
else:
return object.encode(encoding)
if isinstance(object, tuple):
s = ['(']
for item in object:
if isinstance(item, basestring):
s.append(item)
else:
s.append(tostr(item))
s.append(', ')
s.append(')')
return ''.join(s)
if isinstance(object, list):
s = ['[']
for item in object:
if isinstance(item, basestring):
s.append(item)
else:
s.append(tostr(item))
s.append(', ')
s.append(']')
return ''.join(s)
if isinstance(object, dict):
s = ['{']
for item in object.items():
if isinstance(item[0], basestring):
s.append(item[0])
else:
s.append(tostr(item[0]))
s.append(' = ')
if isinstance(item[1], basestring):
s.append(item[1])
else:
s.append(tostr(item[1]))
s.append(', ')
s.append('}')
return ''.join(s)
try:
return unicode(object)
except:
return str(object)


#
# Python 3 compatibility
#

if sys.version_info < (3, 0):
from cStringIO import StringIO as BytesIO
else:
from io import BytesIO

# Idea from 'http://lucumr.pocoo.org/2011/1/22/forwards-compatible-python'.
class UnicodeMixin(object):
if sys.version_info >= (3, 0):
# For Python 3, __str__() and __unicode__() should be identical.
__str__ = lambda x: x.__unicode__()
else:
__str__ = lambda x: unicode(x).encode('utf-8')

# Used instead of byte literals because they are not supported on Python
# versions prior to 2.6.
def byte_str(s='', encoding='utf-8', input_encoding='utf-8', errors='strict'):
"""
Returns a bytestring version of 's', encoded as specified in 'encoding'.
Accepts str & unicode objects, interpreting non-unicode strings as byte
strings encoded using the given input encoding.
"""
assert isinstance(s, basestring)
if isinstance(s, unicode):
return s.encode(encoding, errors)
if s and encoding != input_encoding:
return s.decode(input_encoding, errors).encode(encoding, errors)
return s

# Class used to represent a byte string. Useful for asserting that correct
# string types are being passed around where needed.
if sys.version_info >= (3, 0):
byte_str_class = bytes
else:
byte_str_class = str
Loading

0 comments on commit 498a2ae

Please sign in to comment.