1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-10-05 22:18:16 +08:00
bacpypes/doc/source/releasenotes.rst

691 lines
28 KiB
ReStructuredText

.. 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 <https://nose.readthedocs.org/en/latest/>`_ 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 <https://testrun.org/tox/latest/>`_ 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 <http://sourceforge.net/p/bacpypes/code/331>`_
* Correct the restoreFailure in BackupState
`r332 <http://sourceforge.net/p/bacpypes/code/332>`_
* Check for read-only object when writing to a file
`r333 <http://sourceforge.net/p/bacpypes/code/333>`_
* Wrong initial value for no segmentation (old enumeration syntax)
`r334 <http://sourceforge.net/p/bacpypes/code/334>`_
* Wrong parameter
`r335 <http://sourceforge.net/p/bacpypes/code/335>`_
* Missed variable name change
`r336 <http://sourceforge.net/p/bacpypes/code/336>`_
* Mask errors writing the history file like they are when reading
`r337 <http://sourceforge.net/p/bacpypes/code/337>`_
* Make sure that the vendor identifier is provided, and that localDate and
localTime are not
`r338 <http://sourceforge.net/p/bacpypes/code/338>`_
* Add simple string parsing to Date and Time
`r339 <http://sourceforge.net/p/bacpypes/code/339>`_
* Bump the version number, provide more focused classifiers, include release
notes
`r340 <http://sourceforge.net/p/bacpypes/code/340>`_
Version 0.12.0
--------------
* Switch from distutils to setuptools to build a wheel
`r323 <http://sourceforge.net/p/bacpypes/code/323>`_
* Updated to use twine to upload after building both an egg and a wheel
`r324 <http://sourceforge.net/p/bacpypes/code/324>`_
* ReallyLongCamelCaseTypo
`r325 <http://sourceforge.net/p/bacpypes/code/325>`_
* The pieces inside the AtomicReadFileACK should not have been context encoded,
but the choice is context encoded
`r326 <http://sourceforge.net/p/bacpypes/code/326>`_
* Additional properties and object types to get closer to 2012 edition
`r327 <http://sourceforge.net/p/bacpypes/code/327>`_
* Additional properties and enumerations
`r328 <http://sourceforge.net/p/bacpypes/code/328>`_
* Replace 'except X, T:' with 'except X as T:' for more modern code
`r329 <http://sourceforge.net/p/bacpypes/code/329>`_
* Bump the version number and include release notes this time
`r330 <http://sourceforge.net/p/bacpypes/code/330>`_
Version 0.11.0
--------------
* Merge the 0.10.6 release
`r311 <http://sourceforge.net/p/bacpypes/code/311>`_
* Examples of a RecurringTask and using that to read property values.
`r312 <http://sourceforge.net/p/bacpypes/code/312>`_
* Minor documentation update, adding --color option
`r313 <http://sourceforge.net/p/bacpypes/code/313>`_
* IP-to-IP router sample
`r314 <http://sourceforge.net/p/bacpypes/code/314>`_
* Additional helper application for decoding UDP packet contents in hex
`r315 <http://sourceforge.net/p/bacpypes/code/315>`_
* The 'description' property is optional, by giving it a default value it was
always being created.
`r316 <http://sourceforge.net/p/bacpypes/code/316>`_
* Spelling typo
`r317 <http://sourceforge.net/p/bacpypes/code/317>`_
* Missing enumerations
`r318 <http://sourceforge.net/p/bacpypes/code/318>`_
* WhatIsNetworkNumber and NetworkNumberIs decoding (no other support yet)
`r319 <http://sourceforge.net/p/bacpypes/code/319>`_
* typo
`r320 <http://sourceforge.net/p/bacpypes/code/320>`_
* reStructured text version of readme
`r321 <http://sourceforge.net/p/bacpypes/code/321>`_
* Bump the version number
`r322 <http://sourceforge.net/p/bacpypes/code/322>`_
Version 0.10.6
--------------
* Release notes from previous version.
`r304 <http://sourceforge.net/p/bacpypes/code/304>`_
* The accessCredential object type was missing.
`r305 <http://sourceforge.net/p/bacpypes/code/305>`_
* Incorrect number of formatting parameters to match actual parameters, only
appeared as warnings during debugging, but is definitely annoying.
`r306 <http://sourceforge.net/p/bacpypes/code/306>`_
* New ReadRange sample code to assist with a developer question, keep them
coming!
`r307 <http://sourceforge.net/p/bacpypes/code/307>`_
* The ClientCOV components are not supposed to be context encoded.
`r308 <http://sourceforge.net/p/bacpypes/code/308>`_
* A change to make sure that an array property isn't None (uninitialized) before
attempting to index into it.
`r309 <http://sourceforge.net/p/bacpypes/code/309>`_
* Bump the version number and update these release notes.
`r310 <http://sourceforge.net/p/bacpypes/code/310>`_
Version 0.10.5
--------------
* Bill Roberts submitted a patch to clean up an old underscore, and I missed
the edit earlier. Thanks Bill!
`r302 <http://sourceforge.net/p/bacpypes/code/302>`_
* Bump the version number, release notes to come later.
`r303 <http://sourceforge.net/p/bacpypes/code/303>`_
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 <http://sourceforge.net/p/bacpypes/code/282>`_
* 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 <http://sourceforge.net/p/bacpypes/code/283>`_
`r284 <http://sourceforge.net/p/bacpypes/code/284>`_
`r285 <http://sourceforge.net/p/bacpypes/code/285>`_
`r286 <http://sourceforge.net/p/bacpypes/code/286>`_
`r287 <http://sourceforge.net/p/bacpypes/code/287>`_
`r289 <http://sourceforge.net/p/bacpypes/code/289>`_
`r290 <http://sourceforge.net/p/bacpypes/code/290>`_
`r291 <http://sourceforge.net/p/bacpypes/code/291>`_
`r292 <http://sourceforge.net/p/bacpypes/code/292>`_
* Delete an unecessary import (a.k.a., "flake").
`r288 <http://sourceforge.net/p/bacpypes/code/288>`_
* Handle the various combinations of present/missing values for the object
identifier and object list keyword arguments to the device object better.
`r293 <http://sourceforge.net/p/bacpypes/code/293>`_
* 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 <http://sourceforge.net/p/bacpypes/code/294>`_
* 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 <http://sourceforge.net/p/bacpypes/code/295>`_
* 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 <http://sourceforge.net/p/bacpypes/code/296>`_
* 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 <http://sourceforge.net/p/bacpypes/code/297>`_
* New Schedule Object sample code.
`r298 <http://sourceforge.net/p/bacpypes/code/298>`_
* The fileIdentifier parameter of the Atomic Read/Write File services is
application encoded, not context encoded.
`r299 <http://sourceforge.net/p/bacpypes/code/299>`_
* Bill Roberts submitted some patches to clean up element encoding errors,
thank you Bill!
`r300 <http://sourceforge.net/p/bacpypes/code/300>`_
* Bump the version number and release. Notes to be committed later.
`r301 <http://sourceforge.net/p/bacpypes/code/301>`_
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 <http://sourceforge.net/p/bacpypes/code/276>`_
* 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 <http://sourceforge.net/p/bacpypes/code/277>`_
* This minor enhancement allows longs in the object type for an object identifier
``__init__`` parameter rather than just ints.
`r278 <http://sourceforge.net/p/bacpypes/code/278>`_
* 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 <http://sourceforge.net/p/bacpypes/code/279>`_
* This is a pair of sample applications for proprietary object types and proprietary
properties to demonstrate how to extend the core types.
`r280 <http://sourceforge.net/p/bacpypes/code/280>`_
* Bump the version number and update these release notes.
`r281 <http://sourceforge.net/p/bacpypes/code/281>`_
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 <http://sourceforge.net/p/bacpypes/code/272>`_
* 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 <http://sourceforge.net/p/bacpypes/code/273>`_
* 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 <http://sourceforge.net/p/bacpypes/code/274>`_
* Bump the version number and update these release notes.
`r275 <http://sourceforge.net/p/bacpypes/code/275>`_
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 <http://sourceforge.net/p/bacpypes/code/269>`_
* The lowerCamelCase for CharacterStringValue objects was incorrect and didn't match
the enumeration value.
`r270 <http://sourceforge.net/p/bacpypes/code/270>`_
* Bump the version number and update these release notes.
`r271 <http://sourceforge.net/p/bacpypes/code/271>`_
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 <http://sourceforge.net/p/bacpypes/code/264>`_
* 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 <http://sourceforge.net/p/bacpypes/code/265>`_
* 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 <http://sourceforge.net/p/bacpypes/code/266>`_
* 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 <http://sourceforge.net/p/bacpypes/code/267>`_
* Bump the version number and update these release notes.
`r268 <http://sourceforge.net/p/bacpypes/code/268>`_
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 <http://sourceforge.net/p/bacpypes/code/260>`_
* 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 <http://sourceforge.net/p/bacpypes/code/261>`_
* 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 <http://sourceforge.net/p/bacpypes/code/262>`_
* Bump the version number and update these release notes.
`r263 <http://sourceforge.net/p/bacpypes/code/263>`_
Version 0.9.4
-------------
This revision is an annouced release. The combination of `r258 <http://sourceforge.net/p/bacpypes/code/258>`_
and `r256 <http://sourceforge.net/p/bacpypes/code/256>`_ 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 <http://sourceforge.net/p/bacpypes/code/258>`_
* Bump the version number and update these release notes.
`r259 <http://sourceforge.net/p/bacpypes/code/259>`_
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 <http://sourceforge.net/p/bacpypes/code/255>`_
through `r257 <http://sourceforge.net/p/bacpypes/code/257>`_.
* A simple copy/paste error from some other sample code.
`r255 <http://sourceforge.net/p/bacpypes/code/255>`_
* 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 <http://sourceforge.net/p/bacpypes/code/256>`_
* Remove the "flakes" (modules that were imported but not used).
`r257 <http://sourceforge.net/p/bacpypes/code/257>`_
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 <http://sourceforge.net/p/bacpypes/code/246>`_
through `r254 <http://sourceforge.net/p/bacpypes/code/254>`_.
* The sample HTTP server was using the old syle argument parser
and the old version didn't have the options leading to confusion.
`r246 <http://sourceforge.net/p/bacpypes/code/246>`_
* 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 <http://sourceforge.net/p/bacpypes/code/247>`_
* Fix the help string and add a little more error checking to the
ReadPropertyMultiple.py sample application.
`r248 <http://sourceforge.net/p/bacpypes/code/248>`_
* 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 <http://sourceforge.net/p/bacpypes/code/249>`_
* The WriteProperty method now has a ''direct'' parameter, this
fixes the function signatures of the sample applications to include
it.
`r250 <http://sourceforge.net/p/bacpypes/code/250>`_
* Change the ``__init__`` functions to use ``super()``, see explanation
above.
`r251 <http://sourceforge.net/p/bacpypes/code/251>`_
* Bump the minor version number.
`r252 <http://sourceforge.net/p/bacpypes/code/252>`_
* 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 <http://sourceforge.net/p/bacpypes/code/253>`_
* Update these release notes.
`r254 <http://sourceforge.net/p/bacpypes/code/254>`_
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 <http://sourceforge.net/p/bacpypes/code/238>`_
through `r245 <http://sourceforge.net/p/bacpypes/code/245>`_.
* 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 <http://sourceforge.net/p/bacpypes/code/238>`_
`r239 <http://sourceforge.net/p/bacpypes/code/239>`_
`r240 <http://sourceforge.net/p/bacpypes/code/240>`_
* 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 <http://sourceforge.net/p/bacpypes/code/241>`_
* Apparently there should not be a dependancy on ``setuptools`` for developers that
want to install the library without it. In revision `r227 <http://sourceforge.net/p/bacpypes/code/227>`_
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 <http://sourceforge.net/p/bacpypes/code/242>`_
* 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 <http://sourceforge.net/p/bacpypes/code/243>`_
* Bump the version number before releasing it.
`r244 <http://sourceforge.net/p/bacpypes/code/244>`_
* Update these release notes.
`r245 <http://sourceforge.net/p/bacpypes/code/245>`_
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 <http://bacowl.sourceforge.net/>`_
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 <http://sourceforge.net/p/bacpypes/code/227>`_
through `r234 <http://sourceforge.net/p/bacpypes/code/234>`_.
* At some point ``setuptools`` was replaced with ``distutils`` and this needed to change
while I was getting the code working on Windows.
`r227 <http://sourceforge.net/p/bacpypes/code/227>`_
* 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 <http://sourceforge.net/p/bacpypes/code/228>`_
* The UDP module had some print statements and a traceback call that sent content to stdout,
errors should go to stderr.
`r229 <http://sourceforge.net/p/bacpypes/code/229>`_
* 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 <http://sourceforge.net/p/bacpypes/code/230>`_
* 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 <http://sourceforge.net/p/bacpypes/code/231>`_
* Simple wrapping of the command line argument interpretation for a sample application.
`r232 <http://sourceforge.net/p/bacpypes/code/232>`_
* The ``CommandableMixin`` isn't appropriate for ``BinaryValueObject`` type, so I replaced it
with a ``DateValueObject``.
`r233 <http://sourceforge.net/p/bacpypes/code/233>`_
* 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 <http://sourceforge.net/p/bacpypes/code/235>`_
* 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 <http://sourceforge.net/p/bacpypes/code/234>`_
`r236 <http://sourceforge.net/p/bacpypes/code/236>`_
* Committed the final version of these notes and bumped the minor version number.
`r237 <http://sourceforge.net/p/bacpypes/code/237>`_
Version 0.8
-----------
Placeholder for 0.8 release notes.
Revisions `r224 <http://sourceforge.net/p/bacpypes/code/224>`_
through `r226 <http://sourceforge.net/p/bacpypes/code/226>`_.
* Placeholder for comments about revision 224.
`r224 <http://sourceforge.net/p/bacpypes/code/224>`_
* Placeholder for comments about revision 225.
`r225 <http://sourceforge.net/p/bacpypes/code/225>`_
* Bump the minor version number.
`r226 <http://sourceforge.net/p/bacpypes/code/226>`_
Version 0.7.5
-------------
Placeholder for 0.8 release notes.
Revisions `r217 <http://sourceforge.net/p/bacpypes/code/217>`_
through `r223 <http://sourceforge.net/p/bacpypes/code/223>`_.
* Placeholder for comments about revision 217.
`r217 <http://sourceforge.net/p/bacpypes/code/217>`_
* Placeholder for comments about revision 218.
`r218 <http://sourceforge.net/p/bacpypes/code/218>`_
* Placeholder for comments about revision 219.
`r219 <http://sourceforge.net/p/bacpypes/code/219>`_
* Placeholder for comments about revision 220.
`r220 <http://sourceforge.net/p/bacpypes/code/220>`_
* Placeholder for comments about revision 221.
`r221 <http://sourceforge.net/p/bacpypes/code/221>`_
* Placeholder for comments about revision 222.
`r222 <http://sourceforge.net/p/bacpypes/code/222>`_
* Bump the patch version number.
`r223 <http://sourceforge.net/p/bacpypes/code/223>`_
Version 0.7.4
-------------
Lost to the sands of time.