Changelog¶
RELEASE = (12,6,1) RELEASE_NOTE = “Event Callbacks, Shell scripts and FolderDS for remote logging”
“”” IMPORTANT:
Due to fandango.device module refactoring you may need to remove previous package before installing this one
12.6.1 - April 2017¶
Solve bugs in csv2tango and fandango launcher Remove extensions from scripts
Add functional.obj2str, better string return from fandango launcher filtersmart: accept strings as filter sequence Solve exceptions on ThreadedObject exit Solve bug on EventsThread.EVENT_POLLING_RATIO
PENDING:
NOT-TODO-YET(tiago): replace dicts.Enumeration by python Enum (but as it is not supported in python 2.6 we will wait to next OS upgrade) NOTE: Some bugs where found in new multi-host capablities of tango.* methods; I did some patches but play with care. ONGOING:
dicts: implement DictFile regexp alternative to CSVArray (to be used to import/export web reports) StructDict with sort/get/filter methods like Panic api preparing next PyAlarm release with None not allowed in comparisons
12.6 - March 2017¶
- Arrays:
- Solve bug in CSVArray.getAsTree when lastbranch is a column name Apply x/y offsets on calls to CSVArray.resize() Add try/except to CSVArray.set()
- Callbacks/EventSource:
- Adapted to multiple sources, add dummy for persistence Rethrow exceptions on EventSource/CachedProxy.read(_raise=True) (default) Solve EventSource filtering and polling bugs, cleanup now() references solve issues with poll-only attributes, tune for >1000 events/second Add write_with_read argument to EventSource.init() Enable EventSource subscribe without listeners Enable EventSource.removeListener(sequence) Add extra counters to EventSource, solve bug in Cached values
- Dev4Tango:
- add LastUpdate and MemUsage attributes to all devices
- Dicts:
- ThreadDict: add _updates refresh on write hardware
- Functional
- Add iif(condition,truepart,falsepart,foward)
- FolderDS/GUI:
- add SaveFolder attribute Solve bug in FolderGUI.ListFiles
- Qt:
- Adapt fadango.QEvaluator to latest PyQt4 patch for taurus 4 Solve problems with non-string models in QSignalHook
- Scripts:
- Add offset to tango2csv.add_properties_to_csv() Enable host argument to tango_servers start/status/stop Use tango_property to export DynamicDS properties
- Tango:
- Remove domain info in get_tango_host() (pytango bug) Adapt get_device_info to multihost Adapt fakeAttributeValue to taurus4 Solve bug in TangoEval formula starting with ‘not ‘ add get_server_property method check_attribute to allow proxy or taurusattribute as argument
- Tests/simulation:
- Set SimulatorDS as default simulation class
- Threading:
- Add ThreadedObject.get_avg_delay method
12.5 - January 2017¶
Solve problems on DynamicDS evalAttr() and tuples as sequences
12.4 - January 2017¶
Solve MRO exception in device.Dev4Tango Solve bug in get_device_info/get_database_device
caused by domains in tango hostname
12.3 - November 2016¶
Improve documentation
functional: - Add timed_range - Improve export_device_to_dict() - Solve regexp bug in str2py - Add tango2json script - add clsplit method
Dynamic: - Improve ATTR/XATTR syntax - Solve compatibility with Unsigned types, 12.2.3 - allow READ(full_attr) on eval
New-cache-proxy: - Solve Bugs in EventListener and ThreadedObject
FolderDS: - Adapt FolderAPI to multi-tango-host environment - Add launchers
12.2.1 - October 2016, Bugfix release, required by latest PyPLC/Panic¶
Solve critical bug in tango.add_new_device that may prevent PyAlarm to start
FolderDS/API/GUI updated to be multi-tango-host capable threads: timed_range new time-based iterator dynamic: extend DynamicAttribute formula syntax for ATTR/GET/SET callbacks: New EventSource/Listener API for registering to Tango events (BETA) inheritance: printout that caused problems on fandango.sh
12.1 - August 2016, required by latest PyPLC/Panic¶
device.FolderAPI is now Singleton, capable of parsing folderds:/tango: URI’s functional: Solved bug on str2type(list)
MIGRATED TO GITHUB: https://github.com/sergirubio/fandango
- device/FolderDS:
- remote writing/reading log files
- FolderGUI tool for managing FolderDS devices
- FolderDS device class and documentation
- functional:
- Add multiline strings when exporting to json dictionary
- Solve bug in replaceCl, dict2json
- Add code2atoms, allow str2list to keep separator
- solve bug in filtersmart()
- Add is_zero argument to isBool (enable 0 as a valid boolean by default)
- tango:
- Solve numpy bug on export_attribute_to_dict (using str2type)
- Add verbose state on check_device()
- Add load_by_class get_device_host methods to ServersDict (for better device-based API’s)
- Add get_device_help internal DS method
- Add get_class_devices method
- Add get_full_name method
linos: Add caseless option to listdir() dynamic: Add Help() command to DynamicDS qt: Solve bug in QEvaluator.setModel() objects: Add nullDecorator to objects log: Add logLevel to FakeLogger test: Adding custom test scripts
11.15 - July 2016, required by PyTangoArchiving 7.1¶
New QOptionDialog widget New functional.kmap method Added extra dictionary/casting methods to Structs Added tango_host, tango_monitor, tango_property scripts
11.14 - June 2016 Solved Bugs with Dev4Tango/tango_servers¶
Solved bug in DynamicDS/Dev4Tango that didn’t allowed to move PLCValve in Tango<8 Added qt.ModelRefresher class for Taurus Added wildcards to tango_servers launcher Added fun.dict2json method Added Test modules methods
11.13 Solved bugs in Tango9, Added CopyCatDS/WorkerDS devices¶
Bugs solved in WorkerDS launcher and regexp parsing.
11.12 Solved bugs in Tango9, Added CopyCatDS/WorkerDS devices¶
Added WorkerDS, added DynamicDS launchers Solved bug with fakeAttributeValue.type Solved bug with put_device_property in Tango9 Disabled check_polled_attributes in running devices (caused crashes) Added DynamicDS.StartupDelay DynamicDS runs on specific port using ORBEndPoint property
11.10 fandango.sh command line¶
Added fandango.sh command line executor Several improvements in command line arguments management Added files for autodocumentation Solved bugs in scripts that caused sphinx to trigger script execution Several enhancements in tango.py to improve .json file generation TangoEval!!: Now regexps are exported as members of the TangoEval class
February 2016 - 11.9 Compact dynamic attributes with VAR/GET/SET. Bug patches.¶
dynamic: added locals() method; solved dyn_comms bug at startup dynamic: added VAR(WRITE=WRITE), GET, SET keywords to simplify attribute declaration dynamic: solved issues with is_attribute_allowed in subclasses dynamic: ForceVar enabled to allow single-command read-write attributes device: device module refactored as subpackage log: refactored to be usable as any-time logger functional: added html2text, rtf2plain functional: added regexp boolean argument to matchMap and replaceCl methods qt: Added MenuContexted widget decorator and TangoHostChooser utility for bash scripts tango: solved bug in multi-host support in get_matching_devices and get_matching_attributes tango: solved bug that didn’t allowed ip addresses in tango hosts. threads: added locals method to WorkerThread (needed by WorkerDS) dicts: CaselessDefaultDict: solved missing key exception objects: added bound-class wrapper hook, still not usable excepts: Solved bug with Catched2 being deprecated
November 2015 - 11.7 Drag/Drop/Pickle devices from anywhere¶
fun: added bool2int([bool]) method fun: Added ifThen(condition,callable) to allow conditioned execution of methods excepts: trial method enhanced to return default values tango: solved bug in TangoEval that caused exception on parsing None types tango: solved bug in get_tango_host that caused weird eval values on Panic and Tango9 tango: Enabled regexp in get_matching_device_properties tango: added try/catch to get_tango_host tango: added export_to_dict methods for pickling tango devices doc: added methods for sphinx autodocumenting servers: Helper methods (load_from*) now return the Astor object itself dynamic: added functional conversion methods to locals(), DynamicDS renamed to DynamicServer QT: Added Qt Decorators for DoubleClickable/Dragable/Dropable widgets qt: added GetFramedTaurusValue, QWidgetWithLayout to allow TaurusValue integration on QTableOnWidget qt: QTableOnWidget now is search/filter enabled (beta) qt.Draggable: added mimetype argument to setDragEventCallback
August 2015 - 11.6 New QEvaluator tool for debugging PyQt¶
dynamic: added getDynamicConfig to have external access to the current DynamicAttributes engine configuration dynamic: first step for quality/timestamp forwarding on attributes (under test, DevLong only) dynamic: solved bug on parsing CORBA endpoint on sys args dynamic: changed order of local variables initialization on init() functional: evalX, get/import module refactored to be usable from QEvaluator objects: Struct upgraded to be more dict-alike and callable qt: ApiBrowser upgraded to QEvaluator, to be used for PyQt debugging qt: added QTableOnWidget qt: QWorker modified to be usable from sqlite tango: added read_attribute alias to check_attribute(brief=True)
July 2015 - 11.5 Improvements for 64 bits support and simulations¶
dynamic: Added image attributes and SCALAR,SPECTRUM,IMAGE keywords for conversion dynamic: Added argument data types in commands (using SCALAR(int,ARGs) or SPECTRUM(bool,ARGS)) dynamic: Added castDynamicType method dynamic: enabled @COPY and @FILE extensions to DynamicCommands syntax. dynamic: Added 64 bits types support. dynamic: Solved bug on VALUE parsing on attribute reading. dynamic: Solved bug with Spectrum attributes in tango8
arrays: array methods from PyTangoArchiving.reader: correlate_values, values2text, choose_*_value tango: Added property extensions (COPY/FILE) to fill properties with external values. tango: @COPY:device or @FILE:filename.txt; To enable it, file methods have been changed to static methods. tango: Added 64 bits support as python long. tango: Solved bugs on tango_host parsing. server: Solved bug on getting executable names qt: Solved bug in QExceptionMessage, added QDropable meta class functional: Added retry(callable) method interface/CopyCatDS: added retries on attribute list querying (sometimes fails due to locks)
April 2015 - 11.4 Bugs solved for better simulations¶
debug: timeit method added functional: anyone bug solved qt: Solved bug on QGridLayout dynamic: Added MATCH and DELAY keywords to formulas CopyCatDS: import bug solved, without this fix the Gateway devices do not start! interface: Added DeviceClassInheritance decorator dynamic: solved case bug on evaluating variables #<<<< ADD TO TESTING functional: Add NaN, isNaN, isFalse methods, solved bug in END_OF_TIME qt: added ApiBrowser widget tango: enabled fake CacheAttributeProxy on TangoEval read attribute
January 2015 - 11.3 New DynamicServer,CopyCatDS classes, interface submodule refactored, Taurus/PyTango independent, needed for PyTangoArchiving.widget>5.2 and PyTango>8.1¶
arrays:Solved exceptions in filter_array dbs:Added default_cursor to FriendlyDB creator (to avoid conflicts between Cursor/SSCursor), fetchall replaced by sequencial fetchone() dynamic:guppy,heapy added to locals() when PYMEMCHECK=True sendmail: added character cleanup tango: added device class to get_device_info dicts: removed unnecessary time imports functional: toRegexp replaced by toCl (careless and caseless extended expression) linos: check_process/kill_process methods added #Used by latest PyTangoArchiving.Reader threads: Solved bug in WorkerThread.process device:DDebug:fandango/resource/gc/guppy/heapy modules added to DDebug local path qt:Solved bug in QExceptionMessage
November 2014 - 11.2 needed for PyTangoArchiving>5.2 and PyTango>8.1¶
- Major Changes:
- dynamic: added DynamicServer main class to load new device classes on runtime dynamic: added parseStaticAttributes method to check subclasses functional: Added extended regexps (&,!) to all *chCl methods interface: moved to subdirectory to put there new device templates (Processor, CopyCat, Player/Recorder, Dev4Tango, DevChild, ...) interface: Added check on import fandango to remove deprecated files (if allowed by OS) interface: Added CopyCatDS (aka gateway/simulator/doppleganger) tango: get_database() bypassed to avoid BAD_INV corba crahes in Tango8 when using get/put_device_property within device servers. tango: added TGet and get_proxy helper methods (accept/return both devices and attributes, proxies and lists) test: added test sub module for continuous integration scripts: added tango_*py to manage/start/stop devices from shell using Astor/Starter
arrays: added notNone decimation, solved bug in maxmin dynamic: solved bug parsing DevFloat attributes excepts: PyTango independent, trial() adapted to return values functional: Added default arg to first,last methods functional: Solved bug in str2time to accept 0 as a valid time argument functional: Added WILDCARDS attribute as default argument to isRegexp functional: using negative timestamps as relative time from now linos: sendmail, added from argument linos: solved bug in sysargs_todict when returning a list instead of dict log: log exception management centralized in sendToStream() objects: Added methods: obj2dict, Struct.updateAttrsDict objects: Solved bug in BoundDecorator when calling as an unbound method qt: taurus independent qt: QWorker replaces TauEmitterThread qt: new getQwtPlot() method servers: Solved bug in ComposersDict.set_property
October 2014 - 11.1 needed for PyTangoArchiving>5.0 and PyTango>8.1¶
- Major Changes:
- dynamic: DynamicDS devices capable of use init() to reload dynamic attributes servers: ComposersDict updated to PyTango>8 TangoEval: Added DEVICES dict and DEV command to access device proxies from formulas
dicts: fixed bug when keys are QStrings instead of python strings arrays: bug in calcullating range from float instead of int dynamic: added LoadFromFile property and load_from_file command to be able to load attribute lists from files log: bugs in logging when using last pytango releases device: Dev4Tango polling thread exception replaced by error message objects: loadModule method improved to search by module name instead of path
July 2014 - 11.00, needed by PyTangoArchiving 5.0¶
- Major Changes (needed by PyTangoArchiving 5.0 and ArchivingBrowser widget):
- arrays: tested and documented decimation methods, filter_array is the best of them arrays: filter_array, improved comparison methods db: enabled tuples and dictionaries as row types on returned queries; bug solved in Select() interface: added getDeviceClassObjects and addAllClasses methods to append dynamically new classes to serversobjects: added Decorator and BoundDecorator classes to manage class-bound decoration qt: Added getQt, QConfirmAction decorator, DialogCloser connector and QTextBuffer widget for logging tango: get_matching_devices; set fullname=False due to several bugs found in beamlines ... waiting for more conflicts to appear tango: get_matching_devices(fullname=False) by default #It solved the bugs in Vacca threads: Added SubProcess method to execute DB queries in a background process with timeout
functional: str2time: solved bug in RAW_TIME regexp functional: added str2bool and str2type (any) methods, added minutes as time units in str2time objects: Added items() method to Struct objects qt: Solved bugs in QDialogWidget, added Ok/Cancel buttons linos: sys_args_to_dict refactored, added MyMachine to get platform/machine information
May 2014 - 10.9¶
- Major Changes:
- dynamic: XATTR acceps tango_host:/... URL’s tango: added get_tango_host method and adapted fandango.tango.* to work in multiple hosts. tango: improved Delta and Cache management in TangoEval tango: added suport for defining FIND-alike macros in TangoEval
taurus enum dependency removed dynamic: #37002 Fake R/W attributes solved using if ‘WRITE’ in fun.re.split(‘[[(])]’,formula) to check for WRITE formulas. dynamic: it was causing the “Bool not iterable” bug when reading empty R/W spectrums (WRITE returned instead of []). servers: Waittime increased for start_servers servers: improved text reports qt: Added QDialogWidget and QOptionChosser dialogs log: printf to accept same arguments than print functional: Added evalF and testF to use evaluable strings as lambdas functional: str2time returning current time by default
November 2013 - 10.8¶
- Major Changes:
- Added DDebug device server to have “online debugging” on fandango devices. Logger: added use_tango as an option to use tango_stream instead of log_obj or print
Added keeptime argument to TangoEval Solved bug that caused long keeptimes on TangoEval attribute proxies ServersDict tuned for faster loading. Functional: solved bug in replaceCl that failed when using tuples for replacement Qt: Added DoubleClick hook to DropTextEdit widget
October 2013 - 10.7¶
Better DynamicAttribute conversion to strings Removed traces from arg parsing Added timestamp to log traces Solved bug in except2str
Threading still has a lot of problems, release pending to solve it
tango/device:: Removed pre-initalization of TangoDatabase object, use get_database() instead Solved bugs in get_matching_devices/attributes
September 2013 - 10.6¶
arrays: Added methods to get histograms tango: Solved bugs in TangoEval, get_Device() and read_internal_attribute threads: Solved bugs in WorkerProcess (needed by PyAlarm), added PAUSE() behavior to stop refreshing
August 2013 - 10.5¶
dynamic: added MemUsage attribute to get memory usage of devices dynamic: solved bug on parsing of boolean properties dynamic: modified DynamicDSClass.__new__ to force all DynamicDS properties and commands to be inherited dynamic: if UseTaurus property is not True neither taurus or events are used dynamic: enabled check_polled_attributes to use admin device and update polling periods from prepareDynDS method dynamic: when using XATTR read values will be cached KeepTime milliseconds. dynamic: solved bug on error event received
linos: get_memory() will return own process memory usage by default functional: Added filtersmart(sequence,filters=[‘any_filter’,’+all_filter’,’!neg_filter’])
tango: if use_tau argument is not True neither taurus or events are used tango: added CachedAttributeProxy with timed persistence of values, used by TangoEval instead of AttributeProxy tango: added proxy persistence to fakeAttributeValue, read_internal_attribute and get_device_property tango: added get_model_name method to extract models from tango/taurus objects
device: if use_tau argument is not True neither taurus or events are used device: modified name of admin DServer polling methods device: added exception triggering on polling thread fail
device: Solved a bug that considered DynamicDS methods always static (they are not in PyTango>7.2.2) tango: solved a bug on initialized TangoEval.source
July 2013 - 10.4¶
__init__: Release number moved to CHANGES file __init__: Modified to include methods from fandango.tango arrays: solved bug in decimator, added average/rms/max/diff/min methods functional: bugs solved in avg/rms methods, better isNone, added TIME_UNITS and RAW_TIME to parse amounts of time in str2time method. objects: added NewClass method to simplify new class creation on demand qt: Added QDropTextEdit that allows to drag-and-drop text from other widgets (like attribute labels) servers: ComposersDict functionality extended tango: TangoedValue and getTangoValue expand the functionality of TangoEval returned objects tango: TangoEval and other methods have now a use_tau argument to force them taurus-free if necessary. tango: TangoEval, bugs solved in FIND ; added CACHE and DEPTH macros and improved get_delta() method. tango: added get_device_property, get_domain, get_family, get_member methods
May 2013; 10.3¶
dynamic: logging, investigating issues with default-polled attributes arrays: added filter_array methods functional: added some methods like rms (root mean square) or floor tango: added default args to get_device_labels linos: new methods to send mail, get memory usage, folders and links
February 2012; 10.2¶
web: adding jqueryPlot generation (still in progress) init: loading of modules refactored arrays: decimate* methods enabled device/tango: TangoEval/TangoCommand moved from device to tango modules device: update_attributes thread refactored, Dev4Tango.events_error added tango.fakeAttributeValue: solved bug in set_date and added read/throw_exception methods tango: added read_internal_attribute/get_internal_devices methods read_internal_attributes: any class with read_dyn_attr method will be considered dynamic dynamic: solved bug when receiving config/error events tests: added pycheck for modules linos: solved bug in get_file_sizesolved bug in get_file_size linos: added methods to get memory usage in a machine tango: added get_server_pid method to be runable locally
December 2012 010.1
arrays: added decimate_custom / decimate_array methods functional: added reldiff,absdiff,seqdiff linos: enabled get_proces_pid to get pid of owner process dynamic:
- exceptions always kept for all attributes
- globals/locals removed from evalState and scope searching for memory leaks (although seems not related)
- max_peak/min_peak
log: added headers and persistence to FakeLogger qt: Added QSignalHook class to be used in taurusgui or other qt gui’s that need signal redirection.
November 2012 10.00
- dynamic:
- DynamicDS reimplements dev_state so NO LONGER ATTRIBUTE QUALITIES AFFECT STATE!
- You can override this behavior in child classes by setting useDynStates=False in the __init__ call
- tau dependency removed
- added push arg to set_state to enable/disable event pushing on purpose
- Bugs solved in DynamicDS.check_state return value
- Added DynamicAttribute.peak recording
- Solved bug when calling ATTR() to read an static attribute
device/dynamic: get_polled_attrs moved to tango module objects: Property replaced by NamedProperty to avoid ambiguity functional: added randpop(sequence) tango: removed taurus dependency for parse_tango_model device: Using taurus instead of tau device: dev_state() overriden to not have State() calls triggering read_attribute() for every attribute that has a quality config. device: lazy _state initialization to prevent bugs when subscribe_attributes is called too early in init_device() device: ComposersDict moved to servers module excepts: Added RethrownException call, to know in DynamicDS when an exception has been already catched
October 2012 9.11
device: TangoEval added cache and delta evaluation. tango: bug solved in get_devices_properties, methods for getting/setting alias, translate labes and alias, qt: added NullWidget, getApplication, QColorDictionary, objects: added load_module functional: added methods: randomize, djoin/isNested, replaceCl, toString/ToStringList dicts: added reversedict arrays: added dict2array,array2dict, tree2table methods
July 2012 - 9.10¶
- __init__::
- more tango.* methods available at fandango
- arrays::
- improved arguments names to avoid confussions
- device::
- TangoEval: storing exceptions as last_value
- functional::
- iPipe,iPiped and many | bash-pipes-like decorators/methods
- tango::
- bug solved in get_devices_properties
June 2012 - 9.9¶
.qt migrated to taurus .functional: bugs solved in anyone/everyone servers: tango_host argument added tango: added get_devices_properties to get properties in multiple hosts tango: re_tango expression modified to accept device names numeric only tango: reduced db load in get_matching_devices calls
May 2012 - 9.8¶
Tango: New bugs solved in FIND(), modified to not load database with constant queries. dynamic: ATTRIBUTES set as list CSV: arrays are iterable
May 2012 - 9.7¶
TangoEval: patched bug in FIND() functional: small bugs solved dynamic: problems with state/status generation solved dynamic: ATTRIBUTES added to _locals
April 2012 - 9.6¶
TangoEval: Attribute values overridable using eval(previous=...) argument, CRITICAL BUG SOLVED HERE! excepts.trial: Added args/kwargs to trial methods fun: setitem/getitem generic methods tango:added get_device_started method, find_devices/find_attributes added to fandango root, get_matching_device_attributes renamed to get_matching_attributes tango: get_device_commands/attributes methods added (with regexp filter)
April 2012 - 9.5¶
TangoEval: parsing split in parse_formula, parse_tag, parse_variables to make methods more reusable. Only eval() keeps cache, rest of methods do not keep data. Better management of locals using update_locals(dct). ComposersDict: added get/set_property methods WorkerProcess: Documentation+Better KeepAlive management
March 2012 - 9.4¶
device: _locals dictionary persistent always, even if new _locals is passed by argument functional: added methods to convert between text and lists of strings bugs solved in TangoEval and except2str methods, the latest caused problems in PyAlarm. dynamic: dynamic: added LogLevel parsing dynamic: added DynamicCommands for any Tango type dynamic: added WPROPERTY
March 2012 - 9.3¶
device: limited traces in TangoEval, _locals dictionary is now persistent log: added except2str methods threads: added WorkerProcess, provides WorkerThread+evalX+Process+ThreadDict functionality. objects: Added dirModule/dirClasses methods
Jan 2012 - 9.2¶
device: ProxiesDict class moved to fandango.tango module to solve import issues device: ComposersDict class added to manage DynamicDS-like attributes device: Solved bug in PyTango>7.2.2 when reading DynamicDS attributes from Dev4Tango
December 2011 - 9.1¶
device: dependencies from Tau removed dynamic: solved bug when reading DynDS class properties tango: Improved methods for getting attribute labels, commands and parse tango-taurus models. arrays: better export from csv to dictionary functional:
- Added number conversion methods from PyPLC.
- Added evalX(dict/class/string) from WorkerThread
- Added str2time conversions from PyTangoArchiving.
- All functional methods exported to fandango
- threads:
- Added CallbackProcess from PyTangoArchiving.reader
- evalX method moved from WorkerThread to functional module
web: added list_to_ulist converter
November 2011 - 9.00 : LIMITED COMPATIBILITY WITH PREVIOUS RELEASES¶
Changes by Tiago: dynamic/objects/dicts: compatible with Tango 7.2.2. Staticmethod decorators removed from Dynamic calls as they are no longer needed; now any decorator has to be wrapped in order to be recognized. Single-line method declaration with decorators is no longer allowed (may affect DynamicCommands?). This change is no backwards compatible, so an “if PyTango.__version__ ...” has been added to enable/disable USE_STATIC_METHODS in fandango.dynamic module dynamic: get_DynDS_properties and __init__ refactored to load default values also for class properties and do a better parsing of property types. dynamic: improved logging and comments parsing in dyn_attr dynamic: locks added to check_state to avoid recursive calls from DynamicStates evaluation dynamic: added FILE(...) command to formulas to allow .csv file parsing device: bug solved when dictionaries in TangoEval are empty qt: patched an error in QCustomTabWidget qt: added DictToolBar and QGridTable classes servers: solved a bug in load_from_servers_list() method tango: added methods to manage attribute labels
October 2011 - 8.28¶
__init__: default imports reduced dynamic: Modified get_DynDS_properties to respect Default values assigned in subclasses dynamic: Using taurus instead of Tau for XAttr calls dynamic: set_state forces push_event(State) if UseEvents is enabled log: shortstr patched TangoEval: proxy timeout reduced to 2 seconds Qt: Added QCustomPushButton and QCustomTab classes for having extendend StackWidgets. qt: Added TauFakeEventReceiver class servers: removed Tau dependency
September 2011 - 8.27¶
Event configuration check refactored to allow trending of attributes tango: added methods for searching attribute in multiple hosts. dynamic: added full parsing of all attributes and LogLevel log: added .getLogLevel(alias=None) method dynamic: refactoring of getDynDS Properties and logging.
August 2011 - 8.26¶
tango: generic tango methods moved from fandango.device to fandango.tango module Dynamic: UseEvent property bug solved, added try/except in check_changed_event to prevent errors in read attribute with PyTango releases that does not support events. threads: added CronTab class to manage task schedule device: TangoEval.parse_variables modified to get devices not running when using FIND(...); parsing of $(_locals) added tango: now able to find devices in multiple hosts.
August 2011 - 8.25¶
dynamic:
static methods links for dyn_attr/read_dyn_attr/write_dyn_attr reviewed LOCALS added to _locals, TangoCommand with feedback added to COMM macro (getXCommand). Added UseEvents property and push_event triggered by attribute event config and/or XAttr calls. DynamicQualities improved and moved from read_dyn_attr to dyn_attr and evalAttr methods. Check_State machine improved to push events if State in UseEvents list.
device:
TangoCommand bugs solved to be usable with callables in DynamicDS.DynamicCommands added undo_property to restore old property values
linos:
added methods for copying and making diff of directories
July 2011 - 8.24¶
Changes in modules: init: device,web,threads modules added to all
callbacks:
All Event/Device management lists changed into protected AsynchronousFunction class moved to threads module
device:
able to switch between Tau and Taurus Dev4Tango capable of reading dynamic attributes from other devices within the same server. added TangoCommand class for managing Tango commands with feedback.
dynamic:
assigning default property values in DynamicDS init KeepAttributes, KeepTime, CheckDependencies refactored
log:
to avoid duplicity of traces with Tau logging the default output (logging or print) can be set using init(use_print=bool) argument. It is set as True by default.
objects:
Pool class moved to threads module
qt:
DoubleClickable decorator added TangoHostChooser added
threads:
SingletonWorker, Pool and AsynchronousFunction classes added
servers:
Added logger argument to ServersDict()
KeepTime / KeepAttributes / CheckDependencies properties¶
The values of dynamic attributes will be kept in dyn_values dictionary if KeepAttributes is equal to ‘*’, ‘yes’ or ‘true’; or if the attribute name appears in the property.
For each read_dyn_attr(Attribute) call the values will not be recalculated if interval between read_attribute calls is < KeepTime (1s by default).
ChekDependencies (True by default) will force a check of which attributes are accessed in other’s formulas, creating an index for each attribute with its pre-requisites for evaluation (which will be automatically assigned to be kept). At each read_dyn_attr execution the dependency values will be added to _locals, and a read_dyn_attr(dependency) may be forced if its values are older than KeepTime.
10th May 2011 - 8.23¶
device: cast_tango_type method added to parse tango types to python cast_tango_type method added to parse tango types to python dynamic: KeepTime property to DynamicDS, values will not be recalculated if interval between read_attribute calls is < KeepTime functional: added terminate argument to regexp-related methods qt: fireEvent renamed to handleEvent servers: solved bug when loading lists of patterns, improved get_device_server method to avoid timeouts with unexported devices dicts: solved bug in ThreadDict.__init__ (dict.update not called) dicts: ThreadsDict get/set_item methods now lock only during dict update, not while read/write_methods are called; it solves timeout issues dynamic: read_attr_hardware commented (unused), polling report format improved
17th March 2011 - 8.22¶
db: Added method to get table sizes dynamic: solved bug in updateDynamicAttributes dynamic: added KeptTime property to be used in read_dyn_attr: by default no re-evals will be faster than 1 second. fun: bug solved in time to date log: bug solved in setLogLevel
10th March 2011¶
Updates in device and servers modules to enable multi-host TangoEval calls. dynamic: Added DynamicSpectrumSize class property dynamic: improved search for dependencies and property parsing log: log levels case independent device: Bug solved in get_matching_device_attributes()
2nd March 2011¶
qt: added TauColorComponent classes objects: improved text representation of Structs linos: added get_cpu method fun: regular expression methods improved bug solved in @Catched decorator device: ProxiesDict now supports AttributeProxies device: TangoEval supports attributes from multiple hosts dynamic: get_DynDS_properties modified to be more efficient dynamic: regexp bug solved in DynamicDS.get_quality_for_attribute functional: bug solved in imports device: added more tango database methods
PyTango_utils 10 December 2010¶
dicts: added CaselessList dynamic: dependencies checked using regexps functional: added str casting in regular expression conversion; bug solved in isString method qt: added a ‘thinking’ cursor behaviour, added a .wait(sleep) to main thread in the run() method objects: added namedtuple
PyTango_utils 1st December 2010¶
dynamic: WATTR added for writing external attributes dynamic: Added XDEV=getXDevice to access DeviceProxies from dynamic attributes dynamic: evalAttr replaced by evalState inside evaluateFormula (no dependencies check, no Write access) dynamic: DynamicStatus property parsing added dynamic: Tango states added as eval variables
device: Dev4Tango update_attributes changed to be more efficient checking attributes from same server device: Added/improved methods to access Tango database
objects: Added Pool ; a class for managing queued-threaded tasks
PyTango_utils 9th November 2010¶
device: Added methods to access device info/host dynamic: Added property to disable dependencies check between attributes. functional: added isGenerator method ThreadDict improved
PyTango_utils bliss-8.15, 3rd november 2010¶
- timeout added to check_attribute
- DevChild kept as Dev4Tango alias
- poll period added as ThreadDict.append
PyTango_utils bliss-8.14, 18th october 2010¶
- device:
- Dev4Tango modified to be able to manage internal polling
- Fake attribute/event objects improved
- Added event-like access to internal device objects within a server and its attributes and commands
- DevChild class commented from the module as it will be replaced by Dev4Tango
- dicts/objects:
- self_locked decorator moved from dicts to objects module
- dynamic:
- self_locked decorator added to always_executed_hoot, read_dyn_attr and write_dyn_attr methods
- servers:
- bug solved in get_device_list method
PyTango_utils bliss-8.13, 13th october 2010¶
- servers:
- Start/Stop of servers improved, checking running status to ignore/kill processes if needed.
dynamic: * Added tau event subscription for XAttr * polling_report moved to its own method log: * bug solved in level aliases qt: * TauEmitter.next is now public * if self.method is None, methods are taken from queue
PyTango_utils bliss-8.12, 16 Sept 2010¶
arrays.py: Added offset argument to CSVArray creator device.py: Better parsing of get_matching_devices/get_all_devices arguments dynamic.py: Added DevState type to dynamic attributes dynamic.py: Added default argument to getXAttr to manage return types for exceptions and empty arrays functional.py: isSequence, toList, and join methods prepared to work with arrays and generators. linos.py: whole file refactored, added methods for getting PID and memory usage of processes using /proc/ servers.py: Now start/stop_servers w/out argument will start/stop all servers
PyTango_utils bliss-8.11, 7 Sept 2010¶
Changes on fandango modules:
- device: ProxiesDict and attribute search methods added to device
- dicts: SortedDict added in dicts
- dynamic: PYMEMCHECK var added to enable heapy debugging in DynamicDS classes
- except: trial(...) added for lambdable try...except
- linos: timeout added to ping commands
- log: filtering ‘r’ characters in logs
- objects: tuple lists added as Struct argument
- servers: methods for attribute/device matching moved to device module.
- web: added color tags
“”“