All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Downloads auto-retry on failure (thanks to @tillywoodfield in #59)
- Fetch the data download URL from IATI data dump (rather than hardcoding it)
- Changed exception raised if data is missing, from TypeError to FileNotFoundError
- Fixed unzipping bug, so that download correctly deals with folder structure of zip file
- Change path to IATI data zip file
- Drop support for python 3.5
- Include incomplete codelists in mapping file (#54)
- Change path to IATI data zip file
- raw_xml should return a byte string
- Add Dataset.raw_xml
- Fix bug so that PublisherSet deals with missing XML files. (#52)
- Drop support for python 2.7
- Drop support for python 3.4 (again)
- Add support for python 3.8
- Unpin lxml requirement
- Update codelist download locations
- Fix a longstanding python2.7 validator bug
- Fix a python 2.7 bug introduced in v2.2.10
- Deal with missing XML files gracefully. (#52)
- Don’t download metadata from gist (it’s now included in the IATI Data Dump zip file)
- Update URL for IATI data dump metadata (again)
- Add a contributing guide
- Pin lxml, to maintain support for python 3.4
- Update URL for IATI data dump metadata
- Add a code of conduct
- Fix travis deployment for dot com
- Improve wording in installation docs
- Change ownership of repo again
- Added some Organisation tests
- Add support for python 3.4 and python 3.7
- Don’t use the root logger. Instead, use iatikit’s own logger, and default to NullHandler. (#46)
- API documentation for Organisation and OrganisationSet
- Make
dataset.root
return None if XML is invalid
- Make multiple modifiers work (#47)
- Added a dataset xpath filter
- Allow multiple filters of the same type to be specified (#45)
- Prevent looping twice when calling
all()
(#44)
- Remove (experimental) fast identifier search
- Relax codelist item comparison (#41)
- First pass at modelling IATI organisations (#18)
- First pass at a
humanitarian
activity filter - Add a
iatikit.download.standard()
command - Add an optional
path
argument toiatikit.data()
- Add some Windows installation instructions (tl;dr: use Jupyter)
- Deal with null paths
- Use
huge_tree
when parsing XML (to ensure big files still parse)
- Fix "metadoota" typo!
- (Re-)add metadata-only download
- Fix dataset name filter
- Always use absolute paths to elements
- Refactor to better handle missing data
- Add a dataset
schema
getter, and caching - Add line number and path to codelist validation errors
- Add
dataset.unminify_xml()
, to ensure validation line numbers are meaningful - Add activity-level schema validation
- Allow codelists to be filtered by name
show()
uses dataset metadata- Pretty print XML
- Rejig validation; make
dataset.version
fail on XML error - Make
dataset.filetype
return None on failure
- Make XSD Schema constructor a bit more robust, and improve error handling
- Fix bug related to file and folder sort order
- Fix incorrect XSD error message regarding element ordering
- Allow datasets to be loaded from a StringIO
- Handle missing metadata in old codelists
- Much better XSD and codelist validation messages
- Add checks to ensure filetype metadata from the registry is okay
- Rename the project! "pyandi" -> "iatikit"
- Drop
validate_unique_ids
. This should be part of ruleset validation
- Add an IATI schema downloader
- Add IATI schema validation
- Add a fast find activity search (#3)
- Add
CodelistItem
andSector
comparison methods - Add a
dataset.schema
method - Make
download.codelists()
download codelist mappings, too - Add a
CodelistMappings
class; Add codelist validation (#31) - Add a
Validator
class, for storing the results of validation - Remove
path
args from lots of constructors; use pyandi.ini instead (#31)
- Lots of pylint-related fixes
- Add missing _instance_class to
PublisherSet
- Don’t patch
os.path.join
in tests (#32)
- Don’t instantiate schemas – use static classes instead
- Remove download helpers (they’re not really useful)
- Add classifiers to setup
- More import shuffling
- Fix pyversion badge
- Fix typo in docs
- Only declare requirements in setup
- Run tests with
python setup.py test
- Run coverage by default when testing
- Shuffle imports about
- Remove support for python 3.4
- Add a
__version__
string to the module (to help with debugging) - Add badges to docs
- Use more custom exceptions
- Add lots more tests
- URL-encode d-portal param
- Ensure xml property returns a byte-string
where
should not modify the original set object
- Split codelist attributes and metadata
- Rename codelist
name
filter toslug
- Make
codelist.complete
return a boolean
- Various unit tests
- Make DateType filter accept a datetime.date
- Add
path
argument to Sector constructor - Add a "Deployment" section to the README
- Require unicodecsv
- Get tox working again
- Comment out unused org-related code (temporarily)
- Deploy to pypi from travis (#26)
- Move repo from andylolz to pwyf
- Log a warning when dataset XML is invalid
- Add some documentation in docs/ as well as some docstrings (#16)
- Be more specific about exception handling (i.e. don’t use
except:
) - Add python 2.7 support
- Start adding tests; Setup travis and coveralls
- Make
dataset.root
less strict - metadata should return empty dict if file not found
- Simplify some set operations
- Add a publisher metadata property (#17)
- Add
filter
as a synonym forwhere
- Add show() function to Publisher, Dataset and Activity models
- Add an
xpath
activity filter
find
andfirst
raise errors when no data found.get
returns a default valuexml
property moved toetree
;raw_xml
property moved toxml
get()
shouldn’t be a synonym forall()
- Codelist support for all versions (i.e. v1.01+)
- Add
start
andend
properties to activities - Error when there’s no data (#12)
- Error when there are no codelists
- Improved sector support (#22)
- Change internal representation of codelists (#20)
- Return python
date
objects for dates - Always strip IATI identifiers
- README render
- Support set slicing
- Add a getter to all Sets. A set-getter!
- Ensure only known filters are used
- Allow for codelist filtering by code
- Add codelist
data
andmetadata
properties
- Tidy up Activity model repr
- Reword examples in README slightly, for clarity
- Refactor activity property fetching, to be less clever
- Rename all exceptions, according to PEP8
- Major improvements to codelist code
- Always cast codelist codes to string
- Get date type exists filter working
- DateTypes should also be filterable by generic filters
- Remove some cruft from the README about schema download
### Added
- Add activity date filters
- Add path to codelist functions
- Remove schema download code
- Remove unused
xmlschema
package
- Fix exception when there’s no existing data (bug in stale data warning)
raw_xml
function added to dataset and activity- Expand key-value extras in dataset metadata
- Add a filetype dataset filter
- Add a warning about stale data (#8)
- Add location, sector, title and description schema fields
- Make it possible to download data to a custom path
is_valid
should just check for valid XML- Determine filetype from metadata (instead of XML)
- Make
activity.dataset
public - Use custom exceptions throughout
- Fix broken
@version
property - Fix typo so metadata works again
- Add functions to fetch all datasets and all activities
- Move examples to README
- Standardise the set API with an abstract class
- Compute set size more efficiently
- Make API more consistent
- Remove download.metadata() (since metadata is now included in the data dump)
- Start using python logging
- Don’t parse XML until necessary
- Where path is useless – scrap it
- Scrap custom cache location
- Minor README updates
- Initial release