Initial documentation.
parent
610f24fe54
commit
87330fcf74
|
@ -0,0 +1,93 @@
|
||||||
|
Contributing
|
||||||
|
============
|
||||||
|
|
||||||
|
We're thrilled that you're interested in contributing to python-stix2! Here are
|
||||||
|
some things you should know:
|
||||||
|
|
||||||
|
- `contribution-guide.org <http://www.contribution-guide.org/>`_ has great ideas
|
||||||
|
for contributing to any open-source project (not just python-stix2).
|
||||||
|
- All contributors must sign a Contributor License Agreement. See
|
||||||
|
`CONTRIBUTING.md <https://github.com/oasis-open/cti-python-stix2/blob/master/CONTRIBUTING.md>`_
|
||||||
|
in the project repository for specifics.
|
||||||
|
- If you are planning to implement a major feature (vs. fixing a bug), please
|
||||||
|
discuss with a project maintainer first to ensure you aren't duplicating the
|
||||||
|
work of someone else, and that the feature is likely to be accepted.
|
||||||
|
|
||||||
|
Now, let's get started!
|
||||||
|
|
||||||
|
Setting up a development environment
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
We recommend using a `virtualenv <https://virtualenv.pypa.io/en/stable/>`_.
|
||||||
|
|
||||||
|
1. Clone the repository. If you're planning to make pull request, you should fork
|
||||||
|
the repository on GitHub and clone your fork instead of the main repo::
|
||||||
|
|
||||||
|
$ git clone https://github.com/yourusername/cti-python-stix2.git
|
||||||
|
|
||||||
|
2. Install develoment-related dependencies::
|
||||||
|
|
||||||
|
$ cd cti-python-stix2
|
||||||
|
$ pip install -r requirements.txt
|
||||||
|
|
||||||
|
At this point you should be able to make changes to the code.
|
||||||
|
|
||||||
|
Code style
|
||||||
|
----------
|
||||||
|
|
||||||
|
All code should follow `PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. We
|
||||||
|
allow for line lengths up to 160 characters, but any lines over 80 characters
|
||||||
|
should be the exception rather than the rule. PEP 8 conformance will be tested
|
||||||
|
automatically by Tox and Travis-CI (see below).
|
||||||
|
|
||||||
|
Testing
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
All of the tools mentioned in this section are installed when you run ``pip
|
||||||
|
install -r requirements.txt``.
|
||||||
|
|
||||||
|
python-stix2 uses `pytest <http://pytest.org>` for testing. We encourage the
|
||||||
|
use of test-driven development (TDD), where you write (failing) tests that
|
||||||
|
demonstrate a bug or proposed new feature before writing code that fixes the bug
|
||||||
|
or implements the features. Any code contributions to python-stix2 should come
|
||||||
|
with new or updated tests.
|
||||||
|
|
||||||
|
To run the tests in your current Python environment, use the ``pytest`` command
|
||||||
|
from the root project directory::
|
||||||
|
|
||||||
|
$ pytest
|
||||||
|
|
||||||
|
This should show all of the tests that ran, along with their status.
|
||||||
|
|
||||||
|
You can run a specific test file by passing it on the command line::
|
||||||
|
|
||||||
|
$ pytest stix2/test/test_<xxx>.py
|
||||||
|
|
||||||
|
To ensure that the test you wrote is running, you can deliberately add an
|
||||||
|
``assert False`` statement at the beginning of the test. This is another benefit
|
||||||
|
of TDD, since you should be able to see the test failing (and ensure it's being
|
||||||
|
run) before making it pass.
|
||||||
|
|
||||||
|
`tox <https://tox.readthedocs.io/en/latest/>`_ allows you to test a package
|
||||||
|
across multiple versions of Python. Setting up multiple Python environments is
|
||||||
|
beyond the scope of this guide, but feel free to ask for help setting them up.
|
||||||
|
Tox should be run from the root directory of the project:::
|
||||||
|
|
||||||
|
$ tox
|
||||||
|
|
||||||
|
We aim for high test coverage, using the `coverage.py
|
||||||
|
<http://coverage.readthedocs.io/en/latest/>`_ library. Though it's not an
|
||||||
|
absolute requirement to maintain 100% coverage, all code contributions must
|
||||||
|
be accompanied by tests. To run coverage and look for untested lines of code,
|
||||||
|
run::
|
||||||
|
|
||||||
|
$ pytest --cov=stix2
|
||||||
|
$ coverage html
|
||||||
|
|
||||||
|
then look at the resulting report in ``htmlcov/index.html``.
|
||||||
|
|
||||||
|
All commits pushed to the ``master`` branch or submitted as a pull request is
|
||||||
|
tested with `Travis-CI <https://travis-ci.org/oasis-open/cti-python-stix2>`
|
||||||
|
automatically.
|
|
@ -0,0 +1,39 @@
|
||||||
|
.. _datastore_api:
|
||||||
|
|
||||||
|
DataStore API
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The DataStore API is still in the planning stages and may be subject to
|
||||||
|
major changes. We encourage anyone with feedback to contact the maintainers
|
||||||
|
to help ensure the API meets a large variety of use cases.
|
||||||
|
|
||||||
|
One prominent feature of python-stix2 will be an interface for connecting
|
||||||
|
different backend data stores containing STIX content. This will allow a uniform
|
||||||
|
interface for querying and saving STIX content, and allow higher level code to
|
||||||
|
be written without regard to the underlying data storage format. python-stix2
|
||||||
|
will define the API and contain some default implementations of this API, but
|
||||||
|
developers are encouraged to write their own implementations.
|
||||||
|
|
||||||
|
Potential functions of the API include:
|
||||||
|
|
||||||
|
* get a STIX Object by ID (returns the most recent version).
|
||||||
|
* get all versions of a STIX object by ID.
|
||||||
|
* get all relationships involving a given object, and all related objects.
|
||||||
|
* save an object.
|
||||||
|
* query for objects that match certain criteria (query syntax TBD).
|
||||||
|
|
||||||
|
For all queries, the API will include a "filter" interface that can be used to
|
||||||
|
either explicitly include or exclude results with certain criteria. For example,
|
||||||
|
|
||||||
|
* only trust content from a set of object creators.
|
||||||
|
* exclude content from certain (untrusted) object creators.
|
||||||
|
* only include content with a confidence above a certain threshold (once
|
||||||
|
confidence is added to STIX).
|
||||||
|
* only return content that can be shared with external parties (in other words,
|
||||||
|
that has TLP:GREEN markings).
|
||||||
|
|
||||||
|
Additionally, the python-stix2 library will contain a "composite" data store,
|
||||||
|
which implements the DataStore API while delegating functionality to one or more
|
||||||
|
"child" data store.
|
|
@ -10,6 +10,10 @@ Welcome to stix2's documentation!
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
|
overview
|
||||||
|
roadmap
|
||||||
|
datastore_api
|
||||||
|
contributing
|
||||||
|
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
High level goals/principles of the python-stix2 library:
|
||||||
|
|
||||||
|
1. It should be as easy as possible (but no easier!) to perform common tasks of
|
||||||
|
producing, consuming, and processing STIX 2 content.
|
||||||
|
2. It should be hard, if not impossible, to emit invalid STIX 2.
|
||||||
|
3. The library should default to doing "the right thing", complying with both
|
||||||
|
the STIX 2.0 spec, as well as associated best practices. The library should
|
||||||
|
make it hard to do "the wrong thing".
|
||||||
|
|
||||||
|
To accomplish these goals, and to incorporate lessons learned while developing
|
||||||
|
python-stix (for STIX 1.x), several decisions influenced the design of
|
||||||
|
python-stix2:
|
||||||
|
|
||||||
|
1. All data structures are immutable by default. In contrast to python-stix,
|
||||||
|
where users would create an object and then assign attributes to it, in
|
||||||
|
python-stix2 all properties must be provided when creating the object.
|
||||||
|
2. Where necessary, library objects should act like ``dict``'s. When treated as
|
||||||
|
a ``str``, the JSON reprentation of the object should be used.
|
||||||
|
3. Core Python data types (including numeric types, ``datetime``) should be used
|
||||||
|
when appropriate, and serialized to the correct format in JSON as specified
|
||||||
|
in the STIX 2.0 spec.
|
|
@ -0,0 +1,17 @@
|
||||||
|
Development Roadmap
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Prior to version 1.0, all APIs are considered unstable and subject to
|
||||||
|
change.
|
||||||
|
|
||||||
|
This is a list of (planned) features before version 1.0 is released.
|
||||||
|
|
||||||
|
* Serialization of all STIX and Cyber Observable objects to JSON.
|
||||||
|
* De-serialization (parsing) of all STIX and Cyber Observable objects.
|
||||||
|
* APIs for versioning (revising and revoking) STIX objects.
|
||||||
|
* APIs for marking STIX objects and interpreting markings of STIX objects.
|
||||||
|
* :ref:`datastore_api`, providing a common interface for querying sources
|
||||||
|
of STIX content (such as objects in memory, on a filesystem, in a database, or
|
||||||
|
via a TAXII feed).
|
Loading…
Reference in New Issue