From a19408fac8db9399fdbed7d3ced6f454cada94f8 Mon Sep 17 00:00:00 2001 From: Joel Bender Date: Thu, 13 Aug 2015 15:19:25 -0400 Subject: [PATCH] update to remove references to Trello and SourceForge, add some (not very detailed) release notes --- doc/source/index.rst | 15 +- doc/source/releasenotes.rst | 1357 ++++++++++++++++++----------------- 2 files changed, 694 insertions(+), 678 deletions(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index 44b9371..ed7896a 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -9,28 +9,21 @@ is easy, just:: $ sudo easy_install bacpypes You will be installing the latest released version. You can also check out -the latest version from SourceForge:: +the latest version from GitHub:: - $ svn checkout https://svn.code.sf.net/p/bacpypes/code/trunk bacpypes + $ git clone https://github.com/JoelBender/bacpypes.git And then use the setup utility to install it:: - $ cd bacpypes/trunk/ + $ cd bacpypes $ python setup.py install If you would like to participate in its development, please join the -`developers mailing list `_ -and use the `Trac `_ to create -tickets and monitor the project development. There is also a +`developers mailing list `_. There is also a `Google+ `_ page that you can add to your circles have have release notifications show up in your stream. -For an overview of the current project activity, there is a -`Trello `_ board, -feel free to become a member and share what you are doing with the -rest of the BACpypes community. - Welcome aboard! Getting Started diff --git a/doc/source/releasenotes.rst b/doc/source/releasenotes.rst index b2e76d6..465caea 100644 --- a/doc/source/releasenotes.rst +++ b/doc/source/releasenotes.rst @@ -1,667 +1,690 @@ -.. BACpypes release notes - -Release Notes -============= - -This page contains release notes. - -Version 0.12.1 --------------- - -* Add backup-in-progress to the Device Status enumeration - `r331 `_ - -* Correct the restoreFailure in BackupState - `r332 `_ - -* Check for read-only object when writing to a file - `r333 `_ - -* Wrong initial value for no segmentation (old enumeration syntax) - `r334 `_ - -* Wrong parameter - `r335 `_ - -* Missed variable name change - `r336 `_ - -* Mask errors writing the history file like they are when reading - `r337 `_ - -* Make sure that the vendor identifier is provided, and that localDate and - localTime are not - `r338 `_ - -* Add simple string parsing to Date and Time - `r339 `_ - -* Bump the version number, provide more focused classifiers, include release - notes - `r340 `_ - -Version 0.12.0 --------------- - -* Switch from distutils to setuptools to build a wheel - `r323 `_ - -* Updated to use twine to upload after building both an egg and a wheel - `r324 `_ - -* ReallyLongCamelCaseTypo - `r325 `_ - -* The pieces inside the AtomicReadFileACK should not have been context encoded, - but the choice is context encoded - `r326 `_ - -* Additional properties and object types to get closer to 2012 edition - `r327 `_ - -* Additional properties and enumerations - `r328 `_ - -* Replace 'except X, T:' with 'except X as T:' for more modern code - `r329 `_ - -* Bump the version number and include release notes this time - `r330 `_ - -Version 0.11.0 --------------- - -* Merge the 0.10.6 release - `r311 `_ - -* Examples of a RecurringTask and using that to read property values. - `r312 `_ - -* Minor documentation update, adding --color option - `r313 `_ - -* IP-to-IP router sample - `r314 `_ - -* Additional helper application for decoding UDP packet contents in hex - `r315 `_ - -* The 'description' property is optional, by giving it a default value it was - always being created. - `r316 `_ - -* Spelling typo - `r317 `_ - -* Missing enumerations - `r318 `_ - -* WhatIsNetworkNumber and NetworkNumberIs decoding (no other support yet) - `r319 `_ - -* typo - `r320 `_ - -* reStructured text version of readme - `r321 `_ - -* Bump the version number - `r322 `_ - -Version 0.10.6 --------------- - -* Release notes from previous version. - `r304 `_ - -* The accessCredential object type was missing. - `r305 `_ - -* Incorrect number of formatting parameters to match actual parameters, only - appeared as warnings during debugging, but is definitely annoying. - `r306 `_ - -* New ReadRange sample code to assist with a developer question, keep them - coming! - `r307 `_ - -* The ClientCOV components are not supposed to be context encoded. - `r308 `_ - -* A change to make sure that an array property isn't None (uninitialized) before - attempting to index into it. - `r309 `_ - -* Bump the version number and update these release notes. - `r310 `_ - -Version 0.10.5 --------------- - -* Bill Roberts submitted a patch to clean up an old underscore, and I missed - the edit earlier. Thanks Bill! - `r302 `_ - -* Bump the version number, release notes to come later. - `r303 `_ - -Version 0.10.4 --------------- - -This version contains bug fixes. - -* Some BACneteer had an issue with MultiState Value Objects so I added some - sample code to present one of these on the network so I could check to make - sure the encoding/decoding of property values was working correctly. - - There was an issue with constructed data with elements that were arrays, - the elements should have had Python list semantics rather than BACnet array - semantics, so there is some additional checking for this in the - decoding. - `r282 `_ - -* A branch was created for dealing with unicode strings rather than the default - string encoding. No final decision has been made on this issue, I need more - experience. - `r283 `_ - `r284 `_ - `r285 `_ - `r286 `_ - `r287 `_ - `r289 `_ - `r290 `_ - `r291 `_ - `r292 `_ - -* Delete an unecessary import (a.k.a., "flake"). - `r288 `_ - -* Handle the various combinations of present/missing values for the object - identifier and object list keyword arguments to the device object better. - `r293 `_ - -* The Random Analog Value Object sample code used the object identifier keyword - argument in a non-standard way, and I thought this fixed it, but it seems to - have re-introduced some debugging code as well. This needs investigation. - `r294 `_ - -* For sequences that specify "any atomic value" which is application encoded, - the constructed data decoder presents those values as instances of one - of the subclasses of Atomic rather that presenting them as Any which needs - more work decoding for the BACpypes developer. - `r295 `_ - -* This patch takes advantage of the r295 and applies it to the Schedule Object - and the TimeValue, used in SpecialEvent, used in the exception Schedule. - `r296 `_ - -* In the Read Property sample code, if the value has a debug_contents API - then it is called and this gives a little bit more detailed output. - `r297 `_ - -* New Schedule Object sample code. - `r298 `_ - -* The fileIdentifier parameter of the Atomic Read/Write File services is - application encoded, not context encoded. - `r299 `_ - -* Bill Roberts submitted some patches to clean up element encoding errors, - thank you Bill! - `r300 `_ - -* Bump the version number and release. Notes to be committed later. - `r301 `_ - -Version 0.10.3 --------------- - -This version contains some enhancements and bug fixes. - -* Sangeeth Saravanaraj submitted an enchancement that allows the ConsoleCmd class - to accept stdin and stdout parameters and replaces the print statements with - self.stdout.write calls. Thank you! - `r276 `_ - -* This is a new filter that looks for Who-Is and I-Am messages related to a specific - device instance number in a pcap file. - `r277 `_ - -* This minor enhancement allows longs in the object type for an object identifier - ``__init__`` parameter rather than just ints. - `r278 `_ - -* Application service access point encode and decoding errors bail out of the effort - rather than raising an error. There is a very long running application that I have - that would decode an APDU incorrectly every once in a great while, but it was very - difficult to track down. I think this was actually field device that was adding - additional cruft on the end of a packet and BACpypes would raise an error. I need - the stack to toss these errant PDUs out as if they never happened. - It would be nice if there was a logging hook that developers could use to track - when this happens. - `r279 `_ - -* This is a pair of sample applications for proprietary object types and proprietary - properties to demonstrate how to extend the core types. - `r280 `_ - -* Bump the version number and update these release notes. - `r281 `_ - -Version 0.10.2 --------------- - -This version contains bug fixes. - -* The invokeID for outbound client requests must be unique per server, but can be - the same value for different servers. I had solved this problem once before in the - sample HTTP server code, but didn't migrate the code into the core library. At - some point there was some other code that couldn't generate more than 255 requests, so - this never got tested. Other BACneteers are more aggressive! - `r272 `_ - -* The segment count of a confirmed ack is at least one, even if there is no PDU data. - This was solved on the client side (in the client segmentation state machine for seeing - if requests needed to be segmented on the way out) but not on the server side. This - fixes that bug. - `r273 `_ - -* The ReadPropertyMultipleServer code would see that an object didn't exist and build an - error response, which was oblitered by the default code at the bottom of the loop so - it was never returned. Now if any of the read access specifications refers to an object - that doesn't exist the request will correctly return an error. - `r274 `_ - -* Bump the version number and update these release notes. - `r275 `_ - -Version 0.10.1 --------------- - -This version contains more contributions that should have been included in the previous -release, but I updated the library in a different order than the mailing list. Sigh. - -* The library did not return the correct error for writing to immutable properties. - `r269 `_ - -* The lowerCamelCase for CharacterStringValue objects was incorrect and didn't match - the enumeration value. - `r270 `_ - -* Bump the version number and update these release notes. - `r271 `_ - -Version 0.10 ------------- - -This version contains updates courtesy of contributions from other BACpypes users, of whom -I am grateful! - -* The consolelogging module ConfigArgumentParser inherits from the built-in ArgumentParser - class, but the parse_args didn't have the same function signature. - `r264 `_ - -* The MultipleReadProperty new sample application has a list of points and it shows how - to put those points into a queue so each one of them can be read sequentially. - `r265 `_ - -* The Read Access and Stream Access choices in the atomic file services were backwards, - stream access is choice zero (0) and record access is one (1). - `r266 `_ - -* In the process of confirming that the file access services were in fact wrong, I decided - to update the sample applications and give them better names. - `r267 `_ - -* Bump the version number and update these release notes. - `r268 `_ - -Version 0.9.5 -------------- - -I have been working more on converting PDU's into JSON content that can be archived and searched in -MongoDB. - -* Simple bug, while I was updated in the ``__init__`` calling chain I got the class name wrong. - `r260 `_ - -* When there is network layer traffic on a port that is not the "local port" it still needs to be - processed by the local ``NetworkServiceElement``. And trying to debug this problem, there was - no debugger for the NSE! - `r261 `_ - -* As I have been shuffling around JSON-like content in various applications it became harder and - harder to manage if the result of calling ``dict_content`` was going to return PCI layer information - (the NPCI, APCI, or BVLCI), or the "data" portion of the packet. I also took the opportunity to - use simpler names. - `r262 `_ - -* Bump the version number and update these release notes. - `r263 `_ - -Version 0.9.4 -------------- - -This revision is an annouced release. The combination of `r258 `_ -and `r256 `_ makes this important to get out -to the community sooner rather than later. - -* The ``TimeSynchronizationRequest`` application layer PDUs have their ``time`` parameter - application encoded, not context encoded. - `r258 `_ - -* Bump the version number and update these release notes. - `r259 `_ - -Version 0.9.3 -------------- - -This release just has some minor bug fixes, but in order to get a large collection of -applications running quickly it was simpler to make minor release and install it on -other machines. The version was release to PyPI but never annouced. - -Revisions `r255 `_ -through `r257 `_. - -* A simple copy/paste error from some other sample code. - `r255 `_ - -* When shuffling data around to other applications and databases (like MongoDB) there - are problems with raw string data, a.k.a., octet strings, or in Python3 terms byte - strings. This is a simple mechanism to make hex strings out of the data portion of - tag data. This is subject to change to some other format as we get more experience - with data in other applications. - `r256 `_ - -* Remove the "flakes" (modules that were imported but not used). - `r257 `_ - -Version 0.9.2 -------------- - -Apart from the usual bug fixes and small new features, this release changes -almost all of the ``__init__`` functions to use ``super()`` rather than -calling the parent class initializer. - -New School Initialization -~~~~~~~~~~~~~~~~~~~~~~~~~ - -For example, while the old code did -this:: - - class Foo(Bar): - - def __init__(self): - Bar.__init__(self) - self.foo = 12 - -New the code does this:: - - class Foo(Bar): - - def __init__(self, *args, **kwargs): - super(Foo, self).__init__(*args, **kwargs) - self.foo = 12 - -If you draw an inheritance tree starting with ``PDUData`` at the top and -ending with something like ``ReadPropertyRequest`` at the bottom, you will -see lots of branching and merging. Calling the parent class directly may -lead to the same base class being "initialized" more than once which was -causing all kinds of havoc. - -Simply replacing the one with the new wasn't quite good enough however, -because it could lead to a situation where a keyword arguement needed to be -"consumed" if it existed because it didn't make sense for the parent class -or any of its parents. In many cases this works:: - - class Foo(Bar): - - def __init__(self, foo_arg=None, *args, **kwargs): - super(Foo, self).__init__(*args, **kwargs) - self.foo = 12 - -When the parent class initializer gets called the ``foo_arg`` will be a -regular parameter and won't be in the ``kwargs`` that get passed up the -inheritance tree. However, with ``Sequence`` and ``Choice`` there is -no knowledge of what the keyword parameters are going to be without going -through the associated element lists. So those two classes go to great -lengths to divide the kwargs into "mine" and "other". - -New User Data PDU Attribute -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -I have been working on a fairly complicated application that is a combination -of being a BBMD on multiple networks and router between them. The twist is -that there are rules that govern what segments of the networks can see each -other. To manage this, there needed to be a way to attach an object at the bottom -of the stack when a PDU is received and make sure that context information -is maintained all the way up through the stack to the application layer and -then back down again. - -To accomplish this there is a ``pduUserData`` attribute you can set and as -long as the stack is dealing with that PDU or the derived encoded/decoded -PDUs, that reference is maintained. - -Revisions `r246 `_ -through `r254 `_. - -* The sample HTTP server was using the old syle argument parser - and the old version didn't have the options leading to confusion. - `r246 `_ - -* Set the 'reuse' flag for broadcast sockets. A BACneteer has - a workstation with two physical adapters connected to the same - LAN with different IP addresses assigned for each one. Two - BACpypes applications were attempting to bind to the same - broadcast address, this allows that scenerio to work. - `r247 `_ - -* Fix the help string and add a little more error checking to the - ReadPropertyMultiple.py sample application. - `r248 `_ - -* Add the --color option to debugging. This wraps the output of the - LoggingFormatter with ANSI CSI escape codes so the output from - different log handlers is output in different colors. When - debugging is turned on for many modules it helps! - `r249 `_ - -* The WriteProperty method now has a ''direct'' parameter, this - fixes the function signatures of the sample applications to include - it. - `r250 `_ - -* Change the ``__init__`` functions to use ``super()``, see explanation - above. - `r251 `_ - -* Bump the minor version number. - `r252 `_ - -* Update the getting started document to include the new color debugging - option. There should be more explanation of what that means exactly, - along with a link to the Wikipedia color code tables. - `r253 `_ - -* Update these release notes. - `r254 `_ - -Version 0.9.1 -------------- - -Most of this release is just documentation, but it includes some new functionality -for translating PDUs into dictionaries. The new ``dict_contents`` functions will -most likely have some bugs, so consider that API unstable. - -Revisions `r238 `_ -through `r245 `_. - -* For some new users of BACpypes, particularly those that were also new to BACnet, - it can be a struggle getting something to work. This is the start of a new - documentation section to speed that process along. - `r238 `_ - `r239 `_ - `r240 `_ - -* For multithreaded applications it is sometimes handly to override the default - spin value, which is the maximum amount of time that the application should - be stuck in the asyncore.loop() function. The developer could import the - core module and change the CORE value before calling run(), but that seems - excessively hackish. - `r241 `_ - -* Apparently there should not be a dependancy on ``setuptools`` for developers that - want to install the library without it. In revision `r227 `_ - I changed the setup.py file, but that broke the release script. I'm not - completely sure this is correct, but it seems to work. - `r242 `_ - -* This revision includes a new dict_contents() function that encodes PDU content - into a dict-like object (a real ``dict`` by default, but the developer can provide - any other class that supports ``__setitem__``). This is the first step in a long - road to translate PDU data into JSON, then into BSON to be streamed into a - MongoDB database for analysis applications. - `r243 `_ - -* Bump the version number before releasing it. - `r244 `_ - -* Update these release notes. - `r245 `_ - -Version 0.9 ------------ - -There are a number of significant changes in BACpypes in this release, some of which -may break existing code so it is getting a minor release number. While this project -is getting inexorably closer to a 1.0 release, we're not there yet. - -The biggest change is the addition of a set of derived classes of ``Property`` that -match the names of the way properties are described in the standard; ``OptionalProperty``, -``ReadableProperty``, and ``WritableProperty``. This takes over from the awkward and -difficult-to-maintain combinations of ``optional`` and ``mutable`` constructor parameters. -I went through the standard again and matched the class name with the object definition -and it is much cleaner. - -This change was brought about by working on the `BACowl `_ -project where I wanted the generated ontology to more closely match the content of the -standard. This is the first instance where I've used the ontology design to change -application code. - -Revisions `r227 `_ -through `r234 `_. - -* At some point ``setuptools`` was replaced with ``distutils`` and this needed to change - while I was getting the code working on Windows. - `r227 `_ - -* Added the new property classes and renamed the existing ``Property`` class instances. - There are object types that are not complete (not every object type has every property - defined) and these will be cleaned up and added in a minor release in the near future. - `r228 `_ - -* The UDP module had some print statements and a traceback call that sent content to stdout, - errors should go to stderr. - `r229 `_ - -* With the new property classes there needed to be a simpler and cleaner way managing the - __init__ keyword parameters for a ``LocalDeviceObject``. During testing I had created - objects with no name or object identifier and it seemed like some error checking was - warrented, so that was added to ``add_object`` and ``delete_object``. - `r230 `_ - -* This commit is the first pass at changing the way object classes are registered. There - is now a new ``vendor_id`` parameter so that derived classes of a standard object can be - registered. For example, if vendor Snork has a custom SnorkAnalogInputObject class (derived - from ``AnalogInputObject`` of course) then both classes can be registered. - - The ``get_object_class`` has a cooresponding ``vendor_id`` parameter, so if a client - application is looking for the appropriate class, pass the ``vendorIdentifier`` property - value from the deivce object of the server and if there isn't a specific one defined, the - standard class will be returned. - - The new and improved registration function would be a lot nicer as a decorator, but optional - named parameters make and interesting twist. So depending on the combination of parameters - it returns a decorator, which is an interesting twist on recursion. - - At some point there will be a tutorial covering just this functionality, and before this - project hits version 1.0, there will be a similar mechanism for vendor defined enumerations, - especially ``PropertyIdentifier``, and this will also follow the BACowl ontology conventions. - - This commit also includes a few minor changes like changing the name ``klass`` to the - not-so-cute ``cls``, ``property`` to ``propid`` because the former is a reserved word, and - the dictionary of registered objects from ``object_types`` to ``registered_object_types``. - `r231 `_ - -* Simple wrapping of the command line argument interpretation for a sample application. - `r232 `_ - -* The ``CommandableMixin`` isn't appropriate for ``BinaryValueObject`` type, so I replaced it - with a ``DateValueObject``. - `r233 `_ - -* I managed to install Sphinx on my Windows laptop and this just added a build script to make - it easier to put in these release notes. - `r235 `_ - -* This adds the relaease notes page and a link to it for documentation, committed so I could - continue working on it from a variety of different places. I usually wouldn't make a commit just - for this unless I was working in a branch, but because I'm working in the trunk rather than - using a service like DropBox I decided to let myself get away with it. - `r234 `_ - `r236 `_ - -* Committed the final version of these notes and bumped the minor version number. - `r237 `_ - -Version 0.8 ------------ - -Placeholder for 0.8 release notes. - -Revisions `r224 `_ -through `r226 `_. - -* Placeholder for comments about revision 224. - `r224 `_ - -* Placeholder for comments about revision 225. - `r225 `_ - -* Bump the minor version number. - `r226 `_ - -Version 0.7.5 -------------- - -Placeholder for 0.8 release notes. - -Revisions `r217 `_ -through `r223 `_. - -* Placeholder for comments about revision 217. - `r217 `_ - -* Placeholder for comments about revision 218. - `r218 `_ - -* Placeholder for comments about revision 219. - `r219 `_ - -* Placeholder for comments about revision 220. - `r220 `_ - -* Placeholder for comments about revision 221. - `r221 `_ - -* Placeholder for comments about revision 222. - `r222 `_ - -* Bump the patch version number. - `r223 `_ - -Version 0.7.4 -------------- - -Lost to the sands of time. - +.. BACpypes release notes + +Release Notes +============= + +This page contains release notes. + +Version 0.13.0 +-------------- + +This is a big release, with no API changes since the 0.12.1 version, but the +setup now detects which version of Python is running and switches between +source directories: *py25*, *py27*, and *py34*. + +There is now a *test* directory, so in addition to the *build* and *install* +options there is *test*, which uses +`nose `_ for running the scripts:: + + $ python setup.py test + +If you have more than one version of Python installed on your machine you can +use `tox `_ to run the tests will all of the +supported versions (currently limited to Python2.7 and Python3.4 due to +substantial changes in unittest):: + + $ tox + +At some point there will be a documentation page that decribes the changes +between the distributions, as well as a guide for new applications. + +Version 0.12.1 +-------------- + +* Add backup-in-progress to the Device Status enumeration + `r331 `_ + +* Correct the restoreFailure in BackupState + `r332 `_ + +* Check for read-only object when writing to a file + `r333 `_ + +* Wrong initial value for no segmentation (old enumeration syntax) + `r334 `_ + +* Wrong parameter + `r335 `_ + +* Missed variable name change + `r336 `_ + +* Mask errors writing the history file like they are when reading + `r337 `_ + +* Make sure that the vendor identifier is provided, and that localDate and + localTime are not + `r338 `_ + +* Add simple string parsing to Date and Time + `r339 `_ + +* Bump the version number, provide more focused classifiers, include release + notes + `r340 `_ + +Version 0.12.0 +-------------- + +* Switch from distutils to setuptools to build a wheel + `r323 `_ + +* Updated to use twine to upload after building both an egg and a wheel + `r324 `_ + +* ReallyLongCamelCaseTypo + `r325 `_ + +* The pieces inside the AtomicReadFileACK should not have been context encoded, + but the choice is context encoded + `r326 `_ + +* Additional properties and object types to get closer to 2012 edition + `r327 `_ + +* Additional properties and enumerations + `r328 `_ + +* Replace 'except X, T:' with 'except X as T:' for more modern code + `r329 `_ + +* Bump the version number and include release notes this time + `r330 `_ + +Version 0.11.0 +-------------- + +* Merge the 0.10.6 release + `r311 `_ + +* Examples of a RecurringTask and using that to read property values. + `r312 `_ + +* Minor documentation update, adding --color option + `r313 `_ + +* IP-to-IP router sample + `r314 `_ + +* Additional helper application for decoding UDP packet contents in hex + `r315 `_ + +* The 'description' property is optional, by giving it a default value it was + always being created. + `r316 `_ + +* Spelling typo + `r317 `_ + +* Missing enumerations + `r318 `_ + +* WhatIsNetworkNumber and NetworkNumberIs decoding (no other support yet) + `r319 `_ + +* typo + `r320 `_ + +* reStructured text version of readme + `r321 `_ + +* Bump the version number + `r322 `_ + +Version 0.10.6 +-------------- + +* Release notes from previous version. + `r304 `_ + +* The accessCredential object type was missing. + `r305 `_ + +* Incorrect number of formatting parameters to match actual parameters, only + appeared as warnings during debugging, but is definitely annoying. + `r306 `_ + +* New ReadRange sample code to assist with a developer question, keep them + coming! + `r307 `_ + +* The ClientCOV components are not supposed to be context encoded. + `r308 `_ + +* A change to make sure that an array property isn't None (uninitialized) before + attempting to index into it. + `r309 `_ + +* Bump the version number and update these release notes. + `r310 `_ + +Version 0.10.5 +-------------- + +* Bill Roberts submitted a patch to clean up an old underscore, and I missed + the edit earlier. Thanks Bill! + `r302 `_ + +* Bump the version number, release notes to come later. + `r303 `_ + +Version 0.10.4 +-------------- + +This version contains bug fixes. + +* Some BACneteer had an issue with MultiState Value Objects so I added some + sample code to present one of these on the network so I could check to make + sure the encoding/decoding of property values was working correctly. + + There was an issue with constructed data with elements that were arrays, + the elements should have had Python list semantics rather than BACnet array + semantics, so there is some additional checking for this in the + decoding. + `r282 `_ + +* A branch was created for dealing with unicode strings rather than the default + string encoding. No final decision has been made on this issue, I need more + experience. + `r283 `_ + `r284 `_ + `r285 `_ + `r286 `_ + `r287 `_ + `r289 `_ + `r290 `_ + `r291 `_ + `r292 `_ + +* Delete an unecessary import (a.k.a., "flake"). + `r288 `_ + +* Handle the various combinations of present/missing values for the object + identifier and object list keyword arguments to the device object better. + `r293 `_ + +* The Random Analog Value Object sample code used the object identifier keyword + argument in a non-standard way, and I thought this fixed it, but it seems to + have re-introduced some debugging code as well. This needs investigation. + `r294 `_ + +* For sequences that specify "any atomic value" which is application encoded, + the constructed data decoder presents those values as instances of one + of the subclasses of Atomic rather that presenting them as Any which needs + more work decoding for the BACpypes developer. + `r295 `_ + +* This patch takes advantage of the r295 and applies it to the Schedule Object + and the TimeValue, used in SpecialEvent, used in the exception Schedule. + `r296 `_ + +* In the Read Property sample code, if the value has a debug_contents API + then it is called and this gives a little bit more detailed output. + `r297 `_ + +* New Schedule Object sample code. + `r298 `_ + +* The fileIdentifier parameter of the Atomic Read/Write File services is + application encoded, not context encoded. + `r299 `_ + +* Bill Roberts submitted some patches to clean up element encoding errors, + thank you Bill! + `r300 `_ + +* Bump the version number and release. Notes to be committed later. + `r301 `_ + +Version 0.10.3 +-------------- + +This version contains some enhancements and bug fixes. + +* Sangeeth Saravanaraj submitted an enchancement that allows the ConsoleCmd class + to accept stdin and stdout parameters and replaces the print statements with + self.stdout.write calls. Thank you! + `r276 `_ + +* This is a new filter that looks for Who-Is and I-Am messages related to a specific + device instance number in a pcap file. + `r277 `_ + +* This minor enhancement allows longs in the object type for an object identifier + ``__init__`` parameter rather than just ints. + `r278 `_ + +* Application service access point encode and decoding errors bail out of the effort + rather than raising an error. There is a very long running application that I have + that would decode an APDU incorrectly every once in a great while, but it was very + difficult to track down. I think this was actually field device that was adding + additional cruft on the end of a packet and BACpypes would raise an error. I need + the stack to toss these errant PDUs out as if they never happened. + It would be nice if there was a logging hook that developers could use to track + when this happens. + `r279 `_ + +* This is a pair of sample applications for proprietary object types and proprietary + properties to demonstrate how to extend the core types. + `r280 `_ + +* Bump the version number and update these release notes. + `r281 `_ + +Version 0.10.2 +-------------- + +This version contains bug fixes. + +* The invokeID for outbound client requests must be unique per server, but can be + the same value for different servers. I had solved this problem once before in the + sample HTTP server code, but didn't migrate the code into the core library. At + some point there was some other code that couldn't generate more than 255 requests, so + this never got tested. Other BACneteers are more aggressive! + `r272 `_ + +* The segment count of a confirmed ack is at least one, even if there is no PDU data. + This was solved on the client side (in the client segmentation state machine for seeing + if requests needed to be segmented on the way out) but not on the server side. This + fixes that bug. + `r273 `_ + +* The ReadPropertyMultipleServer code would see that an object didn't exist and build an + error response, which was oblitered by the default code at the bottom of the loop so + it was never returned. Now if any of the read access specifications refers to an object + that doesn't exist the request will correctly return an error. + `r274 `_ + +* Bump the version number and update these release notes. + `r275 `_ + +Version 0.10.1 +-------------- + +This version contains more contributions that should have been included in the previous +release, but I updated the library in a different order than the mailing list. Sigh. + +* The library did not return the correct error for writing to immutable properties. + `r269 `_ + +* The lowerCamelCase for CharacterStringValue objects was incorrect and didn't match + the enumeration value. + `r270 `_ + +* Bump the version number and update these release notes. + `r271 `_ + +Version 0.10 +------------ + +This version contains updates courtesy of contributions from other BACpypes users, of whom +I am grateful! + +* The consolelogging module ConfigArgumentParser inherits from the built-in ArgumentParser + class, but the parse_args didn't have the same function signature. + `r264 `_ + +* The MultipleReadProperty new sample application has a list of points and it shows how + to put those points into a queue so each one of them can be read sequentially. + `r265 `_ + +* The Read Access and Stream Access choices in the atomic file services were backwards, + stream access is choice zero (0) and record access is one (1). + `r266 `_ + +* In the process of confirming that the file access services were in fact wrong, I decided + to update the sample applications and give them better names. + `r267 `_ + +* Bump the version number and update these release notes. + `r268 `_ + +Version 0.9.5 +------------- + +I have been working more on converting PDU's into JSON content that can be archived and searched in +MongoDB. + +* Simple bug, while I was updated in the ``__init__`` calling chain I got the class name wrong. + `r260 `_ + +* When there is network layer traffic on a port that is not the "local port" it still needs to be + processed by the local ``NetworkServiceElement``. And trying to debug this problem, there was + no debugger for the NSE! + `r261 `_ + +* As I have been shuffling around JSON-like content in various applications it became harder and + harder to manage if the result of calling ``dict_content`` was going to return PCI layer information + (the NPCI, APCI, or BVLCI), or the "data" portion of the packet. I also took the opportunity to + use simpler names. + `r262 `_ + +* Bump the version number and update these release notes. + `r263 `_ + +Version 0.9.4 +------------- + +This revision is an annouced release. The combination of `r258 `_ +and `r256 `_ makes this important to get out +to the community sooner rather than later. + +* The ``TimeSynchronizationRequest`` application layer PDUs have their ``time`` parameter + application encoded, not context encoded. + `r258 `_ + +* Bump the version number and update these release notes. + `r259 `_ + +Version 0.9.3 +------------- + +This release just has some minor bug fixes, but in order to get a large collection of +applications running quickly it was simpler to make minor release and install it on +other machines. The version was release to PyPI but never annouced. + +Revisions `r255 `_ +through `r257 `_. + +* A simple copy/paste error from some other sample code. + `r255 `_ + +* When shuffling data around to other applications and databases (like MongoDB) there + are problems with raw string data, a.k.a., octet strings, or in Python3 terms byte + strings. This is a simple mechanism to make hex strings out of the data portion of + tag data. This is subject to change to some other format as we get more experience + with data in other applications. + `r256 `_ + +* Remove the "flakes" (modules that were imported but not used). + `r257 `_ + +Version 0.9.2 +------------- + +Apart from the usual bug fixes and small new features, this release changes +almost all of the ``__init__`` functions to use ``super()`` rather than +calling the parent class initializer. + +New School Initialization +~~~~~~~~~~~~~~~~~~~~~~~~~ + +For example, while the old code did +this:: + + class Foo(Bar): + + def __init__(self): + Bar.__init__(self) + self.foo = 12 + +New the code does this:: + + class Foo(Bar): + + def __init__(self, *args, **kwargs): + super(Foo, self).__init__(*args, **kwargs) + self.foo = 12 + +If you draw an inheritance tree starting with ``PDUData`` at the top and +ending with something like ``ReadPropertyRequest`` at the bottom, you will +see lots of branching and merging. Calling the parent class directly may +lead to the same base class being "initialized" more than once which was +causing all kinds of havoc. + +Simply replacing the one with the new wasn't quite good enough however, +because it could lead to a situation where a keyword arguement needed to be +"consumed" if it existed because it didn't make sense for the parent class +or any of its parents. In many cases this works:: + + class Foo(Bar): + + def __init__(self, foo_arg=None, *args, **kwargs): + super(Foo, self).__init__(*args, **kwargs) + self.foo = 12 + +When the parent class initializer gets called the ``foo_arg`` will be a +regular parameter and won't be in the ``kwargs`` that get passed up the +inheritance tree. However, with ``Sequence`` and ``Choice`` there is +no knowledge of what the keyword parameters are going to be without going +through the associated element lists. So those two classes go to great +lengths to divide the kwargs into "mine" and "other". + +New User Data PDU Attribute +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +I have been working on a fairly complicated application that is a combination +of being a BBMD on multiple networks and router between them. The twist is +that there are rules that govern what segments of the networks can see each +other. To manage this, there needed to be a way to attach an object at the bottom +of the stack when a PDU is received and make sure that context information +is maintained all the way up through the stack to the application layer and +then back down again. + +To accomplish this there is a ``pduUserData`` attribute you can set and as +long as the stack is dealing with that PDU or the derived encoded/decoded +PDUs, that reference is maintained. + +Revisions `r246 `_ +through `r254 `_. + +* The sample HTTP server was using the old syle argument parser + and the old version didn't have the options leading to confusion. + `r246 `_ + +* Set the 'reuse' flag for broadcast sockets. A BACneteer has + a workstation with two physical adapters connected to the same + LAN with different IP addresses assigned for each one. Two + BACpypes applications were attempting to bind to the same + broadcast address, this allows that scenerio to work. + `r247 `_ + +* Fix the help string and add a little more error checking to the + ReadPropertyMultiple.py sample application. + `r248 `_ + +* Add the --color option to debugging. This wraps the output of the + LoggingFormatter with ANSI CSI escape codes so the output from + different log handlers is output in different colors. When + debugging is turned on for many modules it helps! + `r249 `_ + +* The WriteProperty method now has a ''direct'' parameter, this + fixes the function signatures of the sample applications to include + it. + `r250 `_ + +* Change the ``__init__`` functions to use ``super()``, see explanation + above. + `r251 `_ + +* Bump the minor version number. + `r252 `_ + +* Update the getting started document to include the new color debugging + option. There should be more explanation of what that means exactly, + along with a link to the Wikipedia color code tables. + `r253 `_ + +* Update these release notes. + `r254 `_ + +Version 0.9.1 +------------- + +Most of this release is just documentation, but it includes some new functionality +for translating PDUs into dictionaries. The new ``dict_contents`` functions will +most likely have some bugs, so consider that API unstable. + +Revisions `r238 `_ +through `r245 `_. + +* For some new users of BACpypes, particularly those that were also new to BACnet, + it can be a struggle getting something to work. This is the start of a new + documentation section to speed that process along. + `r238 `_ + `r239 `_ + `r240 `_ + +* For multithreaded applications it is sometimes handly to override the default + spin value, which is the maximum amount of time that the application should + be stuck in the asyncore.loop() function. The developer could import the + core module and change the CORE value before calling run(), but that seems + excessively hackish. + `r241 `_ + +* Apparently there should not be a dependancy on ``setuptools`` for developers that + want to install the library without it. In revision `r227 `_ + I changed the setup.py file, but that broke the release script. I'm not + completely sure this is correct, but it seems to work. + `r242 `_ + +* This revision includes a new dict_contents() function that encodes PDU content + into a dict-like object (a real ``dict`` by default, but the developer can provide + any other class that supports ``__setitem__``). This is the first step in a long + road to translate PDU data into JSON, then into BSON to be streamed into a + MongoDB database for analysis applications. + `r243 `_ + +* Bump the version number before releasing it. + `r244 `_ + +* Update these release notes. + `r245 `_ + +Version 0.9 +----------- + +There are a number of significant changes in BACpypes in this release, some of which +may break existing code so it is getting a minor release number. While this project +is getting inexorably closer to a 1.0 release, we're not there yet. + +The biggest change is the addition of a set of derived classes of ``Property`` that +match the names of the way properties are described in the standard; ``OptionalProperty``, +``ReadableProperty``, and ``WritableProperty``. This takes over from the awkward and +difficult-to-maintain combinations of ``optional`` and ``mutable`` constructor parameters. +I went through the standard again and matched the class name with the object definition +and it is much cleaner. + +This change was brought about by working on the `BACowl `_ +project where I wanted the generated ontology to more closely match the content of the +standard. This is the first instance where I've used the ontology design to change +application code. + +Revisions `r227 `_ +through `r234 `_. + +* At some point ``setuptools`` was replaced with ``distutils`` and this needed to change + while I was getting the code working on Windows. + `r227 `_ + +* Added the new property classes and renamed the existing ``Property`` class instances. + There are object types that are not complete (not every object type has every property + defined) and these will be cleaned up and added in a minor release in the near future. + `r228 `_ + +* The UDP module had some print statements and a traceback call that sent content to stdout, + errors should go to stderr. + `r229 `_ + +* With the new property classes there needed to be a simpler and cleaner way managing the + __init__ keyword parameters for a ``LocalDeviceObject``. During testing I had created + objects with no name or object identifier and it seemed like some error checking was + warrented, so that was added to ``add_object`` and ``delete_object``. + `r230 `_ + +* This commit is the first pass at changing the way object classes are registered. There + is now a new ``vendor_id`` parameter so that derived classes of a standard object can be + registered. For example, if vendor Snork has a custom SnorkAnalogInputObject class (derived + from ``AnalogInputObject`` of course) then both classes can be registered. + + The ``get_object_class`` has a cooresponding ``vendor_id`` parameter, so if a client + application is looking for the appropriate class, pass the ``vendorIdentifier`` property + value from the deivce object of the server and if there isn't a specific one defined, the + standard class will be returned. + + The new and improved registration function would be a lot nicer as a decorator, but optional + named parameters make and interesting twist. So depending on the combination of parameters + it returns a decorator, which is an interesting twist on recursion. + + At some point there will be a tutorial covering just this functionality, and before this + project hits version 1.0, there will be a similar mechanism for vendor defined enumerations, + especially ``PropertyIdentifier``, and this will also follow the BACowl ontology conventions. + + This commit also includes a few minor changes like changing the name ``klass`` to the + not-so-cute ``cls``, ``property`` to ``propid`` because the former is a reserved word, and + the dictionary of registered objects from ``object_types`` to ``registered_object_types``. + `r231 `_ + +* Simple wrapping of the command line argument interpretation for a sample application. + `r232 `_ + +* The ``CommandableMixin`` isn't appropriate for ``BinaryValueObject`` type, so I replaced it + with a ``DateValueObject``. + `r233 `_ + +* I managed to install Sphinx on my Windows laptop and this just added a build script to make + it easier to put in these release notes. + `r235 `_ + +* This adds the relaease notes page and a link to it for documentation, committed so I could + continue working on it from a variety of different places. I usually wouldn't make a commit just + for this unless I was working in a branch, but because I'm working in the trunk rather than + using a service like DropBox I decided to let myself get away with it. + `r234 `_ + `r236 `_ + +* Committed the final version of these notes and bumped the minor version number. + `r237 `_ + +Version 0.8 +----------- + +Placeholder for 0.8 release notes. + +Revisions `r224 `_ +through `r226 `_. + +* Placeholder for comments about revision 224. + `r224 `_ + +* Placeholder for comments about revision 225. + `r225 `_ + +* Bump the minor version number. + `r226 `_ + +Version 0.7.5 +------------- + +Placeholder for 0.8 release notes. + +Revisions `r217 `_ +through `r223 `_. + +* Placeholder for comments about revision 217. + `r217 `_ + +* Placeholder for comments about revision 218. + `r218 `_ + +* Placeholder for comments about revision 219. + `r219 `_ + +* Placeholder for comments about revision 220. + `r220 `_ + +* Placeholder for comments about revision 221. + `r221 `_ + +* Placeholder for comments about revision 222. + `r222 `_ + +* Bump the patch version number. + `r223 `_ + +Version 0.7.4 +------------- + +Lost to the sands of time. +