def run(self, stdout=sys.stdout, stderr=sys.stderr):
if self.options.local or self.options.describe:<EOL><INDENT>context, adapter = self._makeAdapter()<EOL>if self.options.describe:<EOL><INDENT>self.describe(stdout)<EOL>adapter.describe(stdout)<EOL><DEDENT>self.dbsession.rollback()<EOL>return <NUM_LIT:0><EOL><DEDENT>if self.options.server:<EOL><INDENT>return self._runServer(stdout, stderr)<EOL><DEDENT>return self._runClient(stdout, stderr)<EOL>
Runs this SyncEngine by executing one of the following functions
(as controlled by command-line options or stored parameters):

* Display local pending changes.
* Describe local configuration.
* Run an HTTP server and engage server-side mode.
* Connect to a remote SyncML peer and engage client-side mode.

NOTE: when running in the first two modes, all database interactions
are rolled back in order to keep the SyncEngine idempotent.