From a35af9ecca68e223700ec0a055cc4c4a6317b2e0 Mon Sep 17 00:00:00 2001 From: Frederic Basler Date: Fri, 2 Aug 2024 16:50:02 +0200 Subject: [PATCH 1/2] [connectors] Integrate Pydantic V2 Compatibility Changes --- external-import/alienvault/requirements.txt | 2 +- external-import/alienvault/src/alienvault/client.py | 4 ++-- external-import/alienvault/src/alienvault/models.py | 2 +- .../src/crowdstrike_feeds_services/utils/report_fetcher.py | 2 +- .../src/crowdstrike_feeds_services/utils/snort_parser.py | 2 +- .../src/crowdstrike_feeds_services/utils/yara_parser.py | 2 +- external-import/crowdstrike/src/requirements.txt | 2 +- external-import/ironnet/src/ironnet/client.py | 5 ++--- external-import/ironnet/src/ironnet/config.py | 2 +- external-import/ironnet/src/requirements.txt | 2 +- external-import/kaspersky/src/kaspersky/client.py | 2 +- external-import/kaspersky/src/kaspersky/models.py | 6 +++--- external-import/kaspersky/src/requirements.txt | 2 +- external-import/malpedia/src/malpedia_connector/malpedia.py | 2 +- external-import/malpedia/src/malpedia_services/models.py | 2 +- external-import/malpedia/src/requirements.txt | 2 +- external-import/urlscan/src/requirements.txt | 2 +- external-import/urlscan/src/urlscan/client.py | 2 +- external-import/valhalla/src/requirements.txt | 2 +- external-import/valhalla/src/valhalla/models.py | 2 +- external-import/zerofox/src/requirements.txt | 2 +- internal-enrichment/malbeacon/src/models/c2_model.py | 2 +- internal-enrichment/malbeacon/src/models/email_model.py | 2 +- internal-enrichment/malbeacon/src/requirements.txt | 2 +- internal-enrichment/shodan-internetdb/src/requirements.txt | 2 +- .../shodan-internetdb/src/shodan_internetdb/client.py | 5 ++--- .../shodan-internetdb/src/shodan_internetdb/config.py | 2 +- .../import-document/src/reportimporter/core.py | 2 +- .../import-document/src/reportimporter/models.py | 2 +- internal-import-file/import-document/src/requirements.txt | 2 +- 30 files changed, 35 insertions(+), 37 deletions(-) diff --git a/external-import/alienvault/requirements.txt b/external-import/alienvault/requirements.txt index 456655f733..6805f7eca6 100644 --- a/external-import/alienvault/requirements.txt +++ b/external-import/alienvault/requirements.txt @@ -1,3 +1,3 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 OTXv2==1.5.12 diff --git a/external-import/alienvault/src/alienvault/client.py b/external-import/alienvault/src/alienvault/client.py index de1e75df7c..00f652f594 100644 --- a/external-import/alienvault/src/alienvault/client.py +++ b/external-import/alienvault/src/alienvault/client.py @@ -5,7 +5,7 @@ from datetime import datetime from typing import List -import pydantic +from pydantic.v1 import parse_obj_as from alienvault.models import Pulse from OTXv2 import OTXv2 @@ -39,6 +39,6 @@ def get_pulses_subscribed( :return: A list of pulses. """ pulse_data = self.otx.getsince(timestamp=modified_since, limit=limit) - pulses = pydantic.parse_obj_as(List[Pulse], pulse_data) + pulses = parse_obj_as(List[Pulse], pulse_data) return pulses diff --git a/external-import/alienvault/src/alienvault/models.py b/external-import/alienvault/src/alienvault/models.py index 0fffcfab57..21f6430f2f 100644 --- a/external-import/alienvault/src/alienvault/models.py +++ b/external-import/alienvault/src/alienvault/models.py @@ -3,7 +3,7 @@ from datetime import datetime from typing import List, Literal, Optional, Union -from pydantic import BaseModel +from pydantic.v1 import BaseModel __all__ = [ "Pulse", diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/report_fetcher.py b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/report_fetcher.py index 58c05a6281..da7db86458 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/report_fetcher.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/report_fetcher.py @@ -5,7 +5,7 @@ from typing import Any, Dict, List, Mapping, Optional, Union from crowdstrike_feeds_services.client.reports import ReportsAPI -from pydantic import BaseModel +from pydantic.v1 import BaseModel from . import create_file_from_download diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/snort_parser.py b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/snort_parser.py index 36af08f2d3..228c994dff 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/snort_parser.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/snort_parser.py @@ -7,7 +7,7 @@ from io import StringIO from typing import Any, List, Optional -from pydantic import BaseModel +from pydantic.v1 import BaseModel from . import convert_comma_separated_str_to_list diff --git a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/yara_parser.py b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/yara_parser.py index 7753981b28..c1929b8b44 100644 --- a/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/yara_parser.py +++ b/external-import/crowdstrike/src/crowdstrike_feeds_services/utils/yara_parser.py @@ -7,7 +7,7 @@ from io import StringIO from typing import List, Optional -from pydantic import BaseModel +from pydantic.v1 import BaseModel from . import convert_comma_separated_str_to_list diff --git a/external-import/crowdstrike/src/requirements.txt b/external-import/crowdstrike/src/requirements.txt index 1643187208..4900f23ec6 100644 --- a/external-import/crowdstrike/src/requirements.txt +++ b/external-import/crowdstrike/src/requirements.txt @@ -1,4 +1,4 @@ pycti==6.2.11 lxml==5.2.2 crowdstrike-falconpy==1.4.4 -pydantic==1.10.17 \ No newline at end of file +pydantic==2.8.2 \ No newline at end of file diff --git a/external-import/ironnet/src/ironnet/client.py b/external-import/ironnet/src/ironnet/client.py index 4d376ea163..bd2d5ab868 100644 --- a/external-import/ironnet/src/ironnet/client.py +++ b/external-import/ironnet/src/ironnet/client.py @@ -6,10 +6,9 @@ from datetime import datetime from typing import Dict, Iterator, List -import pydantic import requests import urllib3.exceptions -from pydantic import BaseModel +from pydantic.v1 import BaseModel, parse_raw_as from requests import Response __all__ = [ @@ -60,7 +59,7 @@ def query(self) -> Iterator[IronNetItem]: List[IronNetItem], ], ] - result = pydantic.parse_raw_as(result_type, resp.text) + result = parse_raw_as(result_type, resp.text) for indicator, ports in result.items(): for port, entries in ports.items(): for entry in entries: diff --git a/external-import/ironnet/src/ironnet/config.py b/external-import/ironnet/src/ironnet/config.py index 93f21da053..d412724931 100644 --- a/external-import/ironnet/src/ironnet/config.py +++ b/external-import/ironnet/src/ironnet/config.py @@ -2,7 +2,7 @@ from datetime import timedelta -from pydantic import BaseModel, BaseSettings, Field, validator +from pydantic.v1 import BaseModel, BaseSettings, Field, validator __all__ = [ "RootConfig", diff --git a/external-import/ironnet/src/requirements.txt b/external-import/ironnet/src/requirements.txt index c89ed16b8a..a1ea8d7173 100644 --- a/external-import/ironnet/src/requirements.txt +++ b/external-import/ironnet/src/requirements.txt @@ -1,2 +1,2 @@ pycti==6.2.11 -pydantic==1.10.17 \ No newline at end of file +pydantic==2.8.2 \ No newline at end of file diff --git a/external-import/kaspersky/src/kaspersky/client.py b/external-import/kaspersky/src/kaspersky/client.py index 986ca40af0..c09c5f2693 100644 --- a/external-import/kaspersky/src/kaspersky/client.py +++ b/external-import/kaspersky/src/kaspersky/client.py @@ -9,7 +9,7 @@ from kaspersky.models import Publication from kaspersky.utils import datetime_to_timestamp, decode_base64_gzip_to_string from pycti import OpenCTIConnectorHelper -from pydantic.tools import parse_obj_as +from pydantic.v1.tools import parse_obj_as from requests import RequestException, Response from requests.exceptions import ConnectTimeout, ReadTimeout diff --git a/external-import/kaspersky/src/kaspersky/models.py b/external-import/kaspersky/src/kaspersky/models.py index 67678a8beb..e9a7deb50e 100644 --- a/external-import/kaspersky/src/kaspersky/models.py +++ b/external-import/kaspersky/src/kaspersky/models.py @@ -4,9 +4,9 @@ from datetime import datetime, timezone from typing import Any, List, Optional -from pydantic import BaseModel, validator -from pydantic.datetime_parse import parse_date, parse_datetime -from pydantic.errors import DateError, DateTimeError +from pydantic.v1 import BaseModel, validator +from pydantic.v1.datetime_parse import parse_date, parse_datetime +from pydantic.v1.errors import DateError, DateTimeError log = logging.getLogger(__name__) diff --git a/external-import/kaspersky/src/requirements.txt b/external-import/kaspersky/src/requirements.txt index 7c14fc6c2e..87abb39a54 100644 --- a/external-import/kaspersky/src/requirements.txt +++ b/external-import/kaspersky/src/requirements.txt @@ -1,3 +1,3 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 lxml==5.2.2 diff --git a/external-import/malpedia/src/malpedia_connector/malpedia.py b/external-import/malpedia/src/malpedia_connector/malpedia.py index 53f936eb3e..f556b6caae 100644 --- a/external-import/malpedia/src/malpedia_connector/malpedia.py +++ b/external-import/malpedia/src/malpedia_connector/malpedia.py @@ -20,7 +20,7 @@ URLS_MAPPING, ) from pycti import OpenCTIConnectorHelper -from pydantic import ValidationError +from pydantic.v1 import ValidationError class MalpediaConnector: diff --git a/external-import/malpedia/src/malpedia_services/models.py b/external-import/malpedia/src/malpedia_services/models.py index b7450c65e5..d3e8b0fe5c 100644 --- a/external-import/malpedia/src/malpedia_services/models.py +++ b/external-import/malpedia/src/malpedia_services/models.py @@ -4,7 +4,7 @@ from datetime import date from typing import List, Optional -from pydantic import BaseModel +from pydantic.v1 import BaseModel class MalpediaModels: diff --git a/external-import/malpedia/src/requirements.txt b/external-import/malpedia/src/requirements.txt index d65d32c672..e063540b2c 100644 --- a/external-import/malpedia/src/requirements.txt +++ b/external-import/malpedia/src/requirements.txt @@ -1,3 +1,3 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 pycountry==24.6.1 \ No newline at end of file diff --git a/external-import/urlscan/src/requirements.txt b/external-import/urlscan/src/requirements.txt index 5f38641843..9f48be20c8 100644 --- a/external-import/urlscan/src/requirements.txt +++ b/external-import/urlscan/src/requirements.txt @@ -1,3 +1,3 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 validators==0.33.0 \ No newline at end of file diff --git a/external-import/urlscan/src/urlscan/client.py b/external-import/urlscan/src/urlscan/client.py index d95edaee9a..dbfafa8989 100644 --- a/external-import/urlscan/src/urlscan/client.py +++ b/external-import/urlscan/src/urlscan/client.py @@ -4,7 +4,7 @@ import pydantic import requests -from pydantic import BaseModel +from pydantic.v1 import BaseModel __all__ = [ "UrlscanClient", diff --git a/external-import/valhalla/src/requirements.txt b/external-import/valhalla/src/requirements.txt index b7dac4964d..f0490ab9a7 100644 --- a/external-import/valhalla/src/requirements.txt +++ b/external-import/valhalla/src/requirements.txt @@ -1,4 +1,4 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 valhallaAPI==0.6.0 python-dateutil==2.9.0.post0 diff --git a/external-import/valhalla/src/valhalla/models.py b/external-import/valhalla/src/valhalla/models.py index f09c1bdee3..4dab33ecc3 100644 --- a/external-import/valhalla/src/valhalla/models.py +++ b/external-import/valhalla/src/valhalla/models.py @@ -4,7 +4,7 @@ from datetime import datetime from typing import List -from pydantic import BaseModel +from pydantic.v1 import BaseModel class Status(BaseModel): diff --git a/external-import/zerofox/src/requirements.txt b/external-import/zerofox/src/requirements.txt index a8a6cb4e37..9726470b56 100644 --- a/external-import/zerofox/src/requirements.txt +++ b/external-import/zerofox/src/requirements.txt @@ -1,4 +1,4 @@ -pydantic==2.7.1 +pydantic==2.8.2 pytest==8.3.2 pycti==6.2.11 urllib3==2.2.2 diff --git a/internal-enrichment/malbeacon/src/models/c2_model.py b/internal-enrichment/malbeacon/src/models/c2_model.py index e2e761722c..3a80f36d43 100644 --- a/internal-enrichment/malbeacon/src/models/c2_model.py +++ b/internal-enrichment/malbeacon/src/models/c2_model.py @@ -1,7 +1,7 @@ from typing import Optional from dateutil import parser -from pydantic import BaseModel +from pydantic.v1 import BaseModel class C2Beacon(BaseModel): diff --git a/internal-enrichment/malbeacon/src/models/email_model.py b/internal-enrichment/malbeacon/src/models/email_model.py index 6e1ab04e5d..2f7c148090 100644 --- a/internal-enrichment/malbeacon/src/models/email_model.py +++ b/internal-enrichment/malbeacon/src/models/email_model.py @@ -1,7 +1,7 @@ from typing import Optional from dateutil import parser -from pydantic import BaseModel +from pydantic.v1 import BaseModel class EmailBeacon(BaseModel): diff --git a/internal-enrichment/malbeacon/src/requirements.txt b/internal-enrichment/malbeacon/src/requirements.txt index 76cc925138..2a22448bf0 100644 --- a/internal-enrichment/malbeacon/src/requirements.txt +++ b/internal-enrichment/malbeacon/src/requirements.txt @@ -1,4 +1,4 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 urllib3==2.2.2 validators==0.33.0 diff --git a/internal-enrichment/shodan-internetdb/src/requirements.txt b/internal-enrichment/shodan-internetdb/src/requirements.txt index 5f38641843..9f48be20c8 100644 --- a/internal-enrichment/shodan-internetdb/src/requirements.txt +++ b/internal-enrichment/shodan-internetdb/src/requirements.txt @@ -1,3 +1,3 @@ pycti==6.2.11 -pydantic==1.10.17 +pydantic==2.8.2 validators==0.33.0 \ No newline at end of file diff --git a/internal-enrichment/shodan-internetdb/src/shodan_internetdb/client.py b/internal-enrichment/shodan-internetdb/src/shodan_internetdb/client.py index 9343ce94dc..e45f586917 100644 --- a/internal-enrichment/shodan-internetdb/src/shodan_internetdb/client.py +++ b/internal-enrichment/shodan-internetdb/src/shodan_internetdb/client.py @@ -4,9 +4,8 @@ from typing import List, Optional -import pydantic import requests -from pydantic import BaseModel +from pydantic.v1 import BaseModel, parse_raw_as __all__ = [ "ShodanInternetDbClient", @@ -43,7 +42,7 @@ def query(self, ip: str) -> Optional[ShodanResult]: resp.raise_for_status() - return pydantic.parse_raw_as(ShodanResult, resp.text) + return parse_raw_as(ShodanResult, resp.text) class ShodanResult(BaseModel): diff --git a/internal-enrichment/shodan-internetdb/src/shodan_internetdb/config.py b/internal-enrichment/shodan-internetdb/src/shodan_internetdb/config.py index e4fb100a38..78fa0b51d0 100644 --- a/internal-enrichment/shodan-internetdb/src/shodan_internetdb/config.py +++ b/internal-enrichment/shodan-internetdb/src/shodan_internetdb/config.py @@ -6,7 +6,7 @@ from typing import Any, Dict, ForwardRef import stix2 -from pydantic import BaseModel, BaseSettings, Field, validator +from pydantic.v1 import BaseModel, BaseSettings, Field, validator __all__ = [ "RootConfig", diff --git a/internal-import-file/import-document/src/reportimporter/core.py b/internal-import-file/import-document/src/reportimporter/core.py index 4a32109e11..db162dfaf7 100644 --- a/internal-import-file/import-document/src/reportimporter/core.py +++ b/internal-import-file/import-document/src/reportimporter/core.py @@ -14,7 +14,7 @@ StixCoreRelationship, get_config_variable, ) -from pydantic import BaseModel +from pydantic.v1 import BaseModel from reportimporter.constants import ( ANALYSIS_TYPE, ENTITY_CLASS, diff --git a/internal-import-file/import-document/src/reportimporter/models.py b/internal-import-file/import-document/src/reportimporter/models.py index 01ad90eb34..06ee44960e 100644 --- a/internal-import-file/import-document/src/reportimporter/models.py +++ b/internal-import-file/import-document/src/reportimporter/models.py @@ -5,7 +5,7 @@ from typing import Any, Dict, List, Optional, Pattern from pycti import OpenCTIConnectorHelper -from pydantic import BaseModel, validator +from pydantic.v1 import BaseModel, validator from reportimporter.constants import ( COMMENT_INDICATOR, CONFIG_PATH, diff --git a/internal-import-file/import-document/src/requirements.txt b/internal-import-file/import-document/src/requirements.txt index 59734c48e4..b728005a8a 100644 --- a/internal-import-file/import-document/src/requirements.txt +++ b/internal-import-file/import-document/src/requirements.txt @@ -3,7 +3,7 @@ urllib3==2.2.2 beautifulsoup4==4.12.3 pdfminer.six==20240706 stix==1.2.0.11 -pydantic==1.10.17 +pydantic==2.8.2 ioc-finder==7.3.0 dateparser==1.2.0 pyhumps==3.8.0 From 5d350cc4c953b3a4a1d0617197838741c773fb49 Mon Sep 17 00:00:00 2001 From: Frederic Basler Date: Fri, 2 Aug 2024 17:39:11 +0200 Subject: [PATCH 2/2] [Connectors] Up Linter --- external-import/alienvault/src/alienvault/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external-import/alienvault/src/alienvault/client.py b/external-import/alienvault/src/alienvault/client.py index 00f652f594..6a8aed188f 100644 --- a/external-import/alienvault/src/alienvault/client.py +++ b/external-import/alienvault/src/alienvault/client.py @@ -5,9 +5,9 @@ from datetime import datetime from typing import List -from pydantic.v1 import parse_obj_as from alienvault.models import Pulse from OTXv2 import OTXv2 +from pydantic.v1 import parse_obj_as __all__ = [ "AlienVaultClient",