content: [project]
  name = "misp-modules"
  version = "3.0.2"
  description = "MISP modules are autonomous modules that can be used for expansion and other services in MISP"
  authors = [
      {name = "Alexandre Dulaunoy", email = "alexandre.dulaunoy@circl.lu"}
  ]
  license = "AGPL-3.0-only"
  readme = "README.md"
  classifiers = [
      "License :: OSI Approved :: GNU Affero General Public License v3",
      "Development Status :: 5 - Production/Stable",
      "Environment :: Console",
      "Intended Audience :: Science/Research",
      "Programming Language :: Python :: 3",
      "Topic :: Security",
  ]
  requires-python = ">=3.9,<3.13"
  dependencies = [
      ## core dependencies
      "orjson",
      "psutil",
      "tornado",
      ## minimum dependencies
      "beautifulsoup4",
      "jinja2",
      "markdownify",
      "pymisp",
      "publicsuffixlist",
      "setuptools",
  ]
  
  [project.optional-dependencies]
  minimal = [
      ## pinned module dependencies
      "censys==2.0.9",
      "socialscan<2.0.0",
      "yara-python==4.5.0",
      ## module dependencies
      "backscatter",
      "blockchain",
      "clamd",
      "crowdstrike-falconpy",
      "dnsdb2",
      "domaintools_api",
      "geoip2",
      "greynoise",
      "jbxapi",
      "ndjson",    
      "maclookup",
      "matplotlib",
      "mattermostdriver",
      "oauth2",
      "passivetotal",
      "pycountry",
      "pyeti-python3",
      "pypdns",
      "pypssl",
      "pyeupi",
      "pygeoip",
      "pyintel471",
      "pyipasnhistory",
      "pysafebrowsing",
      "requests[security]",
      "slack-sdk",
      "urlarchiver",
      "vt-graph-api",
      "vt-py",
      "vulners",
  ]
  
  all = [
      ## pinned module dependencies
      "censys==2.0.9",  ## in minimal
      "socialscan<2.0.0",  ## in minimal
      "yara-python==4.5.0",  ## in minimal
      "numpy>=1.26.4,<2.0.0",
      "pandas>=2.0.0",
      "pandas_ods_reader>=1.0.0",
      ## module dependencies
      "apiosintds",
      "assemblyline_client",
      "backscatter",  ## in minimal
      "blockchain",   ## in minimal
      "clamd",   ## in minimal
      "crowdstrike-falconpy",   ## in minimal
      "dnsdb2",  ## in minimal
      "domaintools_api",   ## in minimal
      "geoip2",  ## in minimal
      "greynoise",  ## in minimal
      "jbxapi",   ## in minimal
      "maclookup",  ## in minimal
      "matplotlib",   ## in minimal
      "mattermostdriver",   ## in minimal
      "misp-lib-stix2>=3.0.1.2",
      "misp-stix>=2025.1.10",
      "mwdblib",
      "ndjson",  ## in minimal
      "np",
      "oauth2",   ## in minimal
      "opencv-python",
      "openpyxl",
      "pandoc",
      "passivetotal",   ## in minimal
      "pdftotext",
      "pycountry",  ## in minimal
      "pyeti-python3",  ## in minimal
      "pyeupi",  ## in minimal
      "pygeoip",  ## in minimal
      "pyintel471",  ## in minimal
      "pyipasnhistory",  ## in minimal
      "pymisp[fileobjects, openioc, pdfexport, email]",
      "pypdns",  ## in minimal
      "pypssl",  ## in minimal
      "pysafebrowsing",  ## in minimal
      "pytesseract",
      "python-docx",
      "python-pptx",
      "pyzbar",
      "requests[security]",  ## in minimal
      "setuptools",
      "shodan",
      "sigmatools",
      "sigmf",
      "slack-sdk",  ## in minimal
      "sparqlwrapper",
      "tau-clients",
      "taxii2-client",
      "trustar",
      "urlarchiver",   ## in minimal
      "vt-graph-api",   ## in minimal
      "vt-py",   ## in minimal
      "vulners",   ## in minimal
      "vysion",
      "wand",
      "xlrd",
  ]
  
  [project.urls]
  Issues = "https://github.com/MISP/misp-modules/issues"
  Homepage = "https://github.com/MISP/misp-modules"
  Documentation = "https://misp.github.io/misp-modules"
  Repository = "https://github.com/MISP/misp-modules"
  
  [project.scripts]
  misp-modules = "misp_modules.__main__:main"
  
  [tool.poetry]
  packages = [{include = "misp_modules"}]
  
  [build-system]
  requires = ["poetry-core>=2.0"]
  build-backend = "poetry.core.masonry.api"
  
  [tool.poetry.group.test]
  optional = true
  
  [tool.poetry.group.test.dependencies]
  black = "*"
  codecov = "*"
  flake8 = "*"
  flake8-pyproject = "*"
  ipdb = "*"
  isort = "*"
  nose = "*"
  pre-commit = "*"
  pytest = "*"
  
  [tool.poetry.group.docs]
  optional = true
  
  [tool.poetry.group.docs.dependencies]
  mkdocs = "*"
  mkdocs-material = "*"
  markdown_include = "*"
  
  [tool.poetry.requires-plugins]
  poetry-plugin-bundle = ">=1.6"
  poetry-plugin-export = ">=1.9"
  
  [tool.black]
  line-length = 120
  target-version = ["py39"]
  preview = true
  enable-unstable-feature = ["string_processing"]
  
  [tool.isort]
  line_length = 120
  profile = "black"
  
  [tool.flake8]
  max-line-length = 120
  exclude = [".git", "__pycache__"]
  extend-ignore = [
      "E402", "E501", "E712", "E203",
  ]
  
  [tool.pytest.ini_options]
  filterwarnings = [
      "ignore:.*deprecated to return a value that is not None.*:DeprecationWarning:",
  ]
  log_cli = true
  log_cli_level = "INFO"
  log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)"
  log_cli_date_format = "%Y-%m-%d %H:%M:%S"
  