Changes
=======

Release History
---------------

2.0.7 - 2016-11-24
^^^^^^^^^^^^^^^^^^

* Sometimes numeric (N) and float fields (F) are padded with
  '*'. These are now stripped. (Reported by sgiangola and Matungos,
  issue #10.)

* added ``char_decode_errors`` option which lets you choose how to
  handle characters that can't be decoded. (Implemented by ZHU Enwei,
  pull request #16.)

* added ``--char-decode-errors`` option to ``dbf2sqlite``.

* added ``dbfread.version_info``.


2.0.6 - 2016-06-07
^^^^^^^^^^^^^^^^^^

* Added support for long character (C) fields (up to 65535 bytes).
  (Requested by Eric Mertens and Marcelo Manzano.)

* Added support for Visual FoxPro varchar fields (V). (Thanks to Roman
  Kharin for reporting and bobintetley for providing a solution.)

* Bugfix (dbf2sqlite): some table or field names might actually collide with
  sql reserved words. (Fix by vthriller, pull request #15.)

* Documented how to convert records to Pandas data frames. (Thanks to
  Roman Yurchak for suggesting this.)


2.0.5 - 2015-11-30
^^^^^^^^^^^^^^^^^^

* Bugfix: memo field parser used str instead of bytes. (Fix submitted
  independently by Sebastian Setzer (via email) and by Artem Vlasov,
  pull request #11.)

* Bugfix: some field parsers called self._get_memo() instead of
  self.get_memo(). (Fix by Yu Feng, pull request #9.)


2.0.4 - 2015-02-07
^^^^^^^^^^^^^^^^^^

* DBF header and field headers are no longer read-only. For example
  you can now change field names by doing ``table.fields[0].name = 'price'``
  or read from files where field sizes in the header don't match those
  in the actual records by doing ``table.fields[0].length = 500``.

* fixed some examples that didn't work with Python 3.


2.0.3 - 2014-09-30
^^^^^^^^^^^^^^^^^^

* added currency field (Y). (Patch by Stack-of-Pancakes.)


2.0.2 - 2014-09-29
^^^^^^^^^^^^^^^^^^

* bugfix: a date with all zeroes in the DBF header resulted in
  'ValueError: month must be in 1..12'.  (Reported by Andrew Myers.)
  The ``date`` attribute is now set to ``None`` for any value that is
  not a valid date.


2.0.1 - 2014-09-19
^^^^^^^^^^^^^^^^^^

* bugfix: didn't handle field names with garbage after b'\0'
  terminator. (Patch by Cédric Krier.)

* now handles 0 (_NullFlags) fields that are more than 1 byte long.
  0 fields are now returned as byte strings instead of integers.
  (Reported by Carlos Huga.)

* the type B field is a double precision floating point numbers in
  Visual FoxPro. The parser crashed when it tried to interpret this as
  a string containing a number. (Reported by Carlos Huga.)

* API changes: memo field parsers now return the memo data (typically
  a unicode string or bytes object) instead of returning the
  index. This makes it easier to implement new memo types or extend
  the existing ones since memo fields are no longer a special case.


2.0.0 - 2014-08-12
^^^^^^^^^^^^^^^^^^

* ``dbfread.open()`` and ``dbfread.read()`` are now deprecated and
  will be removed in 1.4. Since the ``DBF`` object is no longer a
  subclass of list, these functions instead return backward compatible
  ``DeprecatedDBF`` objects.

* records are now returned as ordered dictionaries. This makes it
  easier to iterate over fields in the same order that they appear in
  the file.

* now reads (at least some) DBT files.

* added support for 6 new field types.

* added ``ignore_missing_memofile`` argument. If ``True`` and the memo
  file is not found all memo fields will be returned as ``None``.

* DBF now raises ``DBFNotFound`` and ``MissingMemoFile``. These
  inherit from IOError, so old code should still work.

* added ``InvalidValue``. This is currently not used by the library but
  can be useful for custom parsing.

* ``FieldParser`` is now available in the top scope.

* wrote documentation.

* switched to pytest for unit tests.


1.1.1 - 2014-08-03
^^^^^^^^^^^^^^^^^^

* example and test data files were missing from the manifest.


1.1.0 - 2014-08-03
^^^^^^^^^^^^^^^^^^

* the ``DBF`` object is no longer a subclass of list. Records are
  instead available in the ``records`` attribute, but the table can be
  iterated over like before. This change was made to make the API
  cleaner and easier to understand. ``read()`` is still included for
  backwards compatability, and returns an ``OldStyleTable`` object
  with the old behaviour.

* default character encoding is now ``"ascii"``. This is a saner default
  than the previously used ``"latin1"``, which would decode but could give
  the wrong characters.

* the DBF object can now be used as a context manager (using the
  "with" statement).


1.0.6 - 2014-08-02
^^^^^^^^^^^^^^^^^^

* critical bugfix: each record contained only the last
  field. (Introduced in 1.0.5, making that version unusable.)

* improved performance of record reading a bit.


1.0.5 - 2014-08-01
^^^^^^^^^^^^^^^^^^

This version is broken.

* more than doubled performance of record parsing.

* removed circular dependency between table and deleted record iterator.

* added ``dbversion`` attribute.

* added example ``dbfinfo.py``.

* numeric field (N) parser now handles invalid data correctly.

* added more unit tests.


1.0.4 - 2014-07-27
^^^^^^^^^^^^^^^^^^

* bugfix: crashed when record list was not terminated with b'\x1a'.
  (Bug first apperad in 1.0.2 after a rewrite.)

* bugfix: memo fields with no value were returned as ''. They are
  now returned correctly as None.

* bugfix: field header terminaters were compared with strings.

* added example parserclass_debugstring.py.


1.0.3 - 2014-07-26
^^^^^^^^^^^^^^^^^^

* reinstated hastily removed parserclass option.


1.0.2 - 2014-07-26
^^^^^^^^^^^^^^^^^^

* added example record_objects.py.

* removed parserclass option to allow for internal changes.  There is
  currently no (documented) way to add custom field types.


1.0.1 - 2014-07-26
^^^^^^^^^^^^^^^^^^

* bugfix: deleted records were ignored when using open().

* memo file is now opened and closed by each iterator instead of
  staying open all the time.


1.0.0 - 2014-07-25
^^^^^^^^^^^^^^^^^^

* records can now be streamed from the file, making it possible to
  read data files that are too large to fit in memory.

* documentation is more readable and complete.

* now installs correctly with easy_install.

* added "--encoding" option to dbf2sqlite which can be used to
  override character encoding.


0.1.0 - 2014-04-08
^^^^^^^^^^^^^^^^^^

Initial release.
