[pytango] 167/483: added TEPs

Sandor Bodo-Merle sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:14:37 UTC 2017


This is an automated email from the git hooks/post-receive script.

sbodomerle-guest pushed a commit to annotated tag bliss_8.10
in repository pytango.

commit 1a0d309381f9dcbf2130e06a459cb1d950c9ee38
Author: tiagocoutinho <tiagocoutinho at 4e9c00fd-8f2e-0410-aa12-93ce3db5e235>
Date:   Thu Oct 18 10:38:07 2012 +0000

    added TEPs
    
    
    git-svn-id: http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk@21349 4e9c00fd-8f2e-0410-aa12-93ce3db5e235
---
 doc/conf.py          |    4 +
 doc/contents.rst     |    1 +
 doc/tep.rst          |   13 +
 doc/tep/DataBase.xmi |  817 ++++++++++++++++++++
 doc/tep/database.py  | 2091 ++++++++++++++++++++++++++++++++++++++++++++++++++
 doc/tep/tep-0001.rst |  439 +++++++++++
 doc/tep/tep-0002.rst |  328 ++++++++
 7 files changed, 3693 insertions(+)

diff --git a/doc/conf.py b/doc/conf.py
index 0443ce7..c7cc7eb 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -252,6 +252,10 @@ intersphinx_mapping = {
     'http://docs.scipy.org/doc/scipy/reference' : None,
     'http://docs.scipy.org/doc/numpy' : None,
     'http://ipython.org/ipython-doc/stable/' : None,
+    'http://api.mongodb.org/python/current/' : None,
+    'http://packages.python.org/CouchDB/' : None,
+    'http://pycassa.github.com/pycassa/' : None,
+    'http://docs.sqlalchemy.org/en/rel_0_7/' : None,
 }
 
 def copy_spaces(origin):
diff --git a/doc/contents.rst b/doc/contents.rst
index 524f5c2..dacf3b2 100644
--- a/doc/contents.rst
+++ b/doc/contents.rst
@@ -14,6 +14,7 @@ Contents
     quicktour
     itango/index
     API <api>
+    TEP <tep>
     faq
     History of changes <revision>
     
