diff --git a/.travis.yml b/.travis.yml index 1f090c2..e99e66d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ +os: linux language: python -sudo: false # Since this is an older project, this is not the default. cache: pip dist: xenial python: @@ -8,6 +8,7 @@ python: - "3.5" - "3.6" - "3.7" + - "3.8" install: - pip install -U pip setuptools - pip install tox-travis diff --git a/CHANGES.txt b/CHANGES.txt index 55721f9..6c2de9a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +Version 4.1.0.17 +2020-11-16 +- Remove deprecation warning for collections module + Version 4.1.0.16 2019-09-17 - [#96] Fix problem when installing from Python 2.7 diff --git a/README.rst b/README.rst index dea7835..2ef5d63 100644 --- a/README.rst +++ b/README.rst @@ -1,10 +1,10 @@ python-maec =========== -A Python library for parsing, manipulating, and generating `Malware Attribute Enumeration and Characterization (MAECâ„¢) `_ content. +A Python library for parsing, manipulating, and generating `Malware Attribute Enumeration and Characterization (MAECâ„¢) `_ v4.1 content. :Source: https://github.com/MAECProject/python-maec -:Documentation: http://maec.readthedocs.org +:Documentation: https://maec.readthedocs.io/ :Information: https://maecproject.github.io/ :Download: https://pypi.python.org/pypi/maec/ diff --git a/docs/getting_started.rst b/docs/getting_started.rst index ed5570e..069c224 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -23,7 +23,7 @@ Once you have installed python-maec, you can begin writing Python applications t .. note:: - The *python-maec* library provides **bindings** and **APIs**, both of which can be used to parse and write MAEC XML files. For in-depth description of the *APIs, bindings, and the differences between the two*, please refer to :doc:`api_vs_bindings/index` + The *python-maec* library provides **bindings** and **APIs**, both of which can be used to parse and write MAEC XML files. For in-depth description of the *APIs, bindings, and the differences between the two*, please refer to :doc:`api_vs_bindings/index` Creating a MAEC Package *********************** diff --git a/docs/index.rst b/docs/index.rst index f667181..47a49af 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,13 +15,13 @@ version of MAEC. ============ =================== MAEC Version python-maec Version ============ =================== -4.1 4.1.0.12 (`PyPI`__) (`GitHub`__) +4.1 4.1.0.17 (`PyPI`__) (`GitHub`__) 4.0 4.0.1.0 (`PyPI`__) (`GitHub`__) 3.0 3.0.0b1 (`PyPI`__) (`GitHub`__) ============ =================== -__ https://pypi.python.org/pypi/maec/4.1.0.12 -__ https://github.com/MAECProject/python-maec/tree/v4.1.0.12 +__ https://pypi.python.org/pypi/maec/4.1.0.17 +__ https://github.com/MAECProject/python-maec/tree/v4.1.0.17 __ https://pypi.python.org/pypi/maec/4.0.1.0 __ https://github.com/MAECProject/python-maec/tree/v4.0.1.0 __ https://pypi.python.org/pypi/maec/3.0.0b1 diff --git a/maec/utils/comparator.py b/maec/utils/comparator.py index 50e43fd..8aea9aa 100644 --- a/maec/utils/comparator.py +++ b/maec/utils/comparator.py @@ -1,5 +1,5 @@ # MAEC Comparator Classes -import collections +from mixbox import compat class ComparisonResult(object): def __init__(self, bundle_list, lookup_table): @@ -154,7 +154,7 @@ def get_val(cls, obj, typed_field, hash_val, nested_elements = None): val = getattr(obj.properties, str(typed_field)) if val is not None: hash_val += str(typed_field) + ":" - if isinstance(val, collections.MutableSequence): + if isinstance(val, compat.MutableSequence): for list_item in val: if '/' in str(nested_elements[0]): hash_val += '[' diff --git a/maec/utils/deduplicator.py b/maec/utils/deduplicator.py index b10f1d0..7b96fa3 100644 --- a/maec/utils/deduplicator.py +++ b/maec/utils/deduplicator.py @@ -4,9 +4,9 @@ # See LICENSE.txt for complete terms -import collections import copy +from mixbox import compat from mixbox import entities from cybox.core import RelatedObject, AssociatedObject @@ -179,7 +179,7 @@ def get_typedfield_values(cls, val, name, values, ignoreCase=False): # If the value is a mutable sequence, attempt to find TypedFields as # in each item. EntityLists are Entity subclasses that can have # TypedFields, so we don't make this an elif. - if isinstance(val, collections.MutableSequence): + if isinstance(val, compat.MutableSequence): for list_item in val: cls.get_typedfield_values(list_item, name, values, ignoreCase) diff --git a/maec/version.py b/maec/version.py index 26571b3..b87b594 100644 --- a/maec/version.py +++ b/maec/version.py @@ -1,4 +1,4 @@ # Copyright (c) 2018, The MITRE Corporation. All rights reserved. # See LICENSE.txt for complete terms. -__version__ = "4.1.0.16" +__version__ = "4.1.0.17" diff --git a/setup.cfg b/setup.cfg index 4b24ed4..395669c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,17 @@ [bumpversion] -current_version = 4.1.0.16 -parse = (?P\d+)\.(?P\d+)\.(?P\d+).(?P\d+) -serialize = {major}.{minor}.{patch}.{release} +current_version = 4.1.0.17 +parse = (?P\d+)\.(?P\d+)\.(?P\d+).(?P\d+) +serialize = {major}.{minor}.{patch}.{revision} commit = True tag = True [bumpversion:file:maec/version.py] +[bumpversion:file:docs/index.rst] + +[metadata] +license_file = LICENSE.txt + [bdist_wheel] universal = True diff --git a/setup.py b/setup.py index c8a445c..da68f08 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ def get_long_description(): install_requires = [ 'lxml>=2.2.3 ; python_version == "2.7" or python_version >= "3.5"', 'lxml>=2.2.3,<4.4.0 ; python_version > "2.7" and python_version < "3.5"', - 'mixbox>=1.0.2', + 'mixbox>=1.0.4', 'cybox>=2.1.0.13,<2.1.1.0', ] @@ -52,7 +52,7 @@ def get_long_description(): author_email="maec@mitre.org", description="An API for parsing and creating MAEC content.", long_description=get_long_description(), - url="http://maec.mitre.org", + url="https://maecproject.github.io/", packages=find_packages(), install_requires=install_requires, extras_require=extras_require, @@ -65,9 +65,15 @@ def get_long_description(): "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", - ] + ], + project_urls={ + 'Documentation': 'https://maec.readthedocs.io/', + 'Source Code': 'https://github.com/MAECProject/python-maec/', + 'Bug Tracker': 'https://github.com/MAECProject/python-maec/issues/', + }, ) diff --git a/tox.ini b/tox.ini index 0b520ed..d50a0b4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py34,py35,py36,py37 +envlist = py27, py34, py35, py36, py37, py38, docs, packaging [testenv] commands = @@ -12,10 +12,17 @@ commands = sphinx-build -W -b doctest -d {envtmpdir}/doctrees docs {envtmpdir}/doctest sphinx-build -W -b html -d {envtmpdir}/doctrees docs {envtmpdir}/html +[testenv:packaging] +deps = + readme_renderer +commands = + python setup.py check -r -s + [travis] python = - 2.7: py27 + 2.7: py27, docs, packaging 3.4: py34 3.5: py35 - 3.6: py36 + 3.6: py36, docs, packaging 3.7: py37 + 3.8: py38