[pytango] 166/483: add experimental databaseds
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 2f5cc96cb0bbb10e8397e4c86d8f0e6a566cd078
Author: tiagocoutinho <tiagocoutinho at 4e9c00fd-8f2e-0410-aa12-93ce3db5e235>
Date: Thu Oct 11 15:36:36 2012 +0000
add experimental databaseds
git-svn-id: http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk@21276 4e9c00fd-8f2e-0410-aa12-93ce3db5e235
---
PyTango/databaseds/DataBase.xmi | 817 ++++++++++++++++++++++++++++++++
PyTango/databaseds/DataBaseds | 9 +
PyTango/databaseds/create_db.sql | 124 +++++
PyTango/databaseds/create_db_tables.sql | 230 +++++++++
PyTango/databaseds/db_access.py | 437 +++++++++++++++++
PyTango/databaseds/db_errors.py | 8 +
PyTango/databaseds/mysql2sqlite.sh | 101 ++++
PyTango/release.py | 4 +-
8 files changed, 1728 insertions(+), 2 deletions(-)
diff --git a/PyTango/databaseds/DataBase.xmi b/PyTango/databaseds/DataBase.xmi
new file mode 100644
index 0000000..406a784
--- /dev/null
+++ b/PyTango/databaseds/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/allworkspace/tango-database/trunk" 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
Str[1] = Device name
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
Str[1] = Device(s) name
Str[2] = Tango class name
Str[n] = Device name
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
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
Str[1] = Attribute name
Str[2] = Property name
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
Str[1] = Property name
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
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
Str[1] = Attribute name
Str[2] = Property name
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
Str[1] = Property name
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
Str[1] = Property name
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
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 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)
Str[1] = CORBA IOR
Str[2] = Notifd host name
Str[3] = Notifd pid
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.
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
Str[1] = Attribute name filter (eg: att*)">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="Str[0] = Class attribute name
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
Str[1] = Attribute name
Str[n] = Attribute name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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
DbGetClassAttributeProperty. The old command has not been deleted from the
server for compatibility reasons." execMethod="db_get_class_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="Str[0] = Tango class name
Str[1] = Attribute name
Str[n] = Attribute name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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)">
+ <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
Str[1] = Attribute name
Str[2] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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.
[0] - is the class of the device.
[1] - is the class from the device class is inherited.
........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
Str[1] = Property name
Str[2] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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)
....">
+ <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
Str[1] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="Str[0] = Property name
Str[1] = date
Str[2] = Property value number (array case)
Str[3] = Property value 1
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
 for the specified device" execMethod="db_get_device_attribute_list" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="Str[0] = Device name
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
Str[1] = Attribute name
Str[n] = Attribute name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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
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" execMethod="db_get_device_attribute_property2" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="Str[0] = Device name
Str[1] = Attribute name
Str[n] = Attribute name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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)">
+ <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
Str[1] = Attribute name
Str[2] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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
Str[1] = Tango class
Str[n] = Device name
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
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
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)">
+ <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
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
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
Str[1] = Property name
Str[n] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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
Str[2] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="Str[0] = Property name
Str[1] = date
Str[2] = Property value number (array case)
Str[3] = Property value 1
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
name matching the specified filter" execMethod="db_get_device_property_list" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="Str[0] = device name
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
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
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
Str[1] = Property name
Str[n] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="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">
+ <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
Str[2] = Property name">
+ <type xsi:type="pogoDsl:StringArrayType"/>
+ </argin>
+ <argout description="Str[0] = Property name
Str[1] = date
Str[2] = Property value number (array case)
Str[3] = Property value 1
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
specified filter" execMethod="db_get_property_list" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="Str[0] = Object name
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
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.
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
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">
+ <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
stored in database" execMethod="db_info" displayLevel="OPERATOR" polledPeriod="0">
+ <argin description="">
+ <type xsi:type="pogoDsl:VoidType"/>
+ </argin>
+ <argout description="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">
+ <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
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
Str[1] = Attribute number
Str[2] = Attribute name
Str[3] = Property number
Str[4] = Property name
Str[5] = Property value
.....">
+ <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
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
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 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
Str[1] = Property number
Str[2] = Property name
Str[3] = Property value number
Str[4] = Property value 1
Str[n] = Property value n
....">
+ <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
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
Str[1] = Attribute number
Str[2] = Attribute name
Str[3] = Property number
Str[4] = Property name
Str[5] = Property value
.....">
+ <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
which are arrays. Not possible with the old DbPutDeviceAttributeProperty command.
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
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 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
Str[1] = Property number
Str[2] = Property name
Str[3] = Property value number
Str[4] = Property value 1
Str[n] = Property value n
....">
+ <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
Str[1] = Property number
Str[2] = Property name
Str[3] = Property value number
Str[4] = Property value 1
Str[n] = Property value n
....">
+ <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
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
startup sequence. The aim of this command is to minimize database access during
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
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.
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
 - 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">
