import os
from suds.xsd.doctor import Import, ImportDoctor
from suds.client import Client as SudsClient
from pympl.function import FunctionRegistry
from pympl.storedproc import StoredProcedureFactory
from pympl.table import TableFactory
try:
from configparser import SafeConfigParser as ConfigParser
except ImportError:
from ConfigParser import SafeConfigParser as ConfigParser
def _init_suds(wsdl):
imp = Import('http://www.w3.org/2001/XMLSchema')
imp.filter.add('http://thinkministry.com/')
return SudsClient(wsdl, plugins=[ImportDoctor(imp)])
def _load_config_file():
config = ConfigParser()
config.read(['.pympl', os.path.expanduser('~/.pympl')])
return config
[docs]class Client(object):
"""
The central object for interacting with a specific Ministry Platform
server. Clients can be instantiated in the traditional pattern, such as::
client = Client('https://path/to/wsdl', guid, password, server_name)
Or, alternatively, you can place a `.pympl` file in your application's
directory and specify configuration parameters in that. This file is INI
formatted. An example looks like:
.. code-block:: ini
[pympl]
wsgi = http://path/to/wsdl
guid = your_guid
password = your_password
server_name = your_server_name
If a ``.pympl`` file is found upon ``Client`` instantiation, it will be
used for fallback parameters. This allows you to instantiate the client
more simply::
client = Client()
:param str wsdl: The URL of the Ministry Platform WSDL.
:param str guid: The Ministry Platform API GUID to connect with.
:param str password: The API password to use.
:param str server_name: The name of the Ministry Platform server.
:param int user_id: The default user ID to use for API calls.
.. attribute:: fn
An instance of :class:`pympl.function.FunctionRegistry`. This object
is used for initiating Ministry Platform SOAP function calls. For
example, if one wants to call the MP function `AuthenticateUser`, the
following can be done::
response = client.fn.AuthenticateUser('username', 'password')
In the instance of `AuthenticateUser`, a dictionary will be returned.
Or, if an error occurred, a :class:`pympl.exc.FunctionError`
will be thrown.
.. attribute:: sp
An instance of :class:`pympl.storedproc.StoredProcedureFactory`. This
object is used for initiating stored procedure calls on the MP
MSSQL Server instance.
For example::
response = client.sp.api_GetFormResponseById(ResponseID=3)
.. attribute:: table
An instance of :class:`pympl.table.TableFactory`. Used to easily create
:class:`Table <pympl.table.Table>` objects bound to the client.
"""
def __init__(
self, wsdl=None, guid=None, password=None, server_name=None,
user_id=0, params=None):
self._config_file = _load_config_file()
#: The URL of the WSDL
self.wsdl = wsdl or self._config_file.get('pympl', 'wsdl')
self.guid = guid or self._config_file.get('pympl', 'guid')
self.password = password or self._config_file.get('pympl', 'password')
self.server_name = server_name or self._config_file.get(
'pympl', 'server_name')
self.user_id = user_id
self.params = params or {
'trace': True,
'exceptions': 1
}
# Instantiate the suds client
self._suds = _init_suds(self.wsdl)
self.fn = FunctionRegistry(self)
self.sp = StoredProcedureFactory(self)
self.table = TableFactory(self)
def __repr__(self):
return "<pympl.Client(%s)>" % self.wsdl