File: modelling.rst

package info (click to toggle)
cyclonedx-python-lib 9.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,112 kB
  • sloc: xml: 14,752; python: 11,463; makefile: 21; sh: 16
file content (86 lines) | stat: -rw-r--r-- 3,275 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
.. # Licensed under the Apache License, Version 2.0 (the "License");
   # you may not use this file except in compliance with the License.
   # You may obtain a copy of the License at
   #
   #     http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing, software
   # distributed under the License is distributed on an "AS IS" BASIS,
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   # See the License for the specific language governing permissions and
   # limitations under the License.
   #
   # SPDX-License-Identifier: Apache-2.0

Modelling
=========

You can create a BOM Model from either manually using the methods available
directly on the :py:class:`cyclonedx.model.bom.Bom` class,
or deserialize a JSON/XML via :py:meth:`cyclonedx.model.bom.Bom.from_json`/:py:meth:`cyclonedx.model.bom.Bom.from_xml`

Vulnerabilities are supported by the Model as of version 0.3.0.

    **Note:** Known vulnerabilities associated with Components can be sourced from various data sources, but this library
    will not source them for you. Perhaps look at `Jake`_ if you're interested in this.

Example BOM created programmatically
------------------------------------

.. note::

    It is recommended that you have a good understanding of the `CycloneDX Schema`_ before attempting to create a BOM
    programmatically with this library.


For the most up-to-date in-depth examples, look at our `Unit Tests`_.

Example BOM created from existing CycloneDX BOM
------------------------------------

.. note::

    Supported from version 4.0.0 of this library.

Deserializing from a CycloneDX JSON BOM
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Each model class in this library that is serializable provides a magic ``from_json()`` method.

See the example below to read and deserialize a JSON CycloneDX document. Note that reading the file and loading as JSON
is the programmers responsibility.

.. code-block:: python

    import json
    from cyclonedx.model.bom import Bom

    with open('/path/to/my/cyclonedx.json') as input_json:
        deserialized_bom = Bom.from_json(data=json.loads(input_json.read()))


Deserializing from a CycloneDX XML BOM
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Each model class in this library that is serializable provides a magic ``from_xml()`` method.

See the example below to read and deserialize a XML CycloneDX document. Note that reading the file and loading as XML
is the programmers responsibility. Be careful to avoid XML vulnerabilities as documented `here`_. It is recommended that
you use a library such as `defusedxml` instead of the native `xml.etree.ElementTree`.

.. code-block:: python

    from xml.etree import ElementTree
    from cyclonedx.model.bom import Bom

    with open('/path/to/my/cyclonedx.xml') as input_xml:
        deserialized_bom = cast(Bom, Bom.from_xml(data=ElementTree.fromstring(input_xml.read())))




.. _CycloneDX Python: https://github.com/CycloneDX/cyclonedx-python
.. _Jake: https://pypi.org/project/jake
.. _CycloneDX Schema: https://cyclonedx.org/docs/latest
.. _Unit Tests: https://github.com/CycloneDX/cyclonedx-python-lib/tree/main/tests
.. _here: https://docs.python.org/3/library/xml.html#xml-vulnerabilities