+ <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.
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.
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/PyTango/databaseds/DataBaseds b/PyTango/databaseds/DataBaseds
new file mode 100755
index 0000000..2f8cf3c
--- /dev/null
+++ b/PyTango/databaseds/DataBaseds
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+
+import database
+
+def main():
+ database.main()
+
+if __name__ == '__main__':
+ main()
diff --git a/PyTango/databaseds/create_db.sql b/PyTango/databaseds/create_db.sql
new file mode 100644
index 0000000..34f6703
--- /dev/null
+++ b/PyTango/databaseds/create_db.sql
@@ -0,0 +1,124 @@
+#
+# Create all database tables
+#
+
+source create_db_tables.sql
+
+#
+# Init the history identifiers
+#
+
+INSERT INTO device_history_id VALUES (0);
+INSERT INTO device_attribute_history_id VALUES (0);
+INSERT INTO class_history_id VALUES (0);
+INSERT INTO class_attribute_history_id VALUES (0);
+INSERT INTO object_history_id VALUES (0);
+
+#
+# Create entry for database device server in device table
+#
+
+INSERT INTO device VALUES ('sys/database/2',NULL,'sys','database','2','nada','nada','nada','DataBaseds/2','nada','DataBase','nada','nada','nada','nada');
+INSERT INTO device VALUES ('dserver/DataBaseds/2',NULL,'dserver','DataBaseds','2','nada','nada','nada','DataBaseds/2','nada','DServer','nada','nada','nada','nada');
+
+#
+# Create entry for test device server in device table
+#
+
+INSERT INTO device VALUES ('sys/tg_test/1',NULL,'sys','tg_test','1','nada','nada','nada','TangoTest/test','nada','TangoTest','nada','nada','nada','nada');
+INSERT INTO device VALUES ('dserver/TangoTest/test',NULL,'dserver','TangoTest','test','nada','nada','nada','TangoTest/test','nada','DServer','nada','nada','nada','nada');
+
+#
+# Create entry for Tango Control Access in device table
+#
+
+INSERT INTO device VALUES ('sys/access_control/1',NULL,'sys','access_control','1','nada','nada','nada','TangoAccessControl/1','nada','TangoAccessControl','nada','nada','nada','nada');
+INSERT INTO device VALUES ('dserver/TangoAccessControl/1',NULL,'dserver','TangoAccessControl','1','nada','nada','nada','TangoAccessControl/1','nada','DServer','nada','nada','nada','nada');
+INSERT INTO server VALUES ('tangoaccesscontrol/1','',0,0);
+
+#
+# Create default user access
+#
+
+INSERT INTO access_address VALUES ('*','*.*.*.*','FF.FF.FF.FF',20060824131221,00000000000000);
+INSERT INTO access_device VALUES ('*','*/*/*','write',20060824131221,00000000000000);
+
+#
+# Create entries in the property_class tables for controlled access service
+#
+
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',1,'DbGetServerInfo','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',2,'DbGetServerNameList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',3,'DbGetInstanceNameList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',4,'DbGetDeviceServerClassList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',5,'DbGetDeviceList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',6,'DbGetDeviceDomainList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',7,'DbGetDeviceFamilyList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',8,'DbGetDeviceMemberList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',9,'DbGetClassList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',10,'DbGetDeviceAliasList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',11,'DbGetObjectList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',12,'DbGetPropertyList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',13,'DbGetProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',14,'DbGetClassPropertyList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',15,'DbGetClassProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',16,'DbGetDevicePropertyList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',17,'DbGetDeviceProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',18,'DbGetClassAttributeList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',19,'DbGetDeviceAttributeProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',20,'DbGetDeviceAttributeProperty2','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',21,'DbGetLoggingLevel','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',22,'DbGetAliasDevice','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',23,'DbGetClassForDevice','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',24,'DbGetClassInheritanceForDevice','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',25,'DbGetDataForServerCache','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',26,'DbInfo','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',27,'DbGetClassAttributeProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',28,'DbGetClassAttributeProperty2','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',29,'DbMysqlSelect','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',30,'DbGetDeviceInfo','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',31,'DbGetDeviceWideList','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',32,'DbImportEvent','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',33,'DbGetDeviceAlias','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('Database','AllowedAccessCmd',34,'DbGetCSDbServerList','1980-01-01 ','1980-01-01 ',NULL);
+
+#
+#
+#
+
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',1,'QueryClass','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',2,'QueryDevice','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',3,'EventSubscriptionChange','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',4,'DevPollStatus','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',5,'GetLoggingLevel','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',6,'GetLoggingTarget','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',7,'QueryWizardDevProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',8,'QueryWizardClassProperty','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES('DServer','AllowedAccessCmd',9,'QuerySubDevice','1980-01-01 ','1980-01-01 ',NULL);
+
+#
+#
+#
+
+INSERT INTO property_class VALUES ('Starter','AllowedAccessCmd',1,'DevReadLog','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('Starter','AllowedAccessCmd',2,'DevStart','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('Starter','AllowedAccessCmd',3,'DevGetRunningServers','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('Starter','AllowedAccessCmd',4,'DevGetStopServers','1980-01-01 ','1980-01-01 ',NULL);
+
+#
+#
+#
+
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',1,'GetUsers','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',2,'GetAddressByUser','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',3,'GetDeviceByUser','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',4,'GetAccess','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',5,'GetAllowedCommands','1980-01-01 ','1980-01-01 ',NULL);
+INSERT INTO property_class VALUES ('TangoAccessControl','AllowedAccessCmd',6,'GetAllowedCommandClassList','1980-01-01 ','1980-01-01 ',NULL);
+
+#
+# Load the stored procedures
+#
+
+source stored_proc.sql
+
diff --git a/PyTango/databaseds/create_db_tables.sql b/PyTango/databaseds/create_db_tables.sql
new file mode 100644
index 0000000..1b9810c
--- /dev/null
+++ b/PyTango/databaseds/create_db_tables.sql
@@ -0,0 +1,230 @@
+CREATE TABLE IF NOT EXISTS access_address (
+ user varchar(255) default NULL,
+ address varchar(255) default NULL,
+ netmask varchar(255) default 'FF.FF.FF.FF',
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL default '00000000000000'
+) ;
+
+CREATE TABLE IF NOT EXISTS access_device (
+ user varchar(255) default NULL,
+ device varchar(255) default NULL,
+ rights varchar(255) default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL default '00000000000000'
+) ;
+
+CREATE TABLE IF NOT EXISTS attribute_alias (
+ alias varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ device varchar(255) NOT NULL default '',
+ attribute varchar(255) NOT NULL default '',
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+CREATE TABLE IF NOT EXISTS attribute_class (
+ class varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+
+CREATE TABLE IF NOT EXISTS device (
+ name varchar(255) NOT NULL default 'nada',
+ alias varchar(255) default NULL,
+ domain varchar(85) NOT NULL default 'nada',
+ family varchar(85) NOT NULL default 'nada',
+ member varchar(85) NOT NULL default 'nada',
+ exported int(11) default 0,
+ ior text,
+ host varchar(255) NOT NULL default 'nada',
+ server varchar(255) NOT NULL default 'nada',
+ pid int(11) default 0,
+ class varchar(255) NOT NULL default 'nada',
+ version varchar(8) NOT NULL default 'nada',
+ started datetime default 0,
+ stopped datetime default 0,
+ comment text
+) ;
+
+#
+# Table structure for table 'event'
+#
+
+CREATE TABLE IF NOT EXISTS event (
+ name varchar(255) default NULL,
+ exported int(11) default NULL,
+ ior text,
+ host varchar(255) default NULL,
+ server varchar(255) default NULL,
+ pid int(11) default NULL,
+ version varchar(8) default NULL,
+ started datetime default NULL,
+ stopped datetime default NULL
+) ;
+
+#
+# Table structure for table 'property'
+#
+
+CREATE TABLE IF NOT EXISTS property (
+ object varchar(255) default NULL,
+ name varchar(255) default NULL,
+ count int(11) default NULL,
+ value text default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+#
+# Table structure for table 'property_attribute_class'
+#
+
+CREATE TABLE IF NOT EXISTS property_attribute_class (
+ class varchar(255) NOT NULL default '',
+ attribute varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+#
+# Table structure for table 'property_attribute_device'
+#
+
+CREATE TABLE IF NOT EXISTS property_attribute_device (
+ device varchar(255) NOT NULL default '',
+ attribute varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+#
+# Table structure for table 'property_class'
+#
+
+CREATE TABLE IF NOT EXISTS property_class (
+ class varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+#
+# Table structure for table 'property_device'
+#
+
+CREATE TABLE IF NOT EXISTS property_device (
+ device varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ domain varchar(255) NOT NULL default '',
+ family varchar(255) NOT NULL default '',
+ member varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text default NULL,
+ updated timestamp NOT NULL,
+ accessed timestamp NOT NULL,
+ comment text
+) ;
+
+#
+# Table structure for table 'server'
+#
+
+CREATE TABLE IF NOT EXISTS server (
+ name varchar(255) NOT NULL default '',
+ host varchar(255) NOT NULL default '',
+ mode int(11) default '0',
+ level int(11) default '0'
+) ;
+
+#
+# Tables for history identifiers
+#
+
+CREATE TABLE IF NOT EXISTS device_history_id (
+ id int(11) NOT NULL default '0'
+) ;
+
+CREATE TABLE IF NOT EXISTS device_attribute_history_id (
+ id int(11) NOT NULL default '0'
+) ;
+
+CREATE TABLE IF NOT EXISTS class_history_id (
+ id int(11) NOT NULL default '0'
+) ;
+
+CREATE TABLE IF NOT EXISTS class_attribute_history_id (
+ id int(11) NOT NULL default '0'
+) ;
+
+CREATE TABLE IF NOT EXISTS object_history_id (
+ id int(11) NOT NULL default '0'
+) ;
+
+#
+# Tables for history
+#
+
+CREATE TABLE IF NOT EXISTS property_hist (
+ id int(10) NOT NULL default '0',
+ date timestamp NOT NULL,
+ object varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text
+) ;
+
+CREATE TABLE IF NOT EXISTS property_device_hist (
+ id int(10) NOT NULL default '0',
+ date timestamp NOT NULL,
+ device varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text
+) ;
+
+CREATE TABLE IF NOT EXISTS property_class_hist (
+ id int(10) NOT NULL default '0',
+ date timestamp NOT NULL,
+ class varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text
+) ;
+
+CREATE TABLE IF NOT EXISTS property_attribute_class_hist (
+ id int(10) NOT NULL default '0',
+ date timestamp NOT NULL,
+ class varchar(255) NOT NULL default '',
+ attribute varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text
+) ;
+
+CREATE TABLE IF NOT EXISTS property_attribute_device_hist (
+ id int(10) NOT NULL default '0',
+ date timestamp NOT NULL,
+ device varchar(255) NOT NULL default '',
+ attribute varchar(255) NOT NULL default '',
+ name varchar(255) NOT NULL default '',
+ count int(11) NOT NULL default '0',
+ value text
+) ;
+
diff --git a/PyTango/databaseds/db_access.py b/PyTango/databaseds/db_access.py
new file mode 100644
index 0000000..49b28a2
--- /dev/null
+++ b/PyTango/databaseds/db_access.py
@@ -0,0 +1,437 @@
+from __future__ import print_function
+
+import os
+import functools
+
+import PyTango
+
+th_exc = PyTango.Except.throw_exception
+
+from db_errors import *
+
+def get_create_db_statements():
+ statements = []
+ with open("create_db_tables.sql.in") as f:
+ lines = f.readlines()
+ # strip comments
+ lines = ( line for line in lines if not line.startswith('#') )
+ lines = ( line for line in lines if not line.lower().strip().startswith('key') )
+ lines = ( line for line in lines if not line.lower().strip().startswith('key') )
+ lines = "".join(lines)
+ lines = lines.replace("ENGINE=MyISAM","")
+ statements += lines.split(";")
+
+ with open("create_db.sql.in") as f:
+ lines = f.readlines()
+ # strip comments
+ lines = ( line for line in lines if not line.lower().startswith('#') )
+ lines = ( line for line in lines if not line.lower().startswith('create database') )
+ lines = ( line for line in lines if not line.lower().startswith('use') )
+ lines = ( line for line in lines if not line.lower().startswith('source') )
+ lines = "".join(lines)
+ statements += lines.split(";")
+
+ return statements
+
+def replace_wildcard(text):
+ # escape '%' with '\'
+ text = text.replace("%", "\\%")
+ # escape '_' with '\'
+ text = text.replace("_", "\\_")
+ # escape '"' with '\'
+ text = text.replace('"', '\\"')
+ # escape ''' with '\'
+ text = text.replace("'", "\\'")
+ # replace '*' with '%'
+ text = text.replace("*", "%")
+ return text
+
+def use_cursor(f):
+ @functools.wraps(f)
+ def wrap(*args, **kwargs):
+ self = args[0]
+ has_cursor = 'cursor' in kwargs
+ cursor = kwargs.pop('cursor', None)
+ if not has_cursor:
+ cursor = self.get_cursor()
+ self.cursor = cursor
+ try:
+ ret = f(*args, **kwargs)
+ if not has_cursor:
+ cursor.connection.commit()
+ return ret
+ finally:
+ if not has_cursor:
+ cursor.close()
+ del self.cursor
+ return wrap
+
+class Tango_dbapi2(object):
+
+ DB_API_NAME = 'sqlite3'
+
+ def __init__(self, db_name="tango_database.db", history_depth=10, fire_to_starter=True):
+ self._db_api = None
+ self._db_conn = None
+ self.db_name = db_name
+ self.history_depth = history_depth;
+ self.fire_to_starter = fire_to_starter
+ self.initialize()
+
+ def close_db(self):
+ if self._db_conn is not None:
+ self._db_conn.commit()
+ self._db_conn.close()
+ self._db_api = None
+ self._db_conn = None
+
+ def get_db_api(self):
+ if self._db_api is None:
+ self._db_api = __import__(self.DB_API_NAME)
+ return self._db_api
+
+ @property
+ def db_api(self):
+ return self.get_db_api()
+
+ @property
+ def db_conn(self):
+ if self._db_conn is None:
+ self._db_conn = self.db_api.connect(self.db_name)
+ return self._db_conn
+
+ def get_cursor(self):
+ return self.db_conn.cursor()
+
+ def initialize(self):
+ if not os.path.isfile(self.db_name):
+ self.create_db()
+
+ @use_cursor
+ def create_db(self):
+ print("Creating database...")
+ statements = get_create_db_statements()
+ cursor = self.cursor
+ for statement in statements:
+ cursor.execute(statement)
+
+ @use_cursor
+ def get_id(self, name):
+ cursor = self.cursor
+ name += '"_history_id'
+ _id = cursor.execute('SELECT id FROM ?', (name,)).fetchone()[0] + 1
+ cursor.execute('UPDATE ? SET id=?', (name, _id))
+ return _id
+
+ @use_cursor
+ def purge_att_property(self, table, field, obj, attr, name):
+ cursor = self.cursor
+ cursor.execute(\
+ 'SELECT DISTINCT id FROM ? WHERE ? = ? AND name = ? AND ' \
+ 'attribute = ? ORDER BY date', (table, field, obj, name, attr))
+ rows = cursor.fetchall()
+ to_del = len(rows) - self.history_depth
+ if to_del > 0:
+ for row in rows[:to_del]:
+ cursor.execute('DELETE FROM ? WHERE id=?', (table, row[0]))
+
+ @use_cursor
+ def purge_property(self, table, field, obj, name):
+ cursor = self.cursor
+ cursor.execute(\
+ 'SELECT DISTINCT id FROM ? WHERE ? = ? AND name = ? ' \
+ 'ORDER BY date', (table, field, obj, name))
+ rows = cursor.fetchall()
+ to_del = len(rows) - self.history_depth
+ if to_del > 0:
+ for row in rows[:to_del]:
+ cursor.execute('DELETE FROM ? WHERE id=?', (table, row[0]))
+
+ @use_cursor
+ def get_device_host(self, name):
+ cursor = self.cursor
+ name = replace_wildcard(name)
+ cursor.execute('SELECT host FROM device WHERE name LIKE ?', (name,))
+ row = cursor.fetchone()
+ if row is None:
+ raise Exception("No host for device '" + name + "'")
+ else:
+ return row[0]
+
+ # TANGO API
+
+ def get_stored_procedure_release(self):
+ return 'release 1.8'
+
+ @use_cursor
+ def add_device(self, server_name, dev_info, klass_name, alias=None):
+ dev_name, (domain, family, member) = dev_info
+ cursor = self.cursor
+
+ # first delete the tuple (device,name) from the device table
+ cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
+
+ # then insert the new value for this tuple
+ cursor.execute(\
+ 'INSERT INTO device (name, alias, domain, family, member, exported, ' \
+ 'ior, host, server, pid, class, version, started, stopped) ' \
+ 'VALUES (?, ?, ?, ?, ?, 0, "nada", "nada", ?, 0, ?, "0", NULL, NULL)',
+ (dev_name, alias, domain, family, member, server_name, klass_name))
+
+ # Check if a DServer device entry for the process already exists
+ cursor.execute('SELECT name FROM device WHERE server LIKE ? AND class LIKE "DServer"', (server_name,))
+ if cursor.fetchone() is None:
+ dev_name = "dserver/" + server_name
+ domain, family, member = dev_name.split("/", 2)
+ cursor.execute(\
+ 'INSERT INTO device (name, domain, family, member, exported, ior, ' \
+ 'host, server, pid, class, version, started, stopped) ' \
+ 'VALUES (?, ?, ?, ?, 0, "nada", "nada", ?, 0, "DServer", "0", NULL, NULL)',
+ (dev_name, domain, family, member, server_name))
+
+ @use_cursor
+ def delete_attribute_alias(self, alias):
+ self.cursor.execute('DELETE FROM attribute_alias WHERE alias=?', (alias,))
+
+ @use_cursor
+ def delete_class_attribute(self, klass_name, attr_name):
+ self.cursor.execute(\
+ 'DELETE FROM property_attribute_class WHERE class LIKE ? AND ' \
+ 'attribute LIKE ?', (klass_name, attr_name))
+
+ @use_cursor
+ def delete_class_attribute_property(self, klass_name, attr_name, prop_name):
+ cursor = self.cursor
+
+ # Is there something to delete ?
+ cursor.execute(\
+ 'SELECT count(*) FROM property_attribute_class WHERE class = ? ' \
+ 'AND attribute = ? AND name = ?', (klass_name, attr_name, prop_name))
+ if cursor.fetchone()[0] > 0:
+ # then delete property from the property_attribute_class table
+ cursor.execute(\
+ 'DELETE FROM property_attribute_class WHERE class = ? AND ' \
+ 'attribute = ? and name = ?', (klass_name, attr_name, prop_name))
+ # mark this property as deleted
+ hist_id = self.get_id('class_attibute', cursor=cursor)
+ cursor.execute(\
+ 'INSERT INTO property_attribute_class_hist (class, attribute, ' \
+ 'name, id, count, value) VALUES ' \
+ '(?, ?, ?, ?, "0", "DELETED")',
+ (klass_name, attr_name, prop_name, hist_id))
+ self.purge_att_property("property_attribute_class_hist", "class",
+ klass_name, attr_name, prop_name, cursor=cursor)
+
+ @use_cursor
+ def delete_class_property(self, klass_name, prop_name):
+ cursor = self.cursor
+
+ prop_name = replace_wildcard(prop_name)
+ # Is there something to delete ?
+ cursor.execute(\
+ 'SELECT DISTINCT name FROM property_class WHERE class=? AND ' \
+ 'name LIKE ?', (klass_name, prop_name))
+ for row in cursor.fetchall():
+ # delete the tuple (device,name,count) from the property table
+ name = row[0]
+ cursor.execute(\
+ 'DELETE FROM property_class WHERE class=? AND name=?',
+ (klass_name, name))
+ # Mark this property as deleted
+ hist_id = self.get_id("class", cursor=cursor)
+ cursor.execute(\
+ 'INSERT INTO property_class_hist (class, name, id, count, value) ' \
+ 'VALUES (?, ?, ?, "0", "DELETED")',
+ (klass_name, name, hist_id))
+ self.purge_property("property_class_hist", "class", klass_name,
+ name, cursor=cursor)
+
+ @use_cursor
+ def delete_device(self, dev_name):
+ cursor = self.cursor
+ dev_name = replace_wildcard(dev_name)
+
+ # delete the device from the device table
+ cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
+
+ # delete device from the property_device table
+ cursor.execute('DELETE FROM property_device WHERE device LIKE ?', (dev_name,))
+
+ # delete device from the property_attribute_device table
+ cursor.execute('DELETE FROM property_attribute_device WHERE device LIKE ?', (dev_name,))
+
+ @use_cursor
+ def delete_device_alias(self, dev_alias):
+ self.cursor.execute('UPDATE device SET alias=NULL WHERE alias=?', (dev_alias,))
+
+ @use_cursor
+ def delete_device_attribute(self, dev_name, attr_name):
+ dev_name = replace_wildcard(dev_name)
+ self.cursor.execute(\
+ 'DELETE FROM property_attribute_device WHERE device LIKE ? AND ' \
+ 'attribute LIKE ?', (dev_name, attr_name))
+
+ @use_cursor
+ def delete_device_attribute_property(self, dev_name, attr_name, prop_name):
+ cursor = self.cursor
+ # Is there something to delete ?
+ cursor.execute(\
+ 'SELECT count(*) FROM property_attribute_device WHERE device = ?' \
+ 'AND attribute = ? AND name = ?', (dev_name, attr_name, prop_name))
+ if cursor.fetchone()[0] > 0:
+ # delete property from the property_attribute_device table
+ cursor.execute(\
+ 'DELETE FROM property_attribute_device WHERE device = ? AND '
+ 'attribute = ? AND name = ?', (dev_name, attr_name, prop_name))
+ # Mark this property as deleted
+ hist_id = self.get_id("device_attribute", cursor=cursor)
+ cursor.execute(\
+ 'INSERT INTO property_attribute_device_hist ' \
+ '(device, attribute, name, id, count, value) VALUES ' \
+ '(?, ?, ?, ?, "0", "DELETED")', (dev_name, attr_name, prop_name, hist_id))
+ self.purge_att_property("property_attribute_device_hist", "device",
+ dev_name, attr_name, prop_name, cursor=cursor)
+
+ @use_cursor
+ def delete_device_property(self, dev_name, prop_name):
+ cursor = self.cursor
+ prop_name = replace_wildcard(prop_name)
+
+ # Is there something to delete ?
+ cursor.execute(\
+ 'SELECT DISTINCT name FROM property_device WHERE device=? AND ' \
+ 'name LIKE ?', (dev_name, prop_name))
+ for row in cursor.fetchall():
+ # delete the tuple (device,name,count) from the property table
+ cursor.execute(\
+ 'DELETE FROM property_device WHERE device=? AND name LIKE ?',
+ (dev_name, prop_name))
+ # Mark this property as deleted
+ hist_id = self.get_id("device", cursor=cursor)
+ cursor.execute(\
+ 'INSERT INTO property_device_hist (device, id, name, count, value) ' \
+ 'VALUES (?, ?, ?, "0", "DELETED")', (dev_name, hist_id, row[0]))
+ self.purge_property("property_device_hist", "device", dev_name, row[0])
+
+ @use_cursor
+ def delete_property(self, obj_name, prop_name):
+ cursor = self.cursor
+ prop_name = replace_wildcard(prop_name)
+
+ # Is there something to delete ?
+ cursor.execute(\
+ 'SELECT DISTINCT name FROM property WHERE object=? AND ' \
+ 'name LIKE ?', (obj_name, prop_name))
+ for row in cursor.fetchall():
+ # delete the tuple (object,name,count) from the property table
+ cursor.execute(\
+ 'DELETE FROM property_device WHERE device=? AND name LIKE ?',
+ (obj_name, prop_name))
+ # Mark this property as deleted
+ hist_id = self.get_id("object", cursor=cursor)
+ cursor.execute(\
+ 'INSERT INTO property_hist (object, name, id, count, value) ' \
+ 'VALUES (?, ?, ?, "0", "DELETED")', (obj_name, row[0], hist_id))
+ self.purge_property("property_hist", "object", obj_name, row[0])
+
+ @use_cursor
+ def delete_server(self, server_instance):
+ cursor = self.cursor
+ server_instance = replace_wildcard(server_instance)
+
+ previous_host = None
+ # get host where running
+ if self.fire_to_starter:
+ adm_dev_name = "dserver/" + server_instance
+ previous_host = self.get_device_host(adm_dev_name)
+
+ # then delete the device from the device table
+ cursor.execute('DELETE FROM device WHERE server LIKE ?', (server_instance,))
+
+ # Update host's starter to update controlled servers list
+ if self.fire_to_starter and previous_host:
+ # TODO send to starter
+ pass
+
+ @use_cursor
+ def delete_server_info(self, server_instance):
+ self.cursor.execute('DELETE FROM server WHERE name=?', (server_instance,))
+
+ @use_cursor
+ def export_device(self, dev_name, IOR, host, pid, version):
+ cursor = self.cursor
+ do_fire = False
+ previous_host = None
+ if self.fire_to_starter:
+ # TODO send to starter
+ pass
+ cursor.execute('SELECT server FROM device WHERE name LIKE ?', (dev_name,))
+ row = cursor.fetchone()
+ if row is None:
+ th_exc(DB_DeviceNotDefined,
+ "device " + dev_name + " not defined in the database !",
+ "DataBase::ExportDevice()")
+ server = row[0]
+
+ # update the new value for this tuple
+ cursor.execute(\
+ 'UPDATE device SET exported=1, ior=?, host=?, pid=?, version=?, ' \
+ 'started=datetime("now") WHERE name LIKE ?',
+ (IOR, host, pid, version, dev_name))
+
+ # update host name in server table
+ cursor.execute('UPDATE server SET host=?, WHERE name LIKE ?', (host, server))
+
+ if do_fire:
+ # TODO send to starter
+ pass
+
+ @use_cursor
+ def export_event(self, event, IOR, host, pid, version):
+ cursor = self.cursor
+ cursor.execute(\
+ 'INSERT event (name,exported,ior,host,server,pid,version,started) ' \
+ 'VALUES (?, 1, ?, ?, ?, ?, ?, datetime("now")',
+ (event, IOR, host, event, pid, version))
+
+ @use_cursor
+ def get_alias_device(self, dev_alias):
+ cursor = self.cursor
+ cursor.execute('SELECT name FROM device WHERE alias LIKE ?', (dev_alias,))
+ row = cursor.fetchone()
+ if row is None:
+ th_exc(DB_DeviceNotDefined,
+ "No device found for alias '" + dev_alias + "'",
+ "DataBase::GetAliasDevice()")
+ return row[0]
+
+ @use_cursor
+ def get_attribute_alias(self, attr_alias):
+ cursor = self.cursor
+ cursor.execute('SELECT name from attribute_alias WHERE alias LIKE ?', (attr_alias,))
+ row = cursor.fetchone()
+ if row is None:
+ th_exc(DB_SQLError,
+ "No attribute found for alias '" + attr_alias + "'",
+ "DataBase::GetAttributeAlias()")
+ return row[0]
+
+ @use_cursor
+ def get_attribute_alias_list(self, attr_alias):
+ cursor = self.cursor
+ cursor.execute('SELECT DISTINCT alias FROM attribute_alias WHERE alias LIKE ? ORDER BY attribute', (attr_alias,))
+ return [ row[0] for row in cursor.fetchall() ]
+
+
+class Tango_sqlite3(Tango_dbapi2):
+
+ DB_API_NAME = 'sqlite3'
+
+
+def main():
+ db = Tango_sqlite3()
+ db.add_device("MyServer/my1", ("a/b/c", ("a","b","c")), "MyClass")
+ db.close_db()
+
+if __name__ == "__main__":
+ main()
diff --git a/PyTango/databaseds/db_errors.py b/PyTango/databaseds/db_errors.py
new file mode 100644
index 0000000..a16c225
--- /dev/null
+++ b/PyTango/databaseds/db_errors.py
@@ -0,0 +1,8 @@
+DB_SQLError = "DB_SQLError"
+DB_IncorrectArguments = "DB_IncorrectArguments"
+DB_IncorrectDeviceName = "DB_IncorrectDeviceName"
+DB_IncorrectServerName = "DB_IncorrectServerName"
+DB_DeviceNotDefined = "DB_DeviceNotDefined"
+DB_AliasNotDefined = "DB_AliasNotDefined"
+DB_NoFreeMySQLConnection = "DB_NoFreeMySQLConnection"
+DB_MySQLLibNotThreadSafe = "DB_MySQLLibNotThreadSafe"
diff --git a/PyTango/databaseds/mysql2sqlite.sh b/PyTango/databaseds/mysql2sqlite.sh
new file mode 100755
index 0000000..1e6e856
--- /dev/null
+++ b/PyTango/databaseds/mysql2sqlite.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+# Converts a mysqldump file into a Sqlite 3 compatible file. It also extracts the MySQL `KEY xxxxx` from the
+# CREATE block and create them in separate commands _after_ all the INSERTs.
+
+# Awk is chosen because it's fast and portable. You can use gawk, original awk or even the lightning fast mawk.
+# The mysqldump file is traversed only once.
+
+# Usage: $ ./mysql2sqlite mysqldump-opts db-name | sqlite3 database.sqlite
+# Example: $ ./mysql2sqlite --no-data -u root -pMySecretPassWord myDbase | sqlite3 database.sqlite
+
+# Thanks to and @artemyk and @gkuenning for their nice tweaks.
+
+mysqldump --compatible=ansi --skip-extended-insert --compact "$@" | \
+
+awk '
+
+BEGIN {
+ FS=",$"
+ print "PRAGMA synchronous = OFF;"
+ print "PRAGMA journal_mode = MEMORY;"
+ print "BEGIN TRANSACTION;"
+}
+
+# CREATE TRIGGER statements have funny commenting. Remember we are in trigger.
+/^\/\*.*CREATE.*TRIGGER/ {
+ gsub( /^.*TRIGGER/, "CREATE TRIGGER" )
+ print
+ inTrigger = 1
+ next
+}
+
+# The end of CREATE TRIGGER has a stray comment terminator
+/END \*\/;;/ { gsub( /\*\//, "" ); print; inTrigger = 0; next }
+
+# The rest of triggers just get passed through
+inTrigger != 0 { print; next }
+
+# Skip other comments
+/^\/\*/ { next }
+
+# Print all `INSERT` lines. The single quotes are protected by another single quote.
+/INSERT/ {
+ gsub( /\\\047/, "\047\047" )
+ gsub(/\\n/, "\n")
+ gsub(/\\r/, "\r")
+ gsub(/\\"/, "\"")
+ gsub(/\\\\/, "\\")
+ gsub(/\\\032/, "\032")
+ print
+ next
+}
+
+# Print the `CREATE` line as is and capture the table name.
+/^CREATE/ {
+ print
+ if ( match( $0, /\"[^\"]+/ ) ) tableName = substr( $0, RSTART+1, RLENGTH-1 )
+}
+
+# Replace `FULLTEXT KEY` or any other `XXXXX KEY` except PRIMARY by `KEY`
+/^ [^"]+KEY/ && !/^ PRIMARY KEY/ { gsub( /.+KEY/, " KEY" ) }
+
+# Get rid of field lengths in KEY lines
+/ KEY/ { gsub(/\([0-9]+\)/, "") }
+
+# Print all fields definition lines except the `KEY` lines.
+/^ / && !/^( KEY|\);)/ {
+ gsub( /AUTO_INCREMENT|auto_increment/, "" )
+ gsub( /(CHARACTER SET|character set) [^ ]+ /, "" )
+ gsub( /DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP|default current_timestamp on update current_timestamp/, "" )
+ gsub( /(COLLATE|collate) [^ ]+ /, "" )
+ gsub(/(ENUM|enum)[^)]+\)/, "text ")
+ gsub(/(SET|set)\([^)]+\)/, "text ")
+ gsub(/UNSIGNED|unsigned/, "")
+ gsub(/" [^ ]*(INT|int)[^ ]*/, "\" integer")
+ if (prev) print prev ","
+ prev = $1
+}
+
+# `KEY` lines are extracted from the `CREATE` block and stored in array for later print
+# in a separate `CREATE KEY` command. The index name is prefixed by the table name to
+# avoid a sqlite error for duplicate index name.
+/^( KEY|\);)/ {
+ if (prev) print prev
+ prev=""
+ if ($0 == ");"){
+ print
+ } else {
+ if ( match( $0, /\"[^"]+/ ) ) indexName = substr( $0, RSTART+1, RLENGTH-1 )
+ if ( match( $0, /\([^()]+/ ) ) indexKey = substr( $0, RSTART+1, RLENGTH-1 )
+ key[tableName]=key[tableName] "CREATE INDEX \"" tableName "_" indexName "\" ON \"" tableName "\" (" indexKey ");\n"
+ }
+}
+
+# Print all `KEY` creation lines.
+END {
+ for (table in key) printf key[table]
+ print "END TRANSACTION;"
+}
+'
+exit 0
diff --git a/PyTango/release.py b/PyTango/release.py
index c7bc17e..45ed4bd 100644
--- a/PyTango/release.py
+++ b/PyTango/release.py
@@ -52,7 +52,7 @@ class Release:
- keywords : (seq<str>) list of keywords
- license : (str) the license"""
name = 'PyTango'
- version_info = (8, 0, 2, 'final', 0)
+ version_info = (8, 0, 3, 'dev', 0)
version = '.'.join(map(str, version_info[:3]))
version_long = version + ''.join(map(str, version_info[3:]))
version_description = 'This version implements the C++ Tango 8.0 API.'
@@ -63,7 +63,7 @@ class Release:
license = 'LGPL'
authors = { 'Coutinho' : ('Tiago Coutinho' , 'tcoutinho at cells.es') }
author_lines = "\n".join([ "%s <%s>" % x for x in authors.values()])
- url = 'http://www.tango-controls.org/static/PyTango/latest/doc/html/'
+ url = 'http://www.tango-controls.org/static/PyTango/'
download_url = 'http://pypi.python.org/packages/source/P/PyTango'
platform = ['Linux', 'Windows XP/Vista/7']
keywords = ['Tango', 'CORBA', 'binding']
--
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