diff --git a/doc/tep.rst b/doc/tep.rst
new file mode 100644
index 0000000..d888037
--- /dev/null
+++ b/doc/tep.rst
@@ -0,0 +1,13 @@
+.. currentmodule:: PyTango
+
+.. _pytango_enhancement_proposals:
+
+=============================
+PyTango Enhancement Proposals
+=============================
+
+.. toctree::
+    :maxdepth: 1
+    
+    tep/tep-0001
+    tep/tep-0002
diff --git a/doc/tep/DataBase.xmi b/doc/tep/DataBase.xmi
new file mode 100644
index 0000000..76954a4
--- /dev/null
+++ b/doc/tep/DataBase.xmi
@@ -0,0 +1,817 @@
+<?xml version="1.0" encoding="ASCII"?>
+<pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
+  <classes name="DataBase" pogoRevision="8.1">
+    <description description="This class manage the TANGO database." title="TANGO" sourcePath="/home/tcoutinho/workspace/PyTango/doc/tep" language="Python" filestogenerate="XMI   file,Code files" hasMandatoryProperty="false" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
+      <inheritances classname="Device_4Impl" sourcePath="/segfs/tango/templates/AbstractClasses"/>
+      <identification contact="at cells.es - controls" author="controls" emailDomain="cells.es" classFamily="System" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="none" reference=""/>
+    </description>
+    <commands name="State" description="This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="none.">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="State Code">
+        <type xsi:type="pogoDsl:StateType"/>
+      </argout>
+      <status abstract="true" inherited="true" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="Status" description="This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller." execMethod="dev_status" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="none.">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="Status description">
+        <type xsi:type="pogoDsl:ConstStringType"/>
+      </argout>
+      <status abstract="true" inherited="true" concrete="true" concreteHere="false"/>
+    </commands>
+    <commands name="DbAddDevice" description="Add a Tango class device to a specific device server" execMethod="db_add_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Full device server process name&#xA;Str[1] = Device name&#xA;Str[2] = Tango class name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbAddServer" description="Create a device server process entry in database" execMethod="db_add_server" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Full device server name&#xA;Str[1] = Device(s) name&#xA;Str[2] = Tango class name&#xA;Str[n] = Device name&#xA;Str[n + 1] = Tango class name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteAttributeAlias" description="Delete an attribute alias." execMethod="db_delete_attribute_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Attriibute alias name.">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteClassAttribute" description="delete a class attribute and all its properties from database" execMethod="db_delete_class_attribute" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteClassAttributeProperty" description="delete class attribute properties from database" execMethod="db_delete_class_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute name&#xA;Str[2] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteClassProperty" description="Delete class properties from database" execMethod="db_delete_class_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteDevice" description="Delete a devcie from database" execMethod="db_delete_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteDeviceAlias" description="Delete a device alias." execMethod="db_delete_device_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="device alias name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteDeviceAttribute" description="Delete  device attribute properties from database" execMethod="db_delete_device_attribute" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteDeviceAttributeProperty" description="delete a device attribute property from the database" execMethod="db_delete_device_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute name&#xA;Str[2] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteDeviceProperty" description="Delete device property(ies)" execMethod="db_delete_device_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteProperty" description="Delete free property from database" execMethod="db_delete_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0]  = Object name&#xA;Str[1] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteServer" description="Delete server from the database but dont delete device properties" execMethod="db_delete_server" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device server name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteServerInfo" description="delete info related to a Tango devvice server process" execMethod="db_delete_server_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device server name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbExportDevice" description="Export a device to the database" execMethod="db_export_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = CORBA IOR&#xA;Str[2] = Device server process host name&#xA;Str[3] = Device server process PID or string ``null``&#xA;Str[4] = Device server process version">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbExportEvent" description="Export Event channel to database" execMethod="db_export_event" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = event channel name (or factory name)&#xA;Str[1] = CORBA IOR&#xA;Str[2] = Notifd host name&#xA;Str[3] = Notifd pid&#xA;Str[4] = Notifd version">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetAliasDevice" description="Get device name from its alias." execMethod="db_get_alias_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Alias name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetAttributeAlias" description="Get the attribute name for the given alias.&#xA;If alias not found in database, returns an empty string." execMethod="db_get_attribute_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The attribute alias name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="The attribute name (device/attribute)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetAttributeAliasList" description="Get attribute alias list for a specified filter" execMethod="db_get_attribute_alias_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="attribute alias filter string (eg: att*)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="attribute aliases">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassAttributeList" description="Get attrilute list for a given Tango class with a specified filter" execMethod="db_get_class_attribute_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute name filter (eg: att*)">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Class attribute name&#xA;Str[n] = Class attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassAttributeProperty" description="Get Tango class property(ies) value" execMethod="db_get_class_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute name&#xA;Str[n] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Tango class name&#xA;Str[1] = Attribute property  number&#xA;Str[2] = Attribute property 1 name&#xA;Str[3] = Attribute property 1 value&#xA;Str[n + 1] = Attribute property 2 name&#xA;Str[n + 2] = Attribute property 2 value">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassAttributeProperty2" description="This command supports array property compared to the old command called&#xA;DbGetClassAttributeProperty. The old command has not been deleted from the&#xA;server for compatibility reasons." execMethod="db_get_class_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute name&#xA;Str[n] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Tango class name&#xA;Str[1] = Attribute property  number&#xA;Str[2] = Attribute property 1 name&#xA;Str[3] = Attribute property 1 value number (array case)&#xA;Str[4] = Attribute property 1 value&#xA;Str[n] = Attribute property 1 value (array case)&#xA;Str[n + 1] = Attribute property 2 name&#xA;Str[n + 2] = Attribute property 2 value number (array case)&#xA;Str[n + 3] = Attribute property 2 value&#xA;Str[n + m] = Attribute property 2 value (array case)">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassAttributePropertyHist" description="Retrieve Tango class attribute property history" execMethod="db_get_class_attribute_property_hist" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class&#xA;Str[1] = Attribute name&#xA;Str[2] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Attribute name&#xA;Str[1] = Property name&#xA;Str[2] = date&#xA;Str[3] = Property value number (array case)&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassForDevice" description="Get Tango class for the specified device." execMethod="db_get_class_for_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device Tango class">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassInheritanceForDevice" description="Get class inheritance for the specified device." execMethod="db_get_class_inheritance_for_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Classes off the specified device.&#xA;[0] - is the class of the device.&#xA;[1] - is the class from the device class is inherited.&#xA;........and so on">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassList" description="Get Tango class list with a specified filter" execMethod="db_get_class_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Class list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassProperty" description="" execMethod="db_get_class_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class&#xA;Str[1] = Property name&#xA;Str[2] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Tango class&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number (array case)&#xA;Str[4] = Property value&#xA;Str[n] = Propery value (array case)&#xA;....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassPropertyHist" description="Retrieve Tango class property history" execMethod="db_get_class_property_hist" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class&#xA;Str[1] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Property name&#xA;Str[1] = date&#xA;Str[2] = Property value number (array case)&#xA;Str[3] = Property value 1&#xA;Str[n] = Property value n">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetClassPropertyList" description="Get property list for a given Tango class with a specified filter" execMethod="db_get_class_property_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Property name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAlias" description="Return alias for device name if found." execMethod="db_get_device_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="The alias found">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAliasList" description="Get device alias name with a specific filter" execMethod="db_get_device_alias_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device alias list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAttributeList" description="Return list of attributes matching the wildcard&#xA; for the specified device" execMethod="db_get_device_attribute_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Wildcard">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="attribute name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAttributeProperty" description="Get device attribute property(ies) value" execMethod="db_get_device_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute name&#xA;Str[n] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Device name&#xA;Str[1] = Attribute property  number&#xA;Str[2] = Attribute property 1 name&#xA;Str[3] = Attribute property 1 value&#xA;Str[n + 1] = Attribute property 2 name&#xA;Str[n + 2] = Attribute property 2 value">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAttributeProperty2" description="Retrieve device attribute properties. This command has the possibility to retrieve&#xA;device attribute properties which are arrays. It is not possible with the old&#xA;DbGetDeviceAttributeProperty command. Nevertheless, the old command has not been&#xA;deleted for compatibility reason" execMethod="db_get_device_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute name&#xA;Str[n] = Attribute name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Device name&#xA;Str[1] = Attribute property  number&#xA;Str[2] = Attribute property 1 name&#xA;Str[3] = Attribute property 1 value number (array case)&#xA;Str[4] = Attribute property 1 value&#xA;Str[n] = Attribute property 1 value (array case)&#xA;Str[n + 1] = Attribute property 2 name&#xA;Str[n + 2] = Attribute property 2 value number (array case)&#xA;Str[n + 3] = Attribute property 2 value&#xA;Str[n + m] = Attribute property 2 value (array case)">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceAttributePropertyHist" description="Retrieve device attribute property history" execMethod="db_get_device_attribute_property_hist" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute name&#xA;Str[2] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Attribute name&#xA;Str[1] = Property name&#xA;Str[2] = date&#xA;Str[3] = Property value number (array case)&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceClassList" description="Get Tango classes/device list embedded in a specific device server" execMethod="db_get_device_class_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device server process name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Str[0] = Device name&#xA;Str[1] = Tango class&#xA;Str[n] = Device name&#xA;Str[n + 1] = Tango class">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceDomainList" description="Get list of device domain name matching the specified" execMethod="db_get_device_domain_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The wildcard">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device name domain list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceExportedList" description="Get a list of exported devices whose names satisfy the filter (wildcard is" execMethod="db_get_device_exported_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="list of exported devices">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceFamilyList" description="Get a list of device name families for device name matching the&#xA;specified wildcard" execMethod="db_get_device_family_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The wildcard">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Family list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceInfo" description="Returns info from DbImportDevice and started/stopped dates." execMethod="db_get_device_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Str[0] = Device name&#xA;Str[1] = CORBA IOR&#xA;Str[2] = Device version&#xA;Str[3] = Device Server name&#xA;Str[4] = Device Server process host name&#xA;Str[5] = Started date (or ? if not set)&#xA;Str[6] = Stopped date (or ? if not set)&#xA;Str[7] = Device class&#xA;&#xA;Lg[0] = Device exported flag&#xA;Lg[1] = Device Server process PID (or -1 if not set)">
+        <type xsi:type="pogoDsl:LongStringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceList" description="Get a list of devices for specified server and class." execMethod="db_get_device_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="argin[0] : server name&#xA;argin[1] : class name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="The list of devices for specified server and class.">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceWideList" description="Get a list of devices whose names satisfy the filter." execMethod="db_get_device_wide_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="list of exported devices">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceMemberList" description="Get a list of device name members for device name matching the&#xA;specified filter" execMethod="db_get_device_member_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device names member list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceProperty" description="" execMethod="db_get_device_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Device name&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number (array case)&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n (array case)&#xA;Str[n + 1] = Property name&#xA;Str[n + 2] = Property value number (array case)&#xA;Str[n + 3] = Property value 1&#xA;Str[n + m] = Property value m">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDevicePropertyHist" description="Retrieve device  property history" execMethod="db_get_device_property_hist" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[2] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Property name&#xA;Str[1] = date&#xA;Str[2] = Property value number (array case)&#xA;Str[3] = Property value 1&#xA;Str[n] = Property value n">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDevicePropertyList" description="Get property list belonging to the specified device and with&#xA;name matching the specified filter" execMethod="db_get_device_property_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = device name&#xA;Str[1] = Filter">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Property name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDeviceServerClassList" description="Get list of Tango classes for a device server" execMethod="db_get_device_server_class_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="device server process name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="list of classes for this device server">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetExportdDeviceListForClass" description="Query the database for device exported for the specified class." execMethod="db_get_exportd_device_list_for_class" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Class name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device exported list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetHostList" description="Get host list with name matching the specified filter" execMethod="db_get_host_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Host name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetHostServerList" description="Get list of device server process name running on host with name matching&#xA;the specified filter" execMethod="db_get_host_server_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device server process name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetHostServersInfo" description="Get info about all servers running on specified host, name, mode and level" execMethod="db_get_host_servers_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Host name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Server info for all servers running on specified host">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetInstanceNameList" description="Returns the instance names found for specified server." execMethod="db_get_instance_name_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Server name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="The instance names found for specified server.">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetObjectList" description="Get list of free object defined in database with name&#xA;matching the specified filter" execMethod="db_get_object_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Object name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetProperty" description="Get free object property" execMethod="db_get_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Object name&#xA;Str[1] = Property name&#xA;Str[n] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Object name&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number (array case)&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n (array case)&#xA;Str[n + 1] = Property name&#xA;Str[n + 2] = Property value number (array case)&#xA;Str[n + 3] = Property value 1&#xA;Str[n + m] = Property value m">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetPropertyHist" description="Retrieve object  property history" execMethod="db_get_property_hist" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Object name&#xA;Str[2] = Property name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Str[0] = Property name&#xA;Str[1] = date&#xA;Str[2] = Property value number (array case)&#xA;Str[3] = Property value 1&#xA;Str[n] = Property value n">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetPropertyList" description="Get list of property defined for a free object and matching the&#xA;specified filter" execMethod="db_get_property_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Object name&#xA;Str[1] = filter">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="Property name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetServerInfo" description="Get info about host, mode and level for specified server" execMethod="db_get_server_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="server name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="server info">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetServerList" description="Get list of device server process defined in database&#xA;with name matching the specified filter" execMethod="db_get_server_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The filter">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Device server process name list">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetServerNameList" description="Returns the list of server names found for the wildcard specified.&#xA;It returns only the server executable name without instance name as DbGetServerList." execMethod="db_get_server_name_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="wildcard for server names.">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="server names found.">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbImportDevice" description="Import a device from the database" execMethod="db_import_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device name (or alias)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="Str[0] = device name&#xA;Str[1] = CORBA IOR&#xA;Str[2] = device version&#xA;Str[3] = device server process name&#xA;Str[4] = host name&#xA;Str[5] = Tango class name&#xA;&#xA;Lg[0] = Exported flag&#xA;Lg[1] = Device server process PID">
+        <type xsi:type="pogoDsl:LongStringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbImportEvent" description="Get event channel info from database" execMethod="db_import_event" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="name of event channel or factory">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="export information e.g. IOR">
+        <type xsi:type="pogoDsl:LongStringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbInfo" description="Get miscellaneous numbers on information&#xA;stored in database" execMethod="db_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="Miscellaneous info like:&#xA;- Device defined in database&#xA;- Device marked as exported in database&#xA;- Device server process defined in database&#xA;- Device server process marked as exported in database&#xA;- Device properties defined in database&#xA;- Class properties defined in database&#xA;- Device attribute properties defined in database&#xA;- Class attribute properties defined in database&#xA;- Object properties defined in database">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutAttributeAlias" description="Define an alias for an attribute" execMethod="db_put_attribute_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = attribute name&#xA;Str[1] = attribute alias">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutClassAttributeProperty" description="Create/Update class attribute property(ies) in database" execMethod="db_put_class_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute number&#xA;Str[2] = Attribute name&#xA;Str[3] = Property number&#xA;Str[4] = Property name&#xA;Str[5] = Property value&#xA;.....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutClassAttributeProperty2" description="This command adds support for array properties compared to the previous one&#xA;called DbPutClassAttributeProperty. The old comman is still there for compatibility reason" execMethod="db_put_class_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Attribute number&#xA;Str[2] = Attribute name&#xA;Str[3] = Property number&#xA;Str[4] = Property name&#xA;Str[5] = Property value number (array case)&#xA;Str[5] = Property value 1&#xA;Str[n] = Property value n (array case)&#xA;.....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutClassProperty" description="Create / Update class property(ies)" execMethod="db_put_class_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango class name&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n&#xA;....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutDeviceAlias" description="Define alias for  a given device name" execMethod="db_put_device_alias" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = device name&#xA;Str[1] = alias name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutDeviceAttributeProperty" description="Create/Update device attribute property(ies) in database" execMethod="db_put_device_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute number&#xA;Str[2] = Attribute name&#xA;Str[3] = Property number&#xA;Str[4] = Property name&#xA;Str[5] = Property value&#xA;.....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutDeviceAttributeProperty2" description="Put device attribute property. This command adds the possibility to have attribute property&#xA;which are arrays. Not possible with the old DbPutDeviceAttributeProperty command.&#xA;This old command is not deleted for compatibility reasons." execMethod="db_put_device_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Device name&#xA;Str[1] = Attribute number&#xA;Str[2] = Attribute name&#xA;Str[3] = Property number&#xA;Str[4] = Property name&#xA;Str[5] = Property value number (array case)&#xA;Str[5] = Property value 1&#xA;Str[n] = Property value n (array case)&#xA;.....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutDeviceProperty" description="Create / Update device property(ies)" execMethod="db_put_device_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Tango device name&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n&#xA;....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutProperty" description="Create / Update free object property(ies)" execMethod="db_put_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Str[0] = Object name&#xA;Str[1] = Property number&#xA;Str[2] = Property name&#xA;Str[3] = Property value number&#xA;Str[4] = Property value 1&#xA;Str[n] = Property value n&#xA;....">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbPutServerInfo" description="Update server info including host, mode and level" execMethod="db_put_server_info" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="server info">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbUnExportDevice" description="Mark a device as non exported in database" execMethod="db_un_export_device" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device name">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbUnExportEvent" description="Mark one event channel as non exported in database" execMethod="db_un_export_event" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="name of event channel or factory to unexport">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="none">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbUnExportServer" description="Mark all devices belonging to a specified device server&#xA;process as non exported" execMethod="db_un_export_server" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Device server name (executable/instance)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="ResetTimingValues" description="Reset the timing attribute values." execMethod="reset_timing_values" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetDataForServerCache" description="This command returns all the data needed by a device server process during its&#xA;startup sequence. The aim of this command is to minimize database access during&#xA;device server startup sequence." execMethod="db_get_data_for_server_cache" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="Elt[0] = DS name (exec_name/inst_name), Elt[1] = Host name">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="All the data needed by the device server during its startup sequence. Precise list depend on the device server">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbDeleteAllDeviceAttributeProperty" description="Delete all attribute properties for the specified device attribute(s)" execMethod="db_delete_all_device_attribute_property" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="str[0] = device name&#xA;Str[1]...str[n] = attribute name(s)">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbMySqlSelect" description="This is a very low level command.&#xA;It executes the specified  SELECT command on TANGO database and returns its result without filter." execMethod="db_my_sql_select" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="MySql Select command">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="MySql Select command result&#xA; - svalues : select results&#xA; - lvalue[n] : =0 if svalue[n] is null else =1&#xA; (last lvalue -1) is number of rows, (last lvalue) is number of fields">
+        <type xsi:type="pogoDsl:LongStringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetCSDbServerList" description="Get a list of host:port for all database server defined in the control system" execMethod="db_get_csdb_server_list" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="List of host:port with one element for each database server">
+        <type xsi:type="pogoDsl:StringArrayType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetAttributeAlias2" description="Get the attribute alias from the attribute name.&#xA;Returns one empty string if nothing found in database" execMethod="db_get_attribute_alias2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The attribute name (dev_name/att_name)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="The attribute alias name (or empty string)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="DbGetAliasAttribute" description="Get the attribute name from the given alias.&#xA;If the given alias is not found in database, returns an empty string" execMethod="db_get_alias_attribute" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The attribute alias">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="The attribute name (dev_name/att_name)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <attributes name="StoredProcedureRelease" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0">
+      <dataType xsi:type="pogoDsl:StringType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_average" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:DoubleType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_minimum" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:DoubleType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_maximum" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:DoubleType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_calls" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:DoubleType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_index" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:StringType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="Timing_info" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="64" maxY="0">
+      <dataType xsi:type="pogoDsl:StringType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <preferences docHome="./doc_html" makefileHome="/home/tcoutinho/local-tango8/share/pogo/preferences"/>
+    <additionalFiles name="DataBaseUtils" path="/mntdirect/_segfs/tango/cppserver/dbase/DataBaseUtils.cpp"/>
+    <additionalFiles name="update_starter" path="/mntdirect/_segfs/tango/cppserver/dbase/update_starter.cpp"/>
+  </classes>
+</pogoDsl:PogoSystem>
diff --git a/doc/tep/database.py b/doc/tep/database.py
new file mode 100644
index 0000000..837eeb8
--- /dev/null
+++ b/doc/tep/database.py
@@ -0,0 +1,2091 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*- 
+
+
+##############################################################################
+## license :
+##============================================================================
+##
+## File :        DataBase.py
+## 
+## Project :     TANGO
+##
+## $Author :      controls$
+##
+## $Revision :    $
+##
+## $Date :        $
+##
+## $HeadUrl :     $
+##============================================================================
+##            This file is generated by POGO
+##    (Program Obviously used to Generate tango Object)
+##
+##        (c) - Software Engineering Group - ESRF
+##############################################################################
+
+"""This class manage the TANGO database."""
+
+__all__ = ["DataBase", "DataBaseClass", "main"]
+
+__docformat__ = 'restructuredtext'
+
+import PyTango
+import sys
+# Add additional import
+#----- PROTECTED REGION ID(DataBase.additionnal_import) ENABLED START -----#
+
+#----- PROTECTED REGION END -----#	//	DataBase.additionnal_import
+
+##############################################################################
+## Device States Description
+##
+## No states for this device
+##############################################################################
+
+class DataBase (PyTango.Device_4Impl):
+
+#--------- Add you global variables here --------------------------
+#----- PROTECTED REGION ID(DataBase.global_variables) ENABLED START -----#
+
+#----- PROTECTED REGION END -----#	//	DataBase.global_variables
+#------------------------------------------------------------------
+#    Device constructor
+#------------------------------------------------------------------
+    def __init__(self,cl, name):
+        PyTango.Device_4Impl.__init__(self,cl,name)
+        self.debug_stream("In " + self.get_name() + ".__init__()")
+        DataBase.init_device(self)
+
+#------------------------------------------------------------------
+#    Device destructor
+#------------------------------------------------------------------
+    def delete_device(self):
+        self.debug_stream("In " + self.get_name() + ".delete_device()")
+        #----- PROTECTED REGION ID(DataBase.delete_device) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.delete_device
+
+#------------------------------------------------------------------
+#    Device initialization
+#------------------------------------------------------------------
+    def init_device(self):
+        self.debug_stream("In " + self.get_name() + ".init_device()")
+        self.get_device_properties(self.get_device_class())
+        self.attr_StoredProcedureRelease_read = ''
+        self.attr_Timing_average_read = [0.0]
+        self.attr_Timing_minimum_read = [0.0]
+        self.attr_Timing_maximum_read = [0.0]
+        self.attr_Timing_calls_read = [0.0]
+        self.attr_Timing_index_read = ['']
+        self.attr_Timing_info_read = ['']
+        #----- PROTECTED REGION ID(DataBase.init_device) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.init_device
+
+#------------------------------------------------------------------
+#    Always excuted hook method
+#------------------------------------------------------------------
+    def always_executed_hook(self):
+        self.debug_stream("In " + self.get_name() + ".always_excuted_hook()")
+        #----- PROTECTED REGION ID(DataBase.always_executed_hook) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.always_executed_hook
+
+#==================================================================
+#
+#    DataBase read/write attribute methods
+#
+#==================================================================
+
+#------------------------------------------------------------------
+#    Read StoredProcedureRelease attribute
+#------------------------------------------------------------------
+    def read_StoredProcedureRelease(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_StoredProcedureRelease()")
+        #----- PROTECTED REGION ID(DataBase.StoredProcedureRelease_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.StoredProcedureRelease_read
+        attr.set_value(self.attr_StoredProcedureRelease_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_average attribute
+#------------------------------------------------------------------
+    def read_Timing_average(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_average()")
+        #----- PROTECTED REGION ID(DataBase.Timing_average_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_average_read
+        attr.set_value(self.attr_Timing_average_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_minimum attribute
+#------------------------------------------------------------------
+    def read_Timing_minimum(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_minimum()")
+        #----- PROTECTED REGION ID(DataBase.Timing_minimum_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_minimum_read
+        attr.set_value(self.attr_Timing_minimum_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_maximum attribute
+#------------------------------------------------------------------
+    def read_Timing_maximum(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_maximum()")
+        #----- PROTECTED REGION ID(DataBase.Timing_maximum_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_maximum_read
+        attr.set_value(self.attr_Timing_maximum_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_calls attribute
+#------------------------------------------------------------------
+    def read_Timing_calls(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_calls()")
+        #----- PROTECTED REGION ID(DataBase.Timing_calls_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_calls_read
+        attr.set_value(self.attr_Timing_calls_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_index attribute
+#------------------------------------------------------------------
+    def read_Timing_index(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_index()")
+        #----- PROTECTED REGION ID(DataBase.Timing_index_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_index_read
+        attr.set_value(self.attr_Timing_index_read)
+        
+#------------------------------------------------------------------
+#    Read Timing_info attribute
+#------------------------------------------------------------------
+    def read_Timing_info(self, attr):
+        self.debug_stream("In " + self.get_name() + ".read_Timing_info()")
+        #----- PROTECTED REGION ID(DataBase.Timing_info_read) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.Timing_info_read
+        attr.set_value(self.attr_Timing_info_read)
+        
+
+
+
+#------------------------------------------------------------------
+#    Read Attribute Hardware
+#------------------------------------------------------------------
+    def read_attr_hardware(self, data):
+        self.debug_stream("In " + self.get_name() + ".read_attr_hardware()")
+        #----- PROTECTED REGION ID(DataBase.read_attr_hardware) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.read_attr_hardware
+
+
+#==================================================================
+#
+#    DataBase command methods
+#
+#==================================================================
+
+#------------------------------------------------------------------
+#    DbAddDevice command:
+#------------------------------------------------------------------
+    def DbAddDevice(self, argin):
+        """ Add a Tango class device to a specific device server
+        
+        :param argin: Str[0] = Full device server process name
+        Str[1] = Device name
+        Str[2] = Tango class name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbAddDevice()")
+        #----- PROTECTED REGION ID(DataBase.DbAddDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbAddDevice
+        
+#------------------------------------------------------------------
+#    DbAddServer command:
+#------------------------------------------------------------------
+    def DbAddServer(self, argin):
+        """ Create a device server process entry in database
+        
+        :param argin: Str[0] = Full device server name
+        Str[1] = Device(s) name
+        Str[2] = Tango class name
+        Str[n] = Device name
+        Str[n + 1] = Tango class name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbAddServer()")
+        #----- PROTECTED REGION ID(DataBase.DbAddServer) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbAddServer
+        
+#------------------------------------------------------------------
+#    DbDeleteAttributeAlias command:
+#------------------------------------------------------------------
+    def DbDeleteAttributeAlias(self, argin):
+        """ Delete an attribute alias.
+        
+        :param argin: Attriibute alias name.
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteAttributeAlias()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteAttributeAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteAttributeAlias
+        
+#------------------------------------------------------------------
+#    DbDeleteClassAttribute command:
+#------------------------------------------------------------------
+    def DbDeleteClassAttribute(self, argin):
+        """ delete a class attribute and all its properties from database
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassAttribute()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteClassAttribute) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassAttribute
+        
+#------------------------------------------------------------------
+#    DbDeleteClassAttributeProperty command:
+#------------------------------------------------------------------
+    def DbDeleteClassAttributeProperty(self, argin):
+        """ delete class attribute properties from database
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute name
+        Str[2] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassAttributeProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteClassAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassAttributeProperty
+        
+#------------------------------------------------------------------
+#    DbDeleteClassProperty command:
+#------------------------------------------------------------------
+    def DbDeleteClassProperty(self, argin):
+        """ Delete class properties from database
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteClassProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteClassProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteClassProperty
+        
+#------------------------------------------------------------------
+#    DbDeleteDevice command:
+#------------------------------------------------------------------
+    def DbDeleteDevice(self, argin):
+        """ Delete a devcie from database
+        
+        :param argin: device name
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteDevice()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDevice
+        
+#------------------------------------------------------------------
+#    DbDeleteDeviceAlias command:
+#------------------------------------------------------------------
+    def DbDeleteDeviceAlias(self, argin):
+        """ Delete a device alias.
+        
+        :param argin: device alias name
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAlias()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAlias
+        
+#------------------------------------------------------------------
+#    DbDeleteDeviceAttribute command:
+#------------------------------------------------------------------
+    def DbDeleteDeviceAttribute(self, argin):
+        """ Delete  device attribute properties from database
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAttribute()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAttribute) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAttribute
+        
+#------------------------------------------------------------------
+#    DbDeleteDeviceAttributeProperty command:
+#------------------------------------------------------------------
+    def DbDeleteDeviceAttributeProperty(self, argin):
+        """ delete a device attribute property from the database
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute name
+        Str[2] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceAttributeProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceAttributeProperty
+        
+#------------------------------------------------------------------
+#    DbDeleteDeviceProperty command:
+#------------------------------------------------------------------
+    def DbDeleteDeviceProperty(self, argin):
+        """ Delete device property(ies)
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteDeviceProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteDeviceProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteDeviceProperty
+        
+#------------------------------------------------------------------
+#    DbDeleteProperty command:
+#------------------------------------------------------------------
+    def DbDeleteProperty(self, argin):
+        """ Delete free property from database
+        
+        :param argin: Str[0]  = Object name
+        Str[1] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteProperty
+        
+#------------------------------------------------------------------
+#    DbDeleteServer command:
+#------------------------------------------------------------------
+    def DbDeleteServer(self, argin):
+        """ Delete server from the database but dont delete device properties
+        
+        :param argin: Device server name
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteServer()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteServer) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteServer
+        
+#------------------------------------------------------------------
+#    DbDeleteServerInfo command:
+#------------------------------------------------------------------
+    def DbDeleteServerInfo(self, argin):
+        """ delete info related to a Tango devvice server process
+        
+        :param argin: Device server name
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteServerInfo()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteServerInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteServerInfo
+        
+#------------------------------------------------------------------
+#    DbExportDevice command:
+#------------------------------------------------------------------
+    def DbExportDevice(self, argin):
+        """ Export a device to the database
+        
+        :param argin: Str[0] = Device name
+        Str[1] = CORBA IOR
+        Str[2] = Device server process host name
+        Str[3] = Device server process PID or string ``null``
+        Str[4] = Device server process version
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbExportDevice()")
+        #----- PROTECTED REGION ID(DataBase.DbExportDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbExportDevice
+        
+#------------------------------------------------------------------
+#    DbExportEvent command:
+#------------------------------------------------------------------
+    def DbExportEvent(self, argin):
+        """ Export Event channel to database
+        
+        :param argin: Str[0] = event channel name (or factory name)
+        Str[1] = CORBA IOR
+        Str[2] = Notifd host name
+        Str[3] = Notifd pid
+        Str[4] = Notifd version
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbExportEvent()")
+        #----- PROTECTED REGION ID(DataBase.DbExportEvent) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbExportEvent
+        
+#------------------------------------------------------------------
+#    DbGetAliasDevice command:
+#------------------------------------------------------------------
+    def DbGetAliasDevice(self, argin):
+        """ Get device name from its alias.
+        
+        :param argin: Alias name
+        :type: PyTango.DevString
+        :return: Device name
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetAliasDevice()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetAliasDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetAliasDevice
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetAttributeAlias command:
+#------------------------------------------------------------------
+    def DbGetAttributeAlias(self, argin):
+        """ Get the attribute name for the given alias.
+        If alias not found in database, returns an empty string.
+        
+        :param argin: The attribute alias name
+        :type: PyTango.DevString
+        :return: The attribute name (device/attribute)
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAlias()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetAttributeAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAlias
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetAttributeAliasList command:
+#------------------------------------------------------------------
+    def DbGetAttributeAliasList(self, argin):
+        """ Get attribute alias list for a specified filter
+        
+        :param argin: attribute alias filter string (eg: att*)
+        :type: PyTango.DevString
+        :return: attribute aliases
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAliasList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetAttributeAliasList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAliasList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassAttributeList command:
+#------------------------------------------------------------------
+    def DbGetClassAttributeList(self, argin):
+        """ Get attrilute list for a given Tango class with a specified filter
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute name filter (eg: att*)
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Class attribute name
+        Str[n] = Class attribute name
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassAttributeProperty command:
+#------------------------------------------------------------------
+    def DbGetClassAttributeProperty(self, argin):
+        """ Get Tango class property(ies) value
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute name
+        Str[n] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Tango class name
+        Str[1] = Attribute property  number
+        Str[2] = Attribute property 1 name
+        Str[3] = Attribute property 1 value
+        Str[n + 1] = Attribute property 2 name
+        Str[n + 2] = Attribute property 2 value
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeProperty()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeProperty
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassAttributeProperty2 command:
+#------------------------------------------------------------------
+    def DbGetClassAttributeProperty2(self, argin):
+        """ This command supports array property compared to the old command called
+        DbGetClassAttributeProperty. The old command has not been deleted from the
+        server for compatibility reasons.
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute name
+        Str[n] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Tango class name
+        Str[1] = Attribute property  number
+        Str[2] = Attribute property 1 name
+        Str[3] = Attribute property 1 value number (array case)
+        Str[4] = Attribute property 1 value
+        Str[n] = Attribute property 1 value (array case)
+        Str[n + 1] = Attribute property 2 name
+        Str[n + 2] = Attribute property 2 value number (array case)
+        Str[n + 3] = Attribute property 2 value
+        Str[n + m] = Attribute property 2 value (array case)
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributeProperty2()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassAttributeProperty2) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributeProperty2
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassAttributePropertyHist command:
+#------------------------------------------------------------------
+    def DbGetClassAttributePropertyHist(self, argin):
+        """ Retrieve Tango class attribute property history
+        
+        :param argin: Str[0] = Tango class
+        Str[1] = Attribute name
+        Str[2] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Attribute name
+        Str[1] = Property name
+        Str[2] = date
+        Str[3] = Property value number (array case)
+        Str[4] = Property value 1
+        Str[n] = Property value n
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassAttributePropertyHist()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassAttributePropertyHist) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassAttributePropertyHist
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassForDevice command:
+#------------------------------------------------------------------
+    def DbGetClassForDevice(self, argin):
+        """ Get Tango class for the specified device.
+        
+        :param argin: Device name
+        :type: PyTango.DevString
+        :return: Device Tango class
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassForDevice()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetClassForDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassForDevice
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassInheritanceForDevice command:
+#------------------------------------------------------------------
+    def DbGetClassInheritanceForDevice(self, argin):
+        """ Get class inheritance for the specified device.
+        
+        :param argin: Device name
+        :type: PyTango.DevString
+        :return: Classes off the specified device.
+        [0] - is the class of the device.
+        [1] - is the class from the device class is inherited.
+        ........and so on
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassInheritanceForDevice()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassInheritanceForDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassInheritanceForDevice
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassList command:
+#------------------------------------------------------------------
+    def DbGetClassList(self, argin):
+        """ Get Tango class list with a specified filter
+        
+        :param argin: Filter
+        :type: PyTango.DevString
+        :return: Class list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassProperty command:
+#------------------------------------------------------------------
+    def DbGetClassProperty(self, argin):
+        """ 
+        
+        :param argin: Str[0] = Tango class
+        Str[1] = Property name
+        Str[2] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Tango class
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number (array case)
+        Str[4] = Property value
+        Str[n] = Propery value (array case)
+        ....
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassProperty()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassProperty
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassPropertyHist command:
+#------------------------------------------------------------------
+    def DbGetClassPropertyHist(self, argin):
+        """ Retrieve Tango class property history
+        
+        :param argin: Str[0] = Tango class
+        Str[1] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Property name
+        Str[1] = date
+        Str[2] = Property value number (array case)
+        Str[3] = Property value 1
+        Str[n] = Property value n
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassPropertyHist()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassPropertyHist) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassPropertyHist
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetClassPropertyList command:
+#------------------------------------------------------------------
+    def DbGetClassPropertyList(self, argin):
+        """ Get property list for a given Tango class with a specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Property name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetClassPropertyList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetClassPropertyList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetClassPropertyList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAlias command:
+#------------------------------------------------------------------
+    def DbGetDeviceAlias(self, argin):
+        """ Return alias for device name if found.
+        
+        :param argin: The device name
+        :type: PyTango.DevString
+        :return: The alias found
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAlias()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAlias
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAliasList command:
+#------------------------------------------------------------------
+    def DbGetDeviceAliasList(self, argin):
+        """ Get device alias name with a specific filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Device alias list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAliasList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAliasList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAliasList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAttributeList command:
+#------------------------------------------------------------------
+    def DbGetDeviceAttributeList(self, argin):
+        """ Return list of attributes matching the wildcard
+         for the specified device
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Wildcard
+        :type: PyTango.DevVarStringArray
+        :return: attribute name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAttributeProperty command:
+#------------------------------------------------------------------
+    def DbGetDeviceAttributeProperty(self, argin):
+        """ Get device attribute property(ies) value
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute name
+        Str[n] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Device name
+        Str[1] = Attribute property  number
+        Str[2] = Attribute property 1 name
+        Str[3] = Attribute property 1 value
+        Str[n + 1] = Attribute property 2 name
+        Str[n + 2] = Attribute property 2 value
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeProperty()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeProperty
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAttributeProperty2 command:
+#------------------------------------------------------------------
+    def DbGetDeviceAttributeProperty2(self, argin):
+        """ Retrieve device attribute properties. This command has the possibility to retrieve
+        device attribute properties which are arrays. It is not possible with the old
+        DbGetDeviceAttributeProperty command. Nevertheless, the old command has not been
+        deleted for compatibility reason
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute name
+        Str[n] = Attribute name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Device name
+        Str[1] = Attribute property  number
+        Str[2] = Attribute property 1 name
+        Str[3] = Attribute property 1 value number (array case)
+        Str[4] = Attribute property 1 value
+        Str[n] = Attribute property 1 value (array case)
+        Str[n + 1] = Attribute property 2 name
+        Str[n + 2] = Attribute property 2 value number (array case)
+        Str[n + 3] = Attribute property 2 value
+        Str[n + m] = Attribute property 2 value (array case)
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributeProperty2()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributeProperty2) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributeProperty2
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceAttributePropertyHist command:
+#------------------------------------------------------------------
+    def DbGetDeviceAttributePropertyHist(self, argin):
+        """ Retrieve device attribute property history
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute name
+        Str[2] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Attribute name
+        Str[1] = Property name
+        Str[2] = date
+        Str[3] = Property value number (array case)
+        Str[4] = Property value 1
+        Str[n] = Property value n
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceAttributePropertyHist()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceAttributePropertyHist) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceAttributePropertyHist
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceClassList command:
+#------------------------------------------------------------------
+    def DbGetDeviceClassList(self, argin):
+        """ Get Tango classes/device list embedded in a specific device server
+        
+        :param argin: Device server process name
+        :type: PyTango.DevString
+        :return: Str[0] = Device name
+        Str[1] = Tango class
+        Str[n] = Device name
+        Str[n + 1] = Tango class
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceClassList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceClassList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceClassList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceDomainList command:
+#------------------------------------------------------------------
+    def DbGetDeviceDomainList(self, argin):
+        """ Get list of device domain name matching the specified
+        
+        :param argin: The wildcard
+        :type: PyTango.DevString
+        :return: Device name domain list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceDomainList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceDomainList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceDomainList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceExportedList command:
+#------------------------------------------------------------------
+    def DbGetDeviceExportedList(self, argin):
+        """ Get a list of exported devices whose names satisfy the filter (wildcard is
+        
+        :param argin: filter
+        :type: PyTango.DevString
+        :return: list of exported devices
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceExportedList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceExportedList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceExportedList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceFamilyList command:
+#------------------------------------------------------------------
+    def DbGetDeviceFamilyList(self, argin):
+        """ Get a list of device name families for device name matching the
+        specified wildcard
+        
+        :param argin: The wildcard
+        :type: PyTango.DevString
+        :return: Family list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceFamilyList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceFamilyList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceFamilyList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceInfo command:
+#------------------------------------------------------------------
+    def DbGetDeviceInfo(self, argin):
+        """ Returns info from DbImportDevice and started/stopped dates.
+        
+        :param argin: Device name
+        :type: PyTango.DevString
+        :return: Str[0] = Device name
+        Str[1] = CORBA IOR
+        Str[2] = Device version
+        Str[3] = Device Server name
+        Str[4] = Device Server process host name
+        Str[5] = Started date (or ? if not set)
+        Str[6] = Stopped date (or ? if not set)
+        Str[7] = Device class
+        
+        Lg[0] = Device exported flag
+        Lg[1] = Device Server process PID (or -1 if not set)
+        :rtype: PyTango.DevVarLongStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceInfo()")
+        argout = [0],['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceInfo
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceList command:
+#------------------------------------------------------------------
+    def DbGetDeviceList(self, argin):
+        """ Get a list of devices for specified server and class.
+        
+        :param argin: argin[0] : server name
+        argin[1] : class name
+        :type: PyTango.DevVarStringArray
+        :return: The list of devices for specified server and class.
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceWideList command:
+#------------------------------------------------------------------
+    def DbGetDeviceWideList(self, argin):
+        """ Get a list of devices whose names satisfy the filter.
+        
+        :param argin: filter
+        :type: PyTango.DevString
+        :return: list of exported devices
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceWideList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceWideList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceWideList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceMemberList command:
+#------------------------------------------------------------------
+    def DbGetDeviceMemberList(self, argin):
+        """ Get a list of device name members for device name matching the
+        specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Device names member list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceMemberList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceMemberList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceMemberList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceProperty command:
+#------------------------------------------------------------------
+    def DbGetDeviceProperty(self, argin):
+        """ 
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Device name
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number (array case)
+        Str[4] = Property value 1
+        Str[n] = Property value n (array case)
+        Str[n + 1] = Property name
+        Str[n + 2] = Property value number (array case)
+        Str[n + 3] = Property value 1
+        Str[n + m] = Property value m
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceProperty()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceProperty
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDevicePropertyHist command:
+#------------------------------------------------------------------
+    def DbGetDevicePropertyHist(self, argin):
+        """ Retrieve device  property history
+        
+        :param argin: Str[0] = Device name
+        Str[2] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Property name
+        Str[1] = date
+        Str[2] = Property value number (array case)
+        Str[3] = Property value 1
+        Str[n] = Property value n
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDevicePropertyHist()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDevicePropertyHist) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDevicePropertyHist
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDevicePropertyList command:
+#------------------------------------------------------------------
+    def DbGetDevicePropertyList(self, argin):
+        """ Get property list belonging to the specified device and with
+        name matching the specified filter
+        
+        :param argin: Str[0] = device name
+        Str[1] = Filter
+        :type: PyTango.DevVarStringArray
+        :return: Property name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDevicePropertyList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDevicePropertyList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDevicePropertyList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetDeviceServerClassList command:
+#------------------------------------------------------------------
+    def DbGetDeviceServerClassList(self, argin):
+        """ Get list of Tango classes for a device server
+        
+        :param argin: device server process name
+        :type: PyTango.DevString
+        :return: list of classes for this device server
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDeviceServerClassList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDeviceServerClassList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDeviceServerClassList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetExportdDeviceListForClass command:
+#------------------------------------------------------------------
+    def DbGetExportdDeviceListForClass(self, argin):
+        """ Query the database for device exported for the specified class.
+        
+        :param argin: Class name
+        :type: PyTango.DevString
+        :return: Device exported list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetExportdDeviceListForClass()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetExportdDeviceListForClass) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetExportdDeviceListForClass
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetHostList command:
+#------------------------------------------------------------------
+    def DbGetHostList(self, argin):
+        """ Get host list with name matching the specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Host name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetHostList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetHostList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetHostServerList command:
+#------------------------------------------------------------------
+    def DbGetHostServerList(self, argin):
+        """ Get list of device server process name running on host with name matching
+        the specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Device server process name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetHostServerList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetHostServerList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostServerList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetHostServersInfo command:
+#------------------------------------------------------------------
+    def DbGetHostServersInfo(self, argin):
+        """ Get info about all servers running on specified host, name, mode and level
+        
+        :param argin: Host name
+        :type: PyTango.DevString
+        :return: Server info for all servers running on specified host
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetHostServersInfo()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetHostServersInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetHostServersInfo
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetInstanceNameList command:
+#------------------------------------------------------------------
+    def DbGetInstanceNameList(self, argin):
+        """ Returns the instance names found for specified server.
+        
+        :param argin: Server name
+        :type: PyTango.DevString
+        :return: The instance names found for specified server.
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetInstanceNameList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetInstanceNameList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetInstanceNameList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetObjectList command:
+#------------------------------------------------------------------
+    def DbGetObjectList(self, argin):
+        """ Get list of free object defined in database with name
+        matching the specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Object name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetObjectList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetObjectList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetObjectList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetProperty command:
+#------------------------------------------------------------------
+    def DbGetProperty(self, argin):
+        """ Get free object property
+        
+        :param argin: Str[0] = Object name
+        Str[1] = Property name
+        Str[n] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Object name
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number (array case)
+        Str[4] = Property value 1
+        Str[n] = Property value n (array case)
+        Str[n + 1] = Property name
+        Str[n + 2] = Property value number (array case)
+        Str[n + 3] = Property value 1
+        Str[n + m] = Property value m
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetProperty()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetProperty
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetPropertyHist command:
+#------------------------------------------------------------------
+    def DbGetPropertyHist(self, argin):
+        """ Retrieve object  property history
+        
+        :param argin: Str[0] = Object name
+        Str[2] = Property name
+        :type: PyTango.DevVarStringArray
+        :return: Str[0] = Property name
+        Str[1] = date
+        Str[2] = Property value number (array case)
+        Str[3] = Property value 1
+        Str[n] = Property value n
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetPropertyHist()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetPropertyHist) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetPropertyHist
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetPropertyList command:
+#------------------------------------------------------------------
+    def DbGetPropertyList(self, argin):
+        """ Get list of property defined for a free object and matching the
+        specified filter
+        
+        :param argin: Str[0] = Object name
+        Str[1] = filter
+        :type: PyTango.DevVarStringArray
+        :return: Property name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetPropertyList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetPropertyList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetPropertyList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetServerInfo command:
+#------------------------------------------------------------------
+    def DbGetServerInfo(self, argin):
+        """ Get info about host, mode and level for specified server
+        
+        :param argin: server name
+        :type: PyTango.DevString
+        :return: server info
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetServerInfo()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetServerInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerInfo
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetServerList command:
+#------------------------------------------------------------------
+    def DbGetServerList(self, argin):
+        """ Get list of device server process defined in database
+        with name matching the specified filter
+        
+        :param argin: The filter
+        :type: PyTango.DevString
+        :return: Device server process name list
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetServerList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetServerList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetServerNameList command:
+#------------------------------------------------------------------
+    def DbGetServerNameList(self, argin):
+        """ Returns the list of server names found for the wildcard specified.
+        It returns only the server executable name without instance name as DbGetServerList.
+        
+        :param argin: wildcard for server names.
+        :type: PyTango.DevString
+        :return: server names found.
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetServerNameList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetServerNameList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetServerNameList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbImportDevice command:
+#------------------------------------------------------------------
+    def DbImportDevice(self, argin):
+        """ Import a device from the database
+        
+        :param argin: Device name (or alias)
+        :type: PyTango.DevString
+        :return: Str[0] = device name
+        Str[1] = CORBA IOR
+        Str[2] = device version
+        Str[3] = device server process name
+        Str[4] = host name
+        Str[5] = Tango class name
+        
+        Lg[0] = Exported flag
+        Lg[1] = Device server process PID
+        :rtype: PyTango.DevVarLongStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbImportDevice()")
+        argout = [0],['']
+        #----- PROTECTED REGION ID(DataBase.DbImportDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbImportDevice
+        return argout
+        
+#------------------------------------------------------------------
+#    DbImportEvent command:
+#------------------------------------------------------------------
+    def DbImportEvent(self, argin):
+        """ Get event channel info from database
+        
+        :param argin: name of event channel or factory
+        :type: PyTango.DevString
+        :return: export information e.g. IOR
+        :rtype: PyTango.DevVarLongStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbImportEvent()")
+        argout = [0],['']
+        #----- PROTECTED REGION ID(DataBase.DbImportEvent) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbImportEvent
+        return argout
+        
+#------------------------------------------------------------------
+#    DbInfo command:
+#------------------------------------------------------------------
+    def DbInfo(self):
+        """ Get miscellaneous numbers on information
+        stored in database
+        
+        :param : 
+        :type: PyTango.DevVoid
+        :return: Miscellaneous info like:
+        - Device defined in database
+        - Device marked as exported in database
+        - Device server process defined in database
+        - Device server process marked as exported in database
+        - Device properties defined in database
+        - Class properties defined in database
+        - Device attribute properties defined in database
+        - Class attribute properties defined in database
+        - Object properties defined in database
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbInfo()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbInfo
+        return argout
+        
+#------------------------------------------------------------------
+#    DbPutAttributeAlias command:
+#------------------------------------------------------------------
+    def DbPutAttributeAlias(self, argin):
+        """ Define an alias for an attribute
+        
+        :param argin: Str[0] = attribute name
+        Str[1] = attribute alias
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutAttributeAlias()")
+        #----- PROTECTED REGION ID(DataBase.DbPutAttributeAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutAttributeAlias
+        
+#------------------------------------------------------------------
+#    DbPutClassAttributeProperty command:
+#------------------------------------------------------------------
+    def DbPutClassAttributeProperty(self, argin):
+        """ Create/Update class attribute property(ies) in database
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute number
+        Str[2] = Attribute name
+        Str[3] = Property number
+        Str[4] = Property name
+        Str[5] = Property value
+        .....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutClassAttributeProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbPutClassAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassAttributeProperty
+        
+#------------------------------------------------------------------
+#    DbPutClassAttributeProperty2 command:
+#------------------------------------------------------------------
+    def DbPutClassAttributeProperty2(self, argin):
+        """ This command adds support for array properties compared to the previous one
+        called DbPutClassAttributeProperty. The old comman is still there for compatibility reason
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Attribute number
+        Str[2] = Attribute name
+        Str[3] = Property number
+        Str[4] = Property name
+        Str[5] = Property value number (array case)
+        Str[5] = Property value 1
+        Str[n] = Property value n (array case)
+        .....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutClassAttributeProperty2()")
+        #----- PROTECTED REGION ID(DataBase.DbPutClassAttributeProperty2) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassAttributeProperty2
+        
+#------------------------------------------------------------------
+#    DbPutClassProperty command:
+#------------------------------------------------------------------
+    def DbPutClassProperty(self, argin):
+        """ Create / Update class property(ies)
+        
+        :param argin: Str[0] = Tango class name
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number
+        Str[4] = Property value 1
+        Str[n] = Property value n
+        ....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutClassProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbPutClassProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutClassProperty
+        
+#------------------------------------------------------------------
+#    DbPutDeviceAlias command:
+#------------------------------------------------------------------
+    def DbPutDeviceAlias(self, argin):
+        """ Define alias for  a given device name
+        
+        :param argin: Str[0] = device name
+        Str[1] = alias name
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAlias()")
+        #----- PROTECTED REGION ID(DataBase.DbPutDeviceAlias) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAlias
+        
+#------------------------------------------------------------------
+#    DbPutDeviceAttributeProperty command:
+#------------------------------------------------------------------
+    def DbPutDeviceAttributeProperty(self, argin):
+        """ Create/Update device attribute property(ies) in database
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute number
+        Str[2] = Attribute name
+        Str[3] = Property number
+        Str[4] = Property name
+        Str[5] = Property value
+        .....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAttributeProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbPutDeviceAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAttributeProperty
+        
+#------------------------------------------------------------------
+#    DbPutDeviceAttributeProperty2 command:
+#------------------------------------------------------------------
+    def DbPutDeviceAttributeProperty2(self, argin):
+        """ Put device attribute property. This command adds the possibility to have attribute property
+        which are arrays. Not possible with the old DbPutDeviceAttributeProperty command.
+        This old command is not deleted for compatibility reasons.
+        
+        :param argin: Str[0] = Device name
+        Str[1] = Attribute number
+        Str[2] = Attribute name
+        Str[3] = Property number
+        Str[4] = Property name
+        Str[5] = Property value number (array case)
+        Str[5] = Property value 1
+        Str[n] = Property value n (array case)
+        .....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceAttributeProperty2()")
+        #----- PROTECTED REGION ID(DataBase.DbPutDeviceAttributeProperty2) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceAttributeProperty2
+        
+#------------------------------------------------------------------
+#    DbPutDeviceProperty command:
+#------------------------------------------------------------------
+    def DbPutDeviceProperty(self, argin):
+        """ Create / Update device property(ies)
+        
+        :param argin: Str[0] = Tango device name
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number
+        Str[4] = Property value 1
+        Str[n] = Property value n
+        ....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutDeviceProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbPutDeviceProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutDeviceProperty
+        
+#------------------------------------------------------------------
+#    DbPutProperty command:
+#------------------------------------------------------------------
+    def DbPutProperty(self, argin):
+        """ Create / Update free object property(ies)
+        
+        :param argin: Str[0] = Object name
+        Str[1] = Property number
+        Str[2] = Property name
+        Str[3] = Property value number
+        Str[4] = Property value 1
+        Str[n] = Property value n
+        ....
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbPutProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutProperty
+        
+#------------------------------------------------------------------
+#    DbPutServerInfo command:
+#------------------------------------------------------------------
+    def DbPutServerInfo(self, argin):
+        """ Update server info including host, mode and level
+        
+        :param argin: server info
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbPutServerInfo()")
+        #----- PROTECTED REGION ID(DataBase.DbPutServerInfo) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbPutServerInfo
+        
+#------------------------------------------------------------------
+#    DbUnExportDevice command:
+#------------------------------------------------------------------
+    def DbUnExportDevice(self, argin):
+        """ Mark a device as non exported in database
+        
+        :param argin: Device name
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbUnExportDevice()")
+        #----- PROTECTED REGION ID(DataBase.DbUnExportDevice) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportDevice
+        
+#------------------------------------------------------------------
+#    DbUnExportEvent command:
+#------------------------------------------------------------------
+    def DbUnExportEvent(self, argin):
+        """ Mark one event channel as non exported in database
+        
+        :param argin: name of event channel or factory to unexport
+        :type: PyTango.DevString
+        :return: none
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbUnExportEvent()")
+        #----- PROTECTED REGION ID(DataBase.DbUnExportEvent) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportEvent
+        
+#------------------------------------------------------------------
+#    DbUnExportServer command:
+#------------------------------------------------------------------
+    def DbUnExportServer(self, argin):
+        """ Mark all devices belonging to a specified device server
+        process as non exported
+        
+        :param argin: Device server name (executable/instance)
+        :type: PyTango.DevString
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbUnExportServer()")
+        #----- PROTECTED REGION ID(DataBase.DbUnExportServer) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbUnExportServer
+        
+#------------------------------------------------------------------
+#    ResetTimingValues command:
+#------------------------------------------------------------------
+    def ResetTimingValues(self):
+        """ Reset the timing attribute values.
+        
+        :param : 
+        :type: PyTango.DevVoid
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".ResetTimingValues()")
+        #----- PROTECTED REGION ID(DataBase.ResetTimingValues) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.ResetTimingValues
+        
+#------------------------------------------------------------------
+#    DbGetDataForServerCache command:
+#------------------------------------------------------------------
+    def DbGetDataForServerCache(self, argin):
+        """ This command returns all the data needed by a device server process during its
+        startup sequence. The aim of this command is to minimize database access during
+        device server startup sequence.
+        
+        :param argin: Elt[0] = DS name (exec_name/inst_name), Elt[1] = Host name
+        :type: PyTango.DevVarStringArray
+        :return: All the data needed by the device server during its startup sequence. Precise list depend on the device server
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetDataForServerCache()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetDataForServerCache) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetDataForServerCache
+        return argout
+        
+#------------------------------------------------------------------
+#    DbDeleteAllDeviceAttributeProperty command:
+#------------------------------------------------------------------
+    def DbDeleteAllDeviceAttributeProperty(self, argin):
+        """ Delete all attribute properties for the specified device attribute(s)
+        
+        :param argin: str[0] = device name
+        Str[1]...str[n] = attribute name(s)
+        :type: PyTango.DevVarStringArray
+        :return: 
+        :rtype: PyTango.DevVoid """
+        self.debug_stream("In " + self.get_name() +  ".DbDeleteAllDeviceAttributeProperty()")
+        #----- PROTECTED REGION ID(DataBase.DbDeleteAllDeviceAttributeProperty) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbDeleteAllDeviceAttributeProperty
+        
+#------------------------------------------------------------------
+#    DbMySqlSelect command:
+#------------------------------------------------------------------
+    def DbMySqlSelect(self, argin):
+        """ This is a very low level command.
+        It executes the specified  SELECT command on TANGO database and returns its result without filter.
+        
+        :param argin: MySql Select command
+        :type: PyTango.DevString
+        :return: MySql Select command result
+         - svalues : select results
+         - lvalue[n] : =0 if svalue[n] is null else =1
+         (last lvalue -1) is number of rows, (last lvalue) is number of fields
+        :rtype: PyTango.DevVarLongStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbMySqlSelect()")
+        argout = [0],['']
+        #----- PROTECTED REGION ID(DataBase.DbMySqlSelect) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbMySqlSelect
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetCSDbServerList command:
+#------------------------------------------------------------------
+    def DbGetCSDbServerList(self):
+        """ Get a list of host:port for all database server defined in the control system
+        
+        :param : 
+        :type: PyTango.DevVoid
+        :return: List of host:port with one element for each database server
+        :rtype: PyTango.DevVarStringArray """
+        self.debug_stream("In " + self.get_name() +  ".DbGetCSDbServerList()")
+        argout = ['']
+        #----- PROTECTED REGION ID(DataBase.DbGetCSDbServerList) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetCSDbServerList
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetAttributeAlias2 command:
+#------------------------------------------------------------------
+    def DbGetAttributeAlias2(self, argin):
+        """ Get the attribute alias from the attribute name.
+        Returns one empty string if nothing found in database
+        
+        :param argin: The attribute name (dev_name/att_name)
+        :type: PyTango.DevString
+        :return: The attribute alias name (or empty string)
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetAttributeAlias2()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetAttributeAlias2) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetAttributeAlias2
+        return argout
+        
+#------------------------------------------------------------------
+#    DbGetAliasAttribute command:
+#------------------------------------------------------------------
+    def DbGetAliasAttribute(self, argin):
+        """ Get the attribute name from the given alias.
+        If the given alias is not found in database, returns an empty string
+        
+        :param argin: The attribute alias
+        :type: PyTango.DevString
+        :return: The attribute name (dev_name/att_name)
+        :rtype: PyTango.DevString """
+        self.debug_stream("In " + self.get_name() +  ".DbGetAliasAttribute()")
+        argout = ''
+        #----- PROTECTED REGION ID(DataBase.DbGetAliasAttribute) ENABLED START -----#
+        
+        #----- PROTECTED REGION END -----#	//	DataBase.DbGetAliasAttribute
+        return argout
+        
+
+#==================================================================
+#
+#    DataBaseClass class definition
+#
+#==================================================================
+class DataBaseClass(PyTango.DeviceClass):
+
+    #    Class Properties
+    class_property_list = {
+        }
+
+
+    #    Device Properties
+    device_property_list = {
+        }
+
+
+    #    Command definitions
+    cmd_list = {
+        'DbAddDevice':
+            [[PyTango.DevVarStringArray, "Str[0] = Full device server process name\nStr[1] = Device name\nStr[2] = Tango class name"],
+            [PyTango.DevVoid, "none"]],
+        'DbAddServer':
+            [[PyTango.DevVarStringArray, "Str[0] = Full device server name\nStr[1] = Device(s) name\nStr[2] = Tango class name\nStr[n] = Device name\nStr[n + 1] = Tango class name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteAttributeAlias':
+            [[PyTango.DevString, "Attriibute alias name."],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteClassAttribute':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteClassAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute name\nStr[2] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteClassProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteDevice':
+            [[PyTango.DevString, "device name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteDeviceAlias':
+            [[PyTango.DevString, "device alias name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteDeviceAttribute':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteDeviceAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute name\nStr[2] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteDeviceProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteProperty':
+            [[PyTango.DevVarStringArray, "Str[0]  = Object name\nStr[1] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteServer':
+            [[PyTango.DevString, "Device server name"],
+            [PyTango.DevVoid, "none"]],
+        'DbDeleteServerInfo':
+            [[PyTango.DevString, "Device server name"],
+            [PyTango.DevVoid, "none"]],
+        'DbExportDevice':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = CORBA IOR\nStr[2] = Device server process host name\nStr[3] = Device server process PID or string ``null``\nStr[4] = Device server process version"],
+            [PyTango.DevVoid, "none"]],
+        'DbExportEvent':
+            [[PyTango.DevVarStringArray, "Str[0] = event channel name (or factory name)\nStr[1] = CORBA IOR\nStr[2] = Notifd host name\nStr[3] = Notifd pid\nStr[4] = Notifd version"],
+            [PyTango.DevVoid, "none"]],
+        'DbGetAliasDevice':
+            [[PyTango.DevString, "Alias name"],
+            [PyTango.DevString, "Device name"]],
+        'DbGetAttributeAlias':
+            [[PyTango.DevString, "The attribute alias name"],
+            [PyTango.DevString, "The attribute name (device/attribute)"]],
+        'DbGetAttributeAliasList':
+            [[PyTango.DevString, "attribute alias filter string (eg: att*)"],
+            [PyTango.DevVarStringArray, "attribute aliases"]],
+        'DbGetClassAttributeList':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute name filter (eg: att*)"],
+            [PyTango.DevVarStringArray, "Str[0] = Class attribute name\nStr[n] = Class attribute name"]],
+        'DbGetClassAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute name\nStr[n] = Attribute name"],
+            [PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute property  number\nStr[2] = Attribute property 1 name\nStr[3] = Attribute property 1 value\nStr[n + 1] = Attribute property 2 name\nStr[n + 2] = Attribute property 2 value"]],
+        'DbGetClassAttributeProperty2':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute name\nStr[n] = Attribute name"],
+            [PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute property  number\nStr[2] = Attribute property 1 name\nStr[3] = Attribute property 1 value number (array case)\nStr[4] = Attribute property 1 value\nStr[n] = Attribute property 1 value (array case)\nStr[n + 1] = Attribute property 2 name\nStr[n + 2] = Attribute property 2 value number (array case)\nStr[n + 3] = Attribute property 2 value\nStr[n + m] = Attribute property 2 value (array case)"]],
+        'DbGetClassAttributePropertyHist':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class\nStr[1] = Attribute name\nStr[2] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Attribute name\nStr[1] = Property name\nStr[2] = date\nStr[3] = Property value number (array case)\nStr[4] = Property value 1\nStr[n] = Property value n"]],
+        'DbGetClassForDevice':
+            [[PyTango.DevString, "Device name"],
+            [PyTango.DevString, "Device Tango class"]],
+        'DbGetClassInheritanceForDevice':
+            [[PyTango.DevString, "Device name"],
+            [PyTango.DevVarStringArray, "Classes off the specified device.\n[0] - is the class of the device.\n[1] - is the class from the device class is inherited.\n........and so on"]],
+        'DbGetClassList':
+            [[PyTango.DevString, "Filter"],
+            [PyTango.DevVarStringArray, "Class list"]],
+        'DbGetClassProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class\nStr[1] = Property name\nStr[2] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Tango class\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number (array case)\nStr[4] = Property value\nStr[n] = Propery value (array case)\n...."]],
+        'DbGetClassPropertyHist':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class\nStr[1] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Property name\nStr[1] = date\nStr[2] = Property value number (array case)\nStr[3] = Property value 1\nStr[n] = Property value n"]],
+        'DbGetClassPropertyList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Property name list"]],
+        'DbGetDeviceAlias':
+            [[PyTango.DevString, "The device name"],
+            [PyTango.DevString, "The alias found"]],
+        'DbGetDeviceAliasList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Device alias list"]],
+        'DbGetDeviceAttributeList':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Wildcard"],
+            [PyTango.DevVarStringArray, "attribute name list"]],
+        'DbGetDeviceAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute name\nStr[n] = Attribute name"],
+            [PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute property  number\nStr[2] = Attribute property 1 name\nStr[3] = Attribute property 1 value\nStr[n + 1] = Attribute property 2 name\nStr[n + 2] = Attribute property 2 value"]],
+        'DbGetDeviceAttributeProperty2':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute name\nStr[n] = Attribute name"],
+            [PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute property  number\nStr[2] = Attribute property 1 name\nStr[3] = Attribute property 1 value number (array case)\nStr[4] = Attribute property 1 value\nStr[n] = Attribute property 1 value (array case)\nStr[n + 1] = Attribute property 2 name\nStr[n + 2] = Attribute property 2 value number (array case)\nStr[n + 3] = Attribute property 2 value\nStr[n + m] = Attribute property 2 value (array case)"]],
+        'DbGetDeviceAttributePropertyHist':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute name\nStr[2] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Attribute name\nStr[1] = Property name\nStr[2] = date\nStr[3] = Property value number (array case)\nStr[4] = Property value 1\nStr[n] = Property value n"]],
+        'DbGetDeviceClassList':
+            [[PyTango.DevString, "Device server process name"],
+            [PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Tango class\nStr[n] = Device name\nStr[n + 1] = Tango class"]],
+        'DbGetDeviceDomainList':
+            [[PyTango.DevString, "The wildcard"],
+            [PyTango.DevVarStringArray, "Device name domain list"]],
+        'DbGetDeviceExportedList':
+            [[PyTango.DevString, "filter"],
+            [PyTango.DevVarStringArray, "list of exported devices"]],
+        'DbGetDeviceFamilyList':
+            [[PyTango.DevString, "The wildcard"],
+            [PyTango.DevVarStringArray, "Family list"]],
+        'DbGetDeviceInfo':
+            [[PyTango.DevString, "Device name"],
+            [PyTango.DevVarLongStringArray, "Str[0] = Device name\nStr[1] = CORBA IOR\nStr[2] = Device version\nStr[3] = Device Server name\nStr[4] = Device Server process host name\nStr[5] = Started date (or ? if not set)\nStr[6] = Stopped date (or ? if not set)\nStr[7] = Device class\n\nLg[0] = Device exported flag\nLg[1] = Device Server process PID (or -1 if not set)"]],
+        'DbGetDeviceList':
+            [[PyTango.DevVarStringArray, "argin[0] : server name\nargin[1] : class name"],
+            [PyTango.DevVarStringArray, "The list of devices for specified server and class."]],
+        'DbGetDeviceWideList':
+            [[PyTango.DevString, "filter"],
+            [PyTango.DevVarStringArray, "list of exported devices"]],
+        'DbGetDeviceMemberList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Device names member list"]],
+        'DbGetDeviceProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number (array case)\nStr[4] = Property value 1\nStr[n] = Property value n (array case)\nStr[n + 1] = Property name\nStr[n + 2] = Property value number (array case)\nStr[n + 3] = Property value 1\nStr[n + m] = Property value m"]],
+        'DbGetDevicePropertyHist':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[2] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Property name\nStr[1] = date\nStr[2] = Property value number (array case)\nStr[3] = Property value 1\nStr[n] = Property value n"]],
+        'DbGetDevicePropertyList':
+            [[PyTango.DevVarStringArray, "Str[0] = device name\nStr[1] = Filter"],
+            [PyTango.DevVarStringArray, "Property name list"]],
+        'DbGetDeviceServerClassList':
+            [[PyTango.DevString, "device server process name"],
+            [PyTango.DevVarStringArray, "list of classes for this device server"]],
+        'DbGetExportdDeviceListForClass':
+            [[PyTango.DevString, "Class name"],
+            [PyTango.DevVarStringArray, "Device exported list"]],
+        'DbGetHostList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Host name list"]],
+        'DbGetHostServerList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Device server process name list"]],
+        'DbGetHostServersInfo':
+            [[PyTango.DevString, "Host name"],
+            [PyTango.DevVarStringArray, "Server info for all servers running on specified host"]],
+        'DbGetInstanceNameList':
+            [[PyTango.DevString, "Server name"],
+            [PyTango.DevVarStringArray, "The instance names found for specified server."]],
+        'DbGetObjectList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Object name list"]],
+        'DbGetProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Object name\nStr[1] = Property name\nStr[n] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Object name\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number (array case)\nStr[4] = Property value 1\nStr[n] = Property value n (array case)\nStr[n + 1] = Property name\nStr[n + 2] = Property value number (array case)\nStr[n + 3] = Property value 1\nStr[n + m] = Property value m"]],
+        'DbGetPropertyHist':
+            [[PyTango.DevVarStringArray, "Str[0] = Object name\nStr[2] = Property name"],
+            [PyTango.DevVarStringArray, "Str[0] = Property name\nStr[1] = date\nStr[2] = Property value number (array case)\nStr[3] = Property value 1\nStr[n] = Property value n"]],
+        'DbGetPropertyList':
+            [[PyTango.DevVarStringArray, "Str[0] = Object name\nStr[1] = filter"],
+            [PyTango.DevVarStringArray, "Property name list"]],
+        'DbGetServerInfo':
+            [[PyTango.DevString, "server name"],
+            [PyTango.DevVarStringArray, "server info"]],
+        'DbGetServerList':
+            [[PyTango.DevString, "The filter"],
+            [PyTango.DevVarStringArray, "Device server process name list"]],
+        'DbGetServerNameList':
+            [[PyTango.DevString, "wildcard for server names."],
+            [PyTango.DevVarStringArray, "server names found."]],
+        'DbImportDevice':
+            [[PyTango.DevString, "Device name (or alias)"],
+            [PyTango.DevVarLongStringArray, "Str[0] = device name\nStr[1] = CORBA IOR\nStr[2] = device version\nStr[3] = device server process name\nStr[4] = host name\nStr[5] = Tango class name\n\nLg[0] = Exported flag\nLg[1] = Device server process PID"]],
+        'DbImportEvent':
+            [[PyTango.DevString, "name of event channel or factory"],
+            [PyTango.DevVarLongStringArray, "export information e.g. IOR"]],
+        'DbInfo':
+            [[PyTango.DevVoid, "none"],
+            [PyTango.DevVarStringArray, "Miscellaneous info like:\n- Device defined in database\n- Device marked as exported in database\n- Device server process defined in database\n- Device server process marked as exported in database\n- Device properties defined in database\n- Class properties defined in database\n- Device attribute properties defined in database\n- Class attribute properties defined in database\n- Object properties defined in database"]],
+        'DbPutAttributeAlias':
+            [[PyTango.DevVarStringArray, "Str[0] = attribute name\nStr[1] = attribute alias"],
+            [PyTango.DevVoid, "none"]],
+        'DbPutClassAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute number\nStr[2] = Attribute name\nStr[3] = Property number\nStr[4] = Property name\nStr[5] = Property value\n....."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutClassAttributeProperty2':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Attribute number\nStr[2] = Attribute name\nStr[3] = Property number\nStr[4] = Property name\nStr[5] = Property value number (array case)\nStr[5] = Property value 1\nStr[n] = Property value n (array case)\n....."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutClassProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango class name\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number\nStr[4] = Property value 1\nStr[n] = Property value n\n...."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutDeviceAlias':
+            [[PyTango.DevVarStringArray, "Str[0] = device name\nStr[1] = alias name"],
+            [PyTango.DevVoid, "none"]],
+        'DbPutDeviceAttributeProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute number\nStr[2] = Attribute name\nStr[3] = Property number\nStr[4] = Property name\nStr[5] = Property value\n....."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutDeviceAttributeProperty2':
+            [[PyTango.DevVarStringArray, "Str[0] = Device name\nStr[1] = Attribute number\nStr[2] = Attribute name\nStr[3] = Property number\nStr[4] = Property name\nStr[5] = Property value number (array case)\nStr[5] = Property value 1\nStr[n] = Property value n (array case)\n....."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutDeviceProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Tango device name\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number\nStr[4] = Property value 1\nStr[n] = Property value n\n...."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutProperty':
+            [[PyTango.DevVarStringArray, "Str[0] = Object name\nStr[1] = Property number\nStr[2] = Property name\nStr[3] = Property value number\nStr[4] = Property value 1\nStr[n] = Property value n\n...."],
+            [PyTango.DevVoid, "none"]],
+        'DbPutServerInfo':
+            [[PyTango.DevVarStringArray, "server info"],
+            [PyTango.DevVoid, "none"]],
+        'DbUnExportDevice':
+            [[PyTango.DevString, "Device name"],
+            [PyTango.DevVoid, "none"]],
+        'DbUnExportEvent':
+            [[PyTango.DevString, "name of event channel or factory to unexport"],
+            [PyTango.DevVoid, "none"]],
+        'DbUnExportServer':
+            [[PyTango.DevString, "Device server name (executable/instance)"],
+            [PyTango.DevVoid, "none"]],
+        'ResetTimingValues':
+            [[PyTango.DevVoid, "none"],
+            [PyTango.DevVoid, "none"]],
+        'DbGetDataForServerCache':
+            [[PyTango.DevVarStringArray, "Elt[0] = DS name (exec_name/inst_name), Elt[1] = Host name"],
+            [PyTango.DevVarStringArray, "All the data needed by the device server during its startup sequence. Precise list depend on the device server"]],
+        'DbDeleteAllDeviceAttributeProperty':
+            [[PyTango.DevVarStringArray, "str[0] = device name\nStr[1]...str[n] = attribute name(s)"],
+            [PyTango.DevVoid, "none"]],
+        'DbMySqlSelect':
+            [[PyTango.DevString, "MySql Select command"],
+            [PyTango.DevVarLongStringArray, "MySql Select command result\n - svalues : select results\n - lvalue[n] : =0 if svalue[n] is null else =1\n (last lvalue -1) is number of rows, (last lvalue) is number of fields"]],
+        'DbGetCSDbServerList':
+            [[PyTango.DevVoid, "none"],
+            [PyTango.DevVarStringArray, "List of host:port with one element for each database server"]],
+        'DbGetAttributeAlias2':
+            [[PyTango.DevString, "The attribute name (dev_name/att_name)"],
+            [PyTango.DevString, "The attribute alias name (or empty string)"]],
+        'DbGetAliasAttribute':
+            [[PyTango.DevString, "The attribute alias"],
+            [PyTango.DevString, "The attribute name (dev_name/att_name)"]],
+        }
+
+
+    #    Attribute definitions
+    attr_list = {
+        'StoredProcedureRelease':
+            [[PyTango.DevString,
+            PyTango.SCALAR,
+            PyTango.READ]],
+        'Timing_average':
+            [[PyTango.DevDouble,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        'Timing_minimum':
+            [[PyTango.DevDouble,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        'Timing_maximum':
+            [[PyTango.DevDouble,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        'Timing_calls':
+            [[PyTango.DevDouble,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        'Timing_index':
+            [[PyTango.DevString,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        'Timing_info':
+            [[PyTango.DevString,
+            PyTango.SPECTRUM,
+            PyTango.READ, 64]],
+        }
+
+
+#------------------------------------------------------------------
+#    DataBaseClass Constructor
+#------------------------------------------------------------------
+    def __init__(self, name):
+        PyTango.DeviceClass.__init__(self, name)
+        self.set_type(name);
+        print "In DataBase Class  constructor"
+
+#==================================================================
+#
+#    DataBase class main method
+#
+#==================================================================
+def main():
+    try:
+        py = PyTango.Util(sys.argv)
+        py.add_class(DataBaseClass,DataBase,'DataBase')
+
+        U = PyTango.Util.instance()
+        U.server_init()
+        U.server_run()
+
+    except PyTango.DevFailed,e:
+        print '-------> Received a DevFailed exception:',e
+    except Exception,e:
+        print '-------> An unforeseen exception occured....',e
+
+if __name__ == '__main__':
+    main()
diff --git a/doc/tep/tep-0001.rst b/doc/tep/tep-0001.rst
new file mode 100644
index 0000000..76321d8
--- /dev/null
+++ b/doc/tep/tep-0001.rst
@@ -0,0 +1,439 @@
+=================================
+TEP 1 - Device Server API Level 2
+=================================
+
+================== ====================================================
+ TEP:               1   
+================== ====================================================
+ Title:             Device Server API Level 2
+ Version:           1.0.0
+ Last-Modified:     17-Oct-2012
+ Author:            Tiago Coutinho <tcoutinho at cells.es>
+ Status:            Active
+ Type:              Standards Track
+ Content-Type:      text/x-rst
+ Created:           17-Oct-2012
+ Post-History:      17-Oct-2012
+================== ====================================================
+
+Abstract
+========
+
+This TEP aims to define a new high level API for writting device servers.
+
+Rationale
+=========
+
+The code for Tango device servers written in Python often obey a pattern. It
+would be nice if non tango experts could create tango device servers without
+having to code some obscure tango related code. Some of the code which
+is repeated over and over again in almost all python device servers could be
+hidden from the tango developer.
+
+Places to simplify
+===================
+
+Currently, a pogo generated device server code for a Motor having a double
+attribute `position` would look like this::
+
+    #!/usr/bin/env python
+    # -*- coding:utf-8 -*- 
+
+
+    ##############################################################################
+    ## license :
+    ##============================================================================
+    ##
+    ## File :        Motor.py
+    ## 
+    ## Project :     
+    ##
+    ## $Author :      t$
+    ##
+    ## $Revision :    $
+    ##
+    ## $Date :        $
+    ##
+    ## $HeadUrl :     $
+    ##============================================================================
+    ##            This file is generated by POGO
+    ##    (Program Obviously used to Generate tango Object)
+    ##
+    ##        (c) - Software Engineering Group - ESRF
+    ##############################################################################
+
+    """"""
+
+    __all__ = ["Motor", "MotorClass", "main"]
+
+    __docformat__ = 'restructuredtext'
+
+    import PyTango
+    import sys
+    # Add additional import
+    #----- PROTECTED REGION ID(Motor.additionnal_import) ENABLED START -----#
+
+    #----- PROTECTED REGION END -----#	//	Motor.additionnal_import
+
+    ##############################################################################
+    ## Device States Description
+    ##
+    ## No states for this device
+    ##############################################################################
+
+    class Motor (PyTango.Device_4Impl):
+
+    #--------- Add you global variables here --------------------------
+    #----- PROTECTED REGION ID(Motor.global_variables) ENABLED START -----#
+
+    #----- PROTECTED REGION END -----#	//	Motor.global_variables
+    #------------------------------------------------------------------
+    #    Device constructor
+    #------------------------------------------------------------------
+        def __init__(self,cl, name):
+            PyTango.Device_4Impl.__init__(self,cl,name)
+            self.debug_stream("In " + self.get_name() + ".__init__()")
+            Motor.init_device(self)
+
+    #------------------------------------------------------------------
+    #    Device destructor
+    #------------------------------------------------------------------
+        def delete_device(self):
+            self.debug_stream("In " + self.get_name() + ".delete_device()")
+            #----- PROTECTED REGION ID(Motor.delete_device) ENABLED START -----#
+            
+            #----- PROTECTED REGION END -----#	//	Motor.delete_device
+
+    #------------------------------------------------------------------
+    #    Device initialization
+    #------------------------------------------------------------------
+        def init_device(self):
+            self.debug_stream("In " + self.get_name() + ".init_device()")
+            self.get_device_properties(self.get_device_class())
+            self.attr_Position_read = 0.0
+            #----- PROTECTED REGION ID(Motor.init_device) ENABLED START -----#
+            
+            #----- PROTECTED REGION END -----#	//	Motor.init_device
+
+    #------------------------------------------------------------------
+    #    Always excuted hook method
+    #------------------------------------------------------------------
+        def always_executed_hook(self):
+            self.debug_stream("In " + self.get_name() + ".always_excuted_hook()")
+            #----- PROTECTED REGION ID(Motor.always_executed_hook) ENABLED START -----#
+            
+            #----- PROTECTED REGION END -----#	//	Motor.always_executed_hook
+
+    #==================================================================
+    #
+    #    Motor read/write attribute methods
+    #
+    #==================================================================
+
+    #------------------------------------------------------------------
+    #    Read Position attribute
+    #------------------------------------------------------------------
+        def read_Position(self, attr):
+            self.debug_stream("In " + self.get_name() + ".read_Position()")
+            #----- PROTECTED REGION ID(Motor.Position_read) ENABLED START -----#
+            self.attr_Position_read = 1.0
+            #----- PROTECTED REGION END -----#	//	Motor.Position_read
+            attr.set_value(self.attr_Position_read)
+            
+    #------------------------------------------------------------------
+    #    Read Attribute Hardware
+    #------------------------------------------------------------------
+        def read_attr_hardware(self, data):
+            self.debug_stream("In " + self.get_name() + ".read_attr_hardware()")
+            #----- PROTECTED REGION ID(Motor.read_attr_hardware) ENABLED START -----#
+            
+            #----- PROTECTED REGION END -----#	//	Motor.read_attr_hardware
+
+
+    #==================================================================
+    #
+    #    Motor command methods
+    #
+    #==================================================================
+
+
+    #==================================================================
+    #
+    #    MotorClass class definition
+    #
+    #==================================================================
+    class MotorClass(PyTango.DeviceClass):
+
+        #    Class Properties
+        class_property_list = {
+            }
+
+
+        #    Device Properties
+        device_property_list = {
+            }
+
+
+        #    Command definitions
+        cmd_list = {
+            }
+
+
+        #    Attribute definitions
+        attr_list = {
+            'Position':
+                [[PyTango.DevDouble,
+                PyTango.SCALAR,
+                PyTango.READ]],
+            }
+
+
+    #------------------------------------------------------------------
+    #    MotorClass Constructor
+    #------------------------------------------------------------------
+        def __init__(self, name):
+            PyTango.DeviceClass.__init__(self, name)
+            self.set_type(name);
+            print "In Motor Class  constructor"
+
+    #==================================================================
+    #
+    #    Motor class main method
+    #
+    #==================================================================
+    def main():
+        try:
+            py = PyTango.Util(sys.argv)
+            py.add_class(MotorClass,Motor,'Motor')
+
+            U = PyTango.Util.instance()
+            U.server_init()
+            U.server_run()
+
+        except PyTango.DevFailed,e:
+            print '-------> Received a DevFailed exception:',e
+        except Exception,e:
+            print '-------> An unforeseen exception occured....',e
+
+    if __name__ == '__main__':
+        main()
+
+
+To make things clear, let's analyse the stripified version of the code instead::
+
+    import PyTango
+    import sys
+
+    class Motor (PyTango.Device_4Impl):
+
+        def __init__(self,cl, name):
+            PyTango.Device_4Impl.__init__(self,cl,name)
+            self.debug_stream("In " + self.get_name() + ".__init__()")
+            Motor.init_device(self)
+
+        def delete_device(self):
+            self.debug_stream("In " + self.get_name() + ".delete_device()")
+
+        def init_device(self):
+            self.debug_stream("In " + self.get_name() + ".init_device()")
+            self.get_device_properties(self.get_device_class())
+            self.attr_Position_read = 0.0
+
+        def always_executed_hook(self):
+            self.debug_stream("In " + self.get_name() + ".always_excuted_hook()")
+
+        def read_Position(self, attr):
+            self.debug_stream("In " + self.get_name() + ".read_Position()")
+            self.attr_Position_read = 1.0
+            attr.set_value(self.attr_Position_read)
+
+        def read_attr_hardware(self, data):
+            self.debug_stream("In " + self.get_name() + ".read_attr_hardware()")
+
+
+    class MotorClass(PyTango.DeviceClass):
+
+        class_property_list = {
+            }
+
+
+        device_property_list = {
+            }
+
+
+        cmd_list = {
+            }
+
+
+        attr_list = {
+            'Position':
+                [[PyTango.DevDouble,
+                PyTango.SCALAR,
+                PyTango.READ_WRITE]],
+            }
+
+        def __init__(self, name):
+            PyTango.DeviceClass.__init__(self, name)
+            self.set_type(name);
+            print "In Motor Class  constructor"
+
+            
+    def main():
+        try:
+            py = PyTango.Util(sys.argv)
+            py.add_class(MotorClass,Motor,'Motor')
+
+            U = PyTango.Util.instance()
+            U.server_init()
+            U.server_run()
+
+        except PyTango.DevFailed,e:
+            print '-------> Received a DevFailed exception:',e
+        except Exception,e:
+            print '-------> An unforeseen exception occured....',e
+
+    if __name__ == '__main__':
+        main()
+
+After looking at most python device servers one can see some patterns:
+
+At `<Device>` class level:
+    
+    #. <Device> always inherits from latest available DeviceImpl from pogo version
+    #. constructor always does the same:
+        #. calls super constructor
+        #. debug message
+        #. calls init_device
+    
+    #. all methods have debug_stream as first instruction
+    #. init_device does additionaly get_device_properties()
+ 
+At `<Device>Class` class level:
+    
+    #. A <Device>Class class exists for every <DeviceName> class
+    #. The <Device>Class class only contains attributes, commands and
+       properties descriptions (no logic)
+    #. The attr_list description always follows the same (non explicit) pattern
+       (and so does cmd_list, class_property_list, device_property_list)
+    #. the syntax for attr_list, cmd_list, etc is far from understandable 
+     
+At `main()` level:
+
+    #. The main() method always does the same:
+        #. create `Util`
+        #. register tango class
+        #. `server_init()`
+        #. `server_run()`
+
+
+
+High level API
+==============
+
+The goals of the high level API are:
+    
+    #. Automatically inherit from latest DeviceImpl available from current PyTango installation
+    #. add default implementation for `init_device`: debug_stream(), get_device_properties()
+    #. Hide `<Device>Class` class completely
+    #. simplify `main()`
+
+The final code could look something like this::
+
+    #!/usr/bin/env python
+
+    from PyTango import server_run
+    from PyTango.api2 import Device, DeviceMeta, Attr
+
+
+    class Motor(Device):
+        __metaclass__ = DeviceMeta
+        
+        def read_position(self, attr):
+            attr.set_value(2.3)
+        
+        position = Attr()
+        
+        
+    def main():
+        server_run((Motor,))
+
+    if __name__ == "__main__":
+        main()
+
+
+Ok, a pogo generated code could look like this::
+
+    ##############################################################################
+    # File :        Motor.py
+    # Project :     motor project
+    # Author :     tcoutinho
+    #============================================================================
+    #            This file is generated by POGO
+    #    (Program Obviously used to Generate tango Object)
+    #
+    #        (c) - Software Engineering Group - ESRF
+    ##############################################################################
+
+    import PyTango
+    from PyTango.api2 import Device, DeviceMeta, Attr
+
+    # Add additional import
+    #----- PROTECTED REGION ID(Motor.additionnal_import) ENABLED START -----#
+
+    #----- PROTECTED REGION END -----#	//	Motor.additionnal_import
+
+    class Motor(Device):
+        __metaclass__ = DeviceMeta
+
+        #--------- Add you global variables here --------------------------
+        #----- PROTECTED REGION ID(Motor.global_variables) ENABLED START -----#
+
+        #----- PROTECTED REGION END -----#	//	Motor.global_variables
+
+        def init_device(self):
+            Device.init_device(self)
+            self.attr_Position_read = 0.0
+            #----- PROTECTED REGION ID(Motor.init_device) ENABLED START -----#
+            
+            #----- PROTECTED REGION END -----#	//	Motor.init_device
+        
+        # Motor read/write attribute methods        
+
+        def read_position(self, attr):
+            #----- PROTECTED REGION ID(Motor.Position_read) ENABLED START -----#
+            self.attr_Position_read = 1.0
+            #----- PROTECTED REGION END -----#	//	Motor.Position_read
+            attr.set_value(self.attr_Position_read)
+
+        
+        position = Attr(name='position',
+                        dtype=PyTango.DevDouble,
+                        dformat=PyTango.AttrDataFormat.SCALAR,
+                        fread=read_position)
+        
+    def main():
+        classes = Motor,
+        server_run(classes)
+
+    if __name__ == "__main__":
+        main()
+
+but still is far more inteligable than the original version.
+
+References
+==========
+    
+
+Copyright
+=========
+
+This document has been placed in the public domain.
+
+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:
diff --git a/doc/tep/tep-0002.rst b/doc/tep/tep-0002.rst
new file mode 100644
index 0000000..8210160
--- /dev/null
+++ b/doc/tep/tep-0002.rst
@@ -0,0 +1,328 @@
+
+.. currentmodule:: PyTango.databaseds
+
+===================================================
+TEP 2 - Tango database serverless
+===================================================
+
+================== ====================================================
+ TEP:               2
+================== ====================================================
+ Title:             Tango database serverless
+ Version:           1.0.0
+ Last-Modified:     17-Oct-2012
+ Author:            Tiago Coutinho <tcoutinho at cells.es>
+ Status:            Active
+ Type:              Standards Track
+ Content-Type:      text/x-rst
+ Created:           17-Oct-2012
+ Post-History:      17-Oct-2012
+================== ====================================================
+
+Abstract
+========
+
+This TEP aims to define a python DataBaseds which doesn't need a database server
+behind. It would make tango easier to try out by anyone and it could greatly
+simplify tango installation on small environments (like small, independent
+laboratories).
+
+Motivation
+==========
+
+I was given a openSUSE laptop so that I could do the presentation for the tango
+meeting held in FRMII on October 2012.
+Since I planned to do a demonstration as part of the presentation I installed
+all mysql libraries, omniorb, tango and pytango on this laptop.
+
+During the flight to Munich I realized tango was not working because of a
+strange mysql server configuration done by the openSUSE distribution. I am not a
+mysql expert and I couldn't google for a solution. Also it made me angry to have
+to install all the mysql crap (libmysqlclient, mysqld, mysql-administrator, bla,
+bla) just to have a demo running.
+
+At the time of writting the first version of this TEP I still didn't solve
+the problem! Shame on me!
+
+Also at the same tango meetting during the tango archiving discussions I heard
+fake whispers or changing the tango archiving from MySQL/Oracle to NoSQL.
+
+I started thinking if it could be possible to have an alternative implementation
+of DataBaseds without the need for a mysql server.
+
+Requisites
+==========
+
+    * no dependencies on external packages
+    * no need for a separate database server process (at least, by default)
+    * no need to execute post install scripts to fill database
+    
+
+Step 1 - Gather database information
+=====================================
+
+It turns out that python has a Database API specification (:pep:`249`).
+Python distribution comes natively (>= 2.6) with not one but several persistency options
+(:ref:`persistence`):
+
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+|   module        | Native | Platforms     | API        | Database            | Description                                                             |
++=================+========+===============+============+=====================+=========================================================================+
+| **Native python 2.x**                                                                                                                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`pickle`   | Yes    | all           | dump/load  | file                | python serialization/marchalling module                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`shelve`   | Yes    | all           | dict       | file                | high level persistent, dictionary-like object                           |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`marshal`  | Yes    | all           | dump/load  | file                | Internal Python object serialization                                    |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`anydbm`   | Yes    | all           | dict       | file                | Generic access to DBM-style databases. Wrapper for :mod:`dbhash`,       |
+|                 |        |               |            |                     | :mod:`gdbm`, :mod:`dbm` or :mod:`dumbdbm`                               |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbm`      | Yes    | all           | dict       | file                | Simple "database" interface                                             |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`gdbm`     | Yes    | unix          | dict       | file                | GNU's reinterpretation of dbm                                           |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbhash`   | Yes    | unix?         | dict       | file                | DBM-style interface to the BSD database library (needs :mod:`bsddb`).   |
+|                 |        |               |            |                     | **Removed in python 3**                                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`bsddb`    | Yes    | unix?         | dict       | file                | Interface to Berkeley DB library. **Removed in python 3**               |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dumbdbm`  | Yes    | all           | dict       | file                | Portable DBM implementation                                             |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`sqlite3`  | Yes    | all           | DBAPI2     | file, memory        | DB-API 2.0 interface for SQLite databases                               |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| **Native Python 3.x**                                                                                                                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`pickle`   | Yes    | all           | dump/load  | file                | python serialization/marchalling module                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`shelve`   | Yes    | all           | dict       | file                | high level persistent, dictionary-like object                           |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`marshal`  | Yes    | all           | dump/load  | file                | Internal Python object serialization                                    |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbm`      | Yes    | all           | dict       | file                | Interfaces to Unix "databases". Wrapper for :mod:`dbm.gnu`,             |
+|                 |        |               |            |                     | :mod:`dbm.ndbm`, :mod:`dbm.dumb`                                        |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbm.gnu`  | Yes    | unix          | dict       | file                | GNU's reinterpretation of dbm                                           |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbm.ndbm` | Yes    | unix          | dict       | file                | Interface based on ndbm                                                 |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`dbm.dumb` | Yes    | all           | dict       | file                | Portable DBM implementation                                             |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+| :mod:`sqlite3`  | Yes    | all           | DBAPI2     | file, memory        | DB-API 2.0 interface for SQLite databases                               |
++-----------------+--------+---------------+------------+---------------------+-------------------------------------------------------------------------+
+
+**third-party DBAPI2**
+
+.. hlist::
+    :columns: 1
+    
+    * `pyodbc <http://code.google.com/p/pyodbc>`_
+    * `mxODBC <http://www.egenix.com/products/python/mxODBC/>`_
+    * `kinterbasdb <http://www.firebirdsql.org/index.php?op=devel&sub=python>`_
+    * `mxODBC Connect <http://www.egenix.com/products/python/mxODBCConnect/>`_
+    * `MySQLdb <http://sourceforge.net/projects/mysql-python>`_
+    * `psycopg <http://www.initd.org/software/initd/psycopg>`_
+    * `pyPgSQL <http://pypgsql.sourceforge.net/>`_
+    * `PySQLite <http://code.google.com/p/pysqlite/>`_
+    * `adodbapi <http://adodbapi.sourceforge.net/>`_
+    * `pymssql <http://sourceforge.net/projects/pymssql>`_
+    * `sapdbapi <http://www.sapdb.org/sapdbapi.html>`_
+    * `ibm_db <http://code.google.com/p/ibm-db/>`_
+    * `InformixDB <http://informixdb.sourceforge.net/>`_
+
+**third-party NOSQL**
+
+*(these may or not have python DBAPI2 interface)*
+
+    * `CouchDB <http://couchdb.apache.org/>`_ - :mod:`couchdb.client`
+    * `MongoDB <http://www.mongodb.org/>`_ - :mod:`pymongo` - NoSQL database
+    * `Cassandra <http://cassandra.apache.org/>`_ - :mod:`pycassa`
+
+**third-party database abstraction layer**
+
+    * `SQLAlchemy <http://www.sqlalchemy.org/>`_ - :mod:`sqlalchemy` - Python SQL toolkit and Object Relational Mapper
+
+Step 2 - Which module to use?
+=====================================
+
+*herrrr... wrong question!*
+
+The first decision I thought it should made is which python module better
+suites the needs of this TEP. Then I realized I would fall into the same trap as
+the C++ DataBaseds: hard link the server to a specific database implementation
+(in their case MySQL).
+
+I took a closer look at the tables above and I noticed that python persistent
+modules come in two flavors: dict and DBAPI2.
+So naturally the decision I thought it had to be made was: *which flavor to use?*
+
+But then I realized both flavors could be used if we properly design the python
+DataBaseds. 
+
+Step 3 - Architecture
+=====================================
+
+If you step back for a moment and look at the big picture you will see that 
+what we need is really just a mapping between the Tango DataBase set of
+attributes and commands (I will call this `Tango Device DataBase API`) and
+the python database API oriented to tango (I will call this TDB interface).
+
+The TDB interface should be represented by the :class:`ITangoDB`.
+Concrete databases should implement this interface (example, DBAPI2 interface
+should be represented by a class :class:`TangoDBAPI2` implementing :class:`ITangoDB`).
+
+Connection to a concrete ITangoDB should be done through a factory: :class:`TangoDBFactory`
+
+The Tango DataBase device should have no logic. Through basic configuration it
+should be able to ask the :class:`TangoDBFactory` for a concrete :class:`ITangoDB`. The code of
+every command and attribute should be simple forward to the :class:`ITangoDB` object (a
+part of some parameter translation and error handling).
+
+.. graphviz::
+
+    digraph uml {
+        fontname = "Bitstream Vera Sans"
+        fontsize = 8
+
+        node [
+          fontname = "Bitstream Vera Sans"
+          fontsize = 8
+          shape = "record"
+        ]
+
+        edge [
+          fontname = "Bitstream Vera Sans"
+          fontsize = 8
+        ]
+
+        subgraph tangodbPackage {
+            label = "Package tangodb"
+            
+            ITangoDB [
+                label = "{ITangoDB|+ add_device()=0\l+delete_device()=0\l+export_device()=0\l...}"
+            ]
+            
+            DBAPI2 [
+                label = "{TangoDBAPI2}"
+            ]
+
+            Dict [
+                label = "{TangoDBDict}"
+            ]
+
+            DBSqlite3 [
+                label = "{TangoDBSqlite3}"
+            ]
+    
+            mxODBC [
+                label = "{TangoDBmxODBC}"
+            ]
+
+            MySQLdb [
+                label = "{TangoDBMySQLdb}"
+            ]
+            
+            Shelve [
+                label = "{TangoDBShelve}"
+            ]
+            
+            TangoDBFactory [
+                label = "{TangoDBFactory|+get_tango_db(): ITangoDB}"
+            ]
+
+            DBAPI2 -> ITangoDB
+            Dict -> ITangoDB
+            DBSqlite3 -> DBAPI2
+            mxODBC -> DBAPI2
+            MySQLdb -> DBAPI2
+            Shelve -> Dict
+        }
+        
+        DeviceImpl [
+            label = "{Tango::DeviceImpl}"  
+        ]
+        
+        DataBase [
+            label = "{DataBase|+DbAddDevice()\l+DbDeleteDevice()\l+DbExportDevice()\l...}"
+        ]
+
+        DataBase -> DeviceImpl
+    }
+
+Step 4 - The python DataBaseds
+=====================================
+
+If we can make a python device server which has the same set of attributes
+and commands has the existing C++ DataBase (and of course the same semantic
+behavior), the tango DS and tango clients will never know the difference (BTW,
+that's one of the beauties of tango).
+
+The C++ DataBase consists of around 80 commands and 1 mandatory attribute (the
+others are used for profiling) so making a python Tango DataBase device from
+scratch is out of the question.
+
+Fortunately, C++ DataBase is one of the few device servers that were developed
+since the beginning with pogo and were successfully adapted to pogo 8. This
+means there is a precious :download:`DataBase.xmi` available which can be
+loaded to pogo and saved as a python version.
+The result of doing this can be found here :download:`here <database.py>` (this file
+was generated with a beta version of the pogo 8.1 python code generator so
+it may contain errors).
+
+Step 5 - Default database implementation
+===========================================
+
+The decision to which database implementation should be used should obey the
+following rules:
+
+  #. should not require an extra database server process
+  #. should be a native python module
+  #. should implement python DBAPI2
+  
+It came to my attention the :mod:`sqlite3` module would be perfect as a default
+database implementation. This module comes with python since version 2.5 and is
+available in all platforms. It implements the DBAPI2 interface and can store
+persistently in a common OS file or even in memory.
+
+There are many free scripts on the web to translate a mysql database to sqlite3
+so one can use an existing mysql tango database and directly use it with the 
+python DataBaseds with sqlite3 implementation.
+
+Development
+=================
+
+The development is being done in PyTango SVN trunk in the :mod:`PyTango.databaseds`
+module.
+
+You can checkout with::
+
+    $ svn co https://tango-cs.svn.sourceforge.net/svnroot/tango-cs/bindings/PyTango/trunk PyTango-trunk
+    
+Disadvantages
+===============
+
+A serverless, file based, database has some disadvantages when compared to the
+mysql solution:
+
+    * Not possible to distribute load between Tango DataBase DS and database server
+      (example: run the Tango DS in one machine and the database server in another)
+    * Not possible to have two Tango DataBase DS pointing to the same database
+    * Harder to upgrade to newer version of sql tables (specially if using dict
+      based database)
+
+Bare in mind the purpose of this TED is to simplify the process of trying tango
+and to ease installation and configuration on small environments (like small,
+independent laboratories).
+
+References
+============
+
+    * http://wiki.python.org/moin/DbApiCheatSheet
+    * http://wiki.python.org/moin/DbApiModuleComparison
+    * http://wiki.python.org/moin/DatabaseProgramming
+    * http://wiki.python.org/moin/DbApiFaq
+    * :pep:`249`
+    * http://wiki.python.org/moin/ExtendingTheDbApi
+    * http://wiki.python.org/moin/DbApi3
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git



More information about the debian-science-commits mailing list