PyTaxonomies
Pythonic way to work with the taxonomies defined there: https://github.com/MISP/misp-taxonomies
Usage
Taxonomies and predicates are represented as immutable Python dictionaries.
Installation
pip install pytaxonomies
Basics
In [1]: from pytaxonomies import Taxonomies
In [2]: taxonomies = Taxonomies()
In [3]: taxonomies.version
Out[3]: '20160725'
In [4]: taxonomies.license
Out[4]: 'CC-BY'
In [5]: taxonomies.description
Out[5]: 'Manifest file of MISP taxonomies available.'
# How many taxonomies have been imported
In [6]: len(taxonomies)
Out[6]: 27
# Names of the taxonomies
In [7]: list(taxonomies.keys())
Out[7]:
['tlp',
'eu-critical-sectors',
'dni-ism',
'de-vs',
'osint',
'ms-caro-malware',
'open-threat',
'circl',
'iep',
'euci',
'kill-chain',
'europol-events',
'veris',
'information-security-indicators',
'estimative-language',
'adversary',
'europol-incident',
'malware_classification',
'ecsirt',
'dhs-ciip-sectors',
'csirt_case_classification',
'nato',
'fr-classif',
'enisa',
'misp',
'admiralty-scale',
'ms-caro-malware-full']
In [8]: taxonomies.get('enisa').description
Out[8]: 'The present threat taxonomy is an initial version that has been developed on the basis of available ENISA material. This material has been used as an ENISA-internal structuring aid for information collection and threat consolidation purposes. It emerged in the time period 2012-2015.'
In [9]: taxonomies.get('enisa').version
Out[9]: 201601
In [10]: taxonomies.get('enisa').name
Out[10]: 'enisa'
In [11]: list(taxonomies.get('enisa').keys())
Out[11]:
['legal',
'outages',
'eavesdropping-interception-hijacking',
'nefarious-activity-abuse',
'physical-attack',
'failures-malfunction',
'disaster',
'unintentional-damage']
In [12]: list(taxonomies.get('enisa').get('physical-attack'))
Out[12]:
['fraud-by-employees',
'theft',
'unauthorised-physical-access-or-unauthorised-entry-to-premises',
'theft-of-documents',
'information-leak-or-unauthorised-sharing',
'vandalism',
'damage-from-the-wafare',
'sabotage',
'coercion-or-extortion-or-corruption',
'theft-of-mobile-devices',
'theft-of-fixed-hardware',
'terrorist-attack',
'theft-of-backups',
'fraud']
In [13]: taxonomies.get('enisa').get('physical-attack').get('vandalism').value
Out[13]: 'vandalism'
In [14]: taxonomies.get('enisa').get('physical-attack').get('vandalism').expanded
Out[14]: 'Vandalism'
In [15]: taxonomies.get('enisa').get('physical-attack').get('vandalism').description
Out[15]: 'Act of physically damaging IT assets.'
Get machine tags
In [1]: print(taxonomies) # or taxonomies.all_machinetags()
<display the machine tags for all the taxonomies>
In [2]: print(taxonomies.get('circl')) # or taxonomies.get('circl').machinetags()
circl:incident-classification="vulnerability"
circl:incident-classification="malware"
circl:incident-classification="fastflux"
circl:incident-classification="system-compromise"
circl:incident-classification="sql-injection"
circl:incident-classification="scan"
circl:incident-classification="XSS"
circl:incident-classification="information-leak"
circl:incident-classification="scam"
circl:incident-classification="copyright-issue"
circl:incident-classification="denial-of-service"
circl:incident-classification="phishing"
circl:incident-classification="spam"
circl:topic="undefined"
circl:topic="industry"
circl:topic="ict"
circl:topic="finance"
circl:topic="services"
circl:topic="individual"
circl:topic="medical"
# All entries
In [3]: taxonomies.get('circl').amount_entries()
Out[3]: 28
# Amount predicates
In [3]: len(taxonomies.get('circl'))
Out[3]: 2
Expanded machine tag
In [10]: print(taxonomies.get('circl').machinetags_expanded())
circl:topic="Individual"
circl:topic="Services"
circl:topic="Finance"
circl:topic="Medical"
circl:topic="Industry"
circl:topic="Undefined"
circl:topic="ICT"
circl:incident-classification="Phishing"
circl:incident-classification="Malware"
circl:incident-classification="XSS"
circl:incident-classification="Copyright issue"
circl:incident-classification="Spam"
circl:incident-classification="SQL Injection"
circl:incident-classification="Scan"
circl:incident-classification="Scam"
circl:incident-classification="Vulnerability"
circl:incident-classification="Denial of Service"
circl:incident-classification="Information leak"
circl:incident-classification="Fastflux"
circl:incident-classification="System compromise"
Metadata
Release files for pytaxonomies 2.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytaxonomies-2.1.2.tar.gz | 909.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytaxonomies-2.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / pytaxonomies-2.1.2.tar.gz
| Download URL | pytaxonomies-2.1.2.tar.gz |
|---|---|
| Size | 909.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b108beced5643857c7294467fe3b18366445854c38ac1cc872e8f59eb8c6fdcc
|
|
BLAKE2b-256 checksum How to use checksums |
5b3f2f59fc2ad8c53f64d6380750c2bb5c55195651f72c5374b21d36362ff97d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency logRelease files / pytaxonomies-2.1.2-py3-none-any.whl
| Download URL | pytaxonomies-2.1.2-py3-none-any.whl |
|---|---|
| Size | 1.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ddd2cd9d76aef5f4a0b048b680ba07c70a9211200bd0639c1e9a7f5347e3cacd
|
|
BLAKE2b-256 checksum How to use checksums |
37227dac7d9a28e8fac82e07273c73459860aeb338b3fbab253df7c7daf0bd8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency log