diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index b57092c..0ca0f01 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: 5ca2c9b7-aea6-4a23-a631-998fcc6c18a8 management: - docChecksum: b8c29f264ba460af0cb5f3afb366b24d - docVersion: 1.0.65 - speakeasyVersion: 1.691.0 - generationVersion: 2.797.1 - releaseVersion: 0.12.2 - configChecksum: 6491b6d6f9a56ab147a09a40dc3a6980 + docChecksum: 133adc6bd5fd663ffb80f3e0b4509d77 + docVersion: 1.0.71 + speakeasyVersion: 1.700.2 + generationVersion: 2.801.2 + releaseVersion: 0.12.4 + configChecksum: a3186fbd4582b8547c35695d3eb76735 repoURL: https://github.com/censys/censys-sdk-python.git installationURL: https://github.com/censys/censys-sdk-python.git published: true persistentEdits: - generation_id: 783f4a9f-55b6-4b02-a3e6-6ce3c9a8d715 - pristine_commit_hash: d137f1dfa164ab25a3c3e0db61b74d9430652563 - pristine_tree_hash: 322a12c43afbcdb6197d16e737846beee3d0c4a8 + generation_id: cc48e3b5-1c6f-42ab-b2c5-5cf2bdd54ab3 + pristine_commit_hash: 15c77a369b5f26ce5f4069e4f7ebfb0dc79b0d63 + pristine_tree_hash: b37aa486ed21a24c4554c2300476d02d80a34e19 features: python: acceptHeaders: 3.0.0 @@ -850,8 +850,8 @@ trackedFiles: pristine_git_object: 63ede98e15cc5f639931a13cdeb887c0ee54e7f6 docs/models/http.md: id: d0a492ecfe27 - last_write_checksum: sha1:f817f9d3f73dd1c52fae21441799ce25bca4bdfa - pristine_git_object: 2581050aa058c7db570ade06d3967a30ac254c51 + last_write_checksum: sha1:4df4f0a51b9600d3159b431e7d105adb72b4af93 + pristine_git_object: e63b5478a015c41fd85147a9f406e041ac1be094 docs/models/httpfavicon.md: id: b842befcc593 last_write_checksum: sha1:fe8ff54d68baec3e0b3f035432ebabd6b202698a @@ -1292,6 +1292,14 @@ trackedFiles: id: 203e7d1f6276 last_write_checksum: sha1:bc4970cebe558aaea9e3d6bbc61a90385c652afa pristine_git_object: bce64bef7b7c1ed9959fb0c6e9da719d988ad94b + docs/models/networklog.md: + id: cdb33012451c + last_write_checksum: sha1:54c92c34e4d42dfc1719eceed33e5024738ff3df + pristine_git_object: 258d2ebbe8125421f4c830d7cf9fbbcc25d71b18 + docs/models/networklogresourceinfo.md: + id: c21946a0ed31 + last_write_checksum: sha1:5b2a48e4e2c039febf7a1a1570c6d8e5751293ae + pristine_git_object: 025184dfb7b6c81ce69c3dea300e0831b44a856a docs/models/newstatus.md: id: 1cad1834086b last_write_checksum: sha1:3706e3822bc61347f94a4ac04e27b5f529829c74 @@ -2938,8 +2946,8 @@ trackedFiles: pristine_git_object: 451f601a6382e06ed064d9e37bb0d2581bd472e9 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:8d16bad0e751c64e3017ab12e3744bad3d306d3f - pristine_git_object: 4a0c21160413270e6ce477b353b2029f1500d24c + last_write_checksum: sha1:64a5ae4c2766e77363d0cb14ed045d12c9c2d33f + pristine_git_object: a39f186e9f8aad4837ff70cd97e156debe578463 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:10d6ae008b24c68e99d7e8ba9c2e747070685ead @@ -2966,8 +2974,8 @@ trackedFiles: pristine_git_object: 352d3691d91c2d0ba0f05b48b56d4df5ce520098 src/censys_platform/_version.py: id: d2dc39704c23 - last_write_checksum: sha1:1da591135c960ae23e2dbf360f6b087efe97a450 - pristine_git_object: 7fd8eb675f3b056b799bc8a19a2a714a99fc0d9f + last_write_checksum: sha1:f58d46d54b73a8008ec34d95c377d58b423821f2 + pristine_git_object: 3b6b423d575a0988f0234a6d6d190149c4e65d73 src/censys_platform/account_management.py: id: 09993862b047 last_write_checksum: sha1:c635ab159be95add3d429513fb91143876bfc731 @@ -2990,16 +2998,16 @@ trackedFiles: pristine_git_object: 89560b566073785535643e694c112bedbd3db13d src/censys_platform/models/__init__.py: id: 4c65ae1e4fed - last_write_checksum: sha1:0cbba270d6282afc5340f6d0c60d6cdf012734ca - pristine_git_object: 3c5fc1a7fdd97de41b3b966bb3d60d775072e290 + last_write_checksum: sha1:aaecea428250a85d3c1a2fc7109faf64226db1d6 + pristine_git_object: ab90863cfc3e68ee2fa20b333b10c317d4455f85 src/censys_platform/models/activemq.py: id: c852b87bc559 last_write_checksum: sha1:5d8f5fbd113473e04d2d5824f960aebd03c6e892 pristine_git_object: ee70d786308cf51c1cd81a78dbb3a795ab781c93 src/censys_platform/models/alternativequery.py: id: fa781a546da9 - last_write_checksum: sha1:4785eb1fc1133d65f82c655db113e012b65caa44 - pristine_git_object: 01b811c57fc98558e10ea4b897b6d28ce066e32d + last_write_checksum: sha1:78757a94a5fb72e59421b920b0738db4b5d7c2d1 + pristine_git_object: 372fbdbe04ce6d697ead04e6560d845bac6b7e37 src/censys_platform/models/amqp.py: id: 9e019f90c724 last_write_checksum: sha1:08a414f88d796153324c688366fcbe2bc09547e7 @@ -3038,8 +3046,8 @@ trackedFiles: pristine_git_object: 1b85f9395a692c9142ab40d9d654c36389c21304 src/censys_platform/models/attribute.py: id: 4cfb472595bf - last_write_checksum: sha1:c0100c14faaef335da3d74bb5ba893a58178fbd8 - pristine_git_object: 18a0f47f6911a8b24bc82336b67b0466ac2878d2 + last_write_checksum: sha1:e95271ec27409b7deaa3960d916e7105f31f6d72 + pristine_git_object: 72841242620f04685d872ffab541667f2c37d880 src/censys_platform/models/auth.py: id: 55cb26736ab0 last_write_checksum: sha1:443dd8bc8e19ddc60e52a537254a091ad1e5b26b @@ -3082,8 +3090,8 @@ trackedFiles: pristine_git_object: 97fca1e64af3437da5a8ad8d5f34692a76117cfc src/censys_platform/models/certificate.py: id: 291c652ad33b - last_write_checksum: sha1:ab1134ce762404a9b073d469cf865e5ec9475794 - pristine_git_object: d7a6d234a708184652f90f09e6021e810c1440b1 + last_write_checksum: sha1:7ebaf99c5540e69ec5146778a48142c5e5105314 + pristine_git_object: 880cf931ef4ff8baebff469b50ff749da57ffcc9 src/censys_platform/models/certificate_parsed.py: id: 8d2443039e43 last_write_checksum: sha1:a185d095b80c9e66dcd5319083c1b4d279d70431 @@ -3106,8 +3114,8 @@ trackedFiles: pristine_git_object: 561eaa04d39d46ec29621cc7971ea75da997abdc src/censys_platform/models/certificaterevocation_revocationinfo.py: id: 93260fb10092 - last_write_checksum: sha1:b2936c6e83b7443725acb3f5aa3581d3633c10f2 - pristine_git_object: c20d8a89c6daf4e0f09a1af97c8fb166b4ee8623 + last_write_checksum: sha1:f10ae399606e7168a2976c68fd48ef65858ba507 + pristine_git_object: 5f1f788ce713d8c3d1111301be1cf21d079b0645 src/censys_platform/models/checkpointtopology.py: id: 78362122db98 last_write_checksum: sha1:bb77c70012ca8ecb8c6e166ec047a0006c5aaa0a @@ -3182,8 +3190,8 @@ trackedFiles: pristine_git_object: 8f0d546ab03a71a0204907e244f3e5914f0f116a src/censys_platform/models/collection.py: id: 85cf87546205 - last_write_checksum: sha1:0f4a84d380466b605c5a82c7a55c80c9e0867d0f - pristine_git_object: 4758082366cc7b5ebaab6ab670cf8dba0c1a2f8f + last_write_checksum: sha1:64bff3647e33c881efbcf1cae8a4515bf9a2bffe + pristine_git_object: 754638dcc99691441a27d69b3879aa83f5d820fa src/censys_platform/models/collectionevent.py: id: 8e4536c271ed last_write_checksum: sha1:06ec7c046040851935ca7da1ef1a62772aee086c @@ -3226,8 +3234,8 @@ trackedFiles: pristine_git_object: 5d0008119899e89aedf930fd348b2d33cd9d1282 src/censys_platform/models/creditusagereport.py: id: 30edd208be3c - last_write_checksum: sha1:db4da6928c66fc89380354c958cb1927391ec930 - pristine_git_object: a1976c33717b15a19fedffcd52f855e2e7ae97de + last_write_checksum: sha1:3c049516a0acd474fc4fdbabcf090dd4ef018db2 + pristine_git_object: e3f25a8102948964deb3876ac5dd41bfcb461363 src/censys_platform/models/creditusagereportperiod.py: id: 0a8a1e52291c last_write_checksum: sha1:26c5ae1f41a9540712517ad6e0377b61867eab7c @@ -3266,16 +3274,16 @@ trackedFiles: pristine_git_object: a8869db959443e187b55064f5d7f79c0aefd2696 src/censys_platform/models/cvss_components.py: id: 8aa73fb4d166 - last_write_checksum: sha1:3cb78be5db8e526bfbcc94b07af54370e877d51a - pristine_git_object: 668ffcba1901cf7a2cc44efd927530214769c9bf + last_write_checksum: sha1:2d3c07f5410cf5a0a95cce2b45e1d2e63a72f05d + pristine_git_object: 670277b1c597ac14a6d058aba64adaf9600ea211 src/censys_platform/models/cvssv4.py: id: e272ae4721c6 last_write_checksum: sha1:6e7391960fe897b16f11ee96506a4b1abf9be000 pristine_git_object: 4d9c05a5212df6a585484f0783fb24abf7768838 src/censys_platform/models/cvssv4_components.py: id: dbb995326704 - last_write_checksum: sha1:e1f5a6fe87c58b9f2ffde48f5a26bb83cf8750aa - pristine_git_object: a9e301ceb0a5c21602e5ca993f7c7e0e86931d55 + last_write_checksum: sha1:2b6692e420bdf758c49c19fc6d827ad75c5d3421 + pristine_git_object: 98d1a43fe6778e373693d4858987859a69d11820 src/censys_platform/models/cwe.py: id: e887e5a31976 last_write_checksum: sha1:3e49bffd4761919c406c93f470ffaef51a1213df @@ -3342,16 +3350,16 @@ trackedFiles: pristine_git_object: 5f9ca61f73caa14345533e3767fc97519a2d34ff src/censys_platform/models/dns.py: id: c9f1645ee012 - last_write_checksum: sha1:8d51f88157518c7871f7c6dd9a584f853f14a782 - pristine_git_object: 7f83a034dfd30513b07a99cc2afdcffc6bcdc67e + last_write_checksum: sha1:2371c6440c115430e7eccaef04906712cfd27360 + pristine_git_object: 491ebbe8ee64cec95107330f867564c5a54d0e75 src/censys_platform/models/dns_edns.py: id: 887a28d2d0ed last_write_checksum: sha1:fc4d86b65c59effb855082145484e5e88256d50e pristine_git_object: 0fbcfe01d2ed693b14a3780bcf5867f2daca5a18 src/censys_platform/models/dns_resourcerecord.py: id: dc6d47644d43 - last_write_checksum: sha1:3d341a8e15174a0641595f84755bef7ecfb4ac07 - pristine_git_object: ace271bbbabf192e83c6eca3bd45cae3e92b1431 + last_write_checksum: sha1:06914cb6325ffd62f12ec5378f5c71fcfc19745f + pristine_git_object: 3a868eb162c4b35735e818bb016486289a050c49 src/censys_platform/models/dsacryptographickey.py: id: 3c7788304b89 last_write_checksum: sha1:cfe3de15e14dd5c048400e32dc15b251913391d0 @@ -3490,16 +3498,16 @@ trackedFiles: pristine_git_object: 0d436b8ee5214537a9c96f6ae6b8a656e9844731 src/censys_platform/models/endpointscan.py: id: e9034f3e14f9 - last_write_checksum: sha1:b3b9676600b08e954b9dcce50be05a5132a29fb7 - pristine_git_object: 052b116b8f5e3c2ea2d75d31fe928ff07e6143e8 + last_write_checksum: sha1:64dbbf1e463ad72d63c777519383425b858ea997 + pristine_git_object: 19d9fce4a9e2a6db93644ba35d03d28bc0f95987 src/censys_platform/models/endpointscanned.py: id: 62ea4d26c40d last_write_checksum: sha1:ecabec2de77a03c68c101390410dc7a42b2f8f9a pristine_git_object: 6ef2d04fb7fc32302a63a67c9935c0dcbb21bec5 src/censys_platform/models/endpointscanstate.py: id: 7b8f1fb78573 - last_write_checksum: sha1:b77f48700e5a5b9eedd4edd550f3710433e59479 - pristine_git_object: 1cd5387916673612820c652356a228c0eb668fb4 + last_write_checksum: sha1:695e3be33481dc184d5ab6a6dae66752d01e928d + pristine_git_object: 71b7d12f989e739e12c322c502b58b147b789503 src/censys_platform/models/epmd.py: id: 8088ccd12b02 last_write_checksum: sha1:c571b916c2c8a7a2c5134b5022b0d38b8e768e4b @@ -3542,16 +3550,16 @@ trackedFiles: pristine_git_object: dbdffaa38f26dc884129e10ea813232f59cd2626 src/censys_platform/models/eventassetchange.py: id: 3589a65fbbda - last_write_checksum: sha1:c00b6c779b91e2351a3176b1313efa0caf8159bf - pristine_git_object: 49d675320f264303a10999f251fbddc171be741c + last_write_checksum: sha1:3fee7469199082641d3b6e755a5deda64b2c3db9 + pristine_git_object: 0838a90413ede9e62eb8860c6e935e032f1710dc src/censys_platform/models/eventscapabilities.py: id: 7aaf31aa8461 last_write_checksum: sha1:c77995b38d305b47c47e1f45fb9d0f2c2d67b19f pristine_git_object: 44ac74b82171507af45b836662d60bc99ec312d0 src/censys_platform/models/eventstatuschange.py: id: 6d86a618b8fc - last_write_checksum: sha1:71e3707762b4f8af97fc9fd60f50b2f7b52c2c1d - pristine_git_object: 85efc372e12517895a0795f49ed04be37523f4eb + last_write_checksum: sha1:798d50aa26bf3f9747a78a47da25a829382d5ed8 + pristine_git_object: 40acbbeb6f68a3cb130875a23428405a7d420485 src/censys_platform/models/evidence.py: id: 8bf86872666c last_write_checksum: sha1:7945a206b87ac884047e6f0981f7a2b7caab63b6 @@ -3666,8 +3674,8 @@ trackedFiles: pristine_git_object: 98b2456460281acfa7a654d8fcc55bcb3820df3d src/censys_platform/models/hostdns_forwardresolution.py: id: cc65ed390d82 - last_write_checksum: sha1:3f39539781a13eabbbefeb663d3cafaf05a31fcd - pristine_git_object: f219be48d7cceda73e280d31a78528d92746e475 + last_write_checksum: sha1:b6c4dd2a199db7b7e4603050fa53f4bba5937f92 + pristine_git_object: 718dfb58541c08ff7e78e07d9cca013a62c6a455 src/censys_platform/models/hostdns_reverseresolution.py: id: a0b22d1e690d last_write_checksum: sha1:83340cde3d323d0fb9050106362d84b53b99e680 @@ -3694,16 +3702,16 @@ trackedFiles: pristine_git_object: 211ab328216652abdb52dac45b75b2d3419567fc src/censys_platform/models/http.py: id: 7012123f903d - last_write_checksum: sha1:c76946e358af22ec3dc4d18b50a238e07dd22cc4 - pristine_git_object: 11ffeb7c95ebe8a859d45e41700474c9051bc73d + last_write_checksum: sha1:965719c5e12073a0bb2cd9a78b3374897ade0bef + pristine_git_object: 2245a1c29b6ef69aca5e4e22c7ebe4ff3a2f3e86 src/censys_platform/models/http_favicon.py: id: 37a2247b162b last_write_checksum: sha1:7cbedfcc9ba8fc1ed53240533c02d1585805f18e pristine_git_object: cb8d1cb08d2ddd69c2caa6ad370ba233463f92b3 src/censys_platform/models/http_redirectchainlink.py: id: f3cdca0b5525 - last_write_checksum: sha1:569f1d26ed67a0361fd344e40c3981435b8c23ec - pristine_git_object: 3fd575d2b95774761b290351ce63f59e066a1cc1 + last_write_checksum: sha1:17d6bbab2a897f94ea760e241e5bd7728a40a0b5 + pristine_git_object: 8eccbf1dc79d999a0c0be4db96b5768bbb7c883f src/censys_platform/models/http_repeatedheaders.py: id: ab701e3cdc54 last_write_checksum: sha1:23e848090ce9699d2e3123764c36aeaa6223abb7 @@ -3830,8 +3838,8 @@ trackedFiles: pristine_git_object: ff2d830d70b21ccea1435d20805e31a6099494d9 src/censys_platform/models/jarmscan.py: id: 22fb21faead0 - last_write_checksum: sha1:98be6a7ee240e5fb45511c678f595208842ab68b - pristine_git_object: f9672c2b4408c023b6adeb68c9a9221eb5503140 + last_write_checksum: sha1:2cca660ff5e30b15291916cb1438c3ebd51eb12f + pristine_git_object: a3d8eae5b5a47ab62d2ba779dfacf57aa116fd6d src/censys_platform/models/jarmscanned.py: id: d0139975c20d last_write_checksum: sha1:12c25c523f7d76e979c943fa77c01b90ab2a173b @@ -3854,8 +3862,8 @@ trackedFiles: pristine_git_object: 17bc76e431b5f25ef51c9daba75ff3451777aa57 src/censys_platform/models/kev.py: id: da2fa8069b00 - last_write_checksum: sha1:239e137a202272ecdc741da42a35eb25019d37f1 - pristine_git_object: 97688612ff1056af638c4b5f2a4c836373c4f404 + last_write_checksum: sha1:10354aec3977ce9fbbf892aa05323aaa8f10deb4 + pristine_git_object: 37833462370c051532cab0b61c8bcabaad866c45 src/censys_platform/models/keyalgorithm.py: id: a5bc8309f417 last_write_checksum: sha1:55ce80612623222a8da1d1eade0ee3cc0c9243bc @@ -3926,8 +3934,8 @@ trackedFiles: pristine_git_object: 7f20c5da2b9620d5450ba1f23a9bb31f9a7d32fd src/censys_platform/models/label.py: id: becad33cc37f - last_write_checksum: sha1:c200f2026bd4757bdd2e8ce7a7aba14737caa224 - pristine_git_object: af4a39d4a6b05f6073c0e7046290be8667cea8d4 + last_write_checksum: sha1:2e5743e3fc5a6357ab2454611c9bd118588540f0 + pristine_git_object: 377cf9f807ae54cbda4b3b57dba5f114b6f556f2 src/censys_platform/models/ldap.py: id: b451a3030a09 last_write_checksum: sha1:1a27b650a484b57b6d5636c31d7d1f74c4ae6027 @@ -3958,8 +3966,8 @@ trackedFiles: pristine_git_object: 408291eb012a71ad4a3c72ff598a362fe44364b0 src/censys_platform/models/matchedservice.py: id: 8ac9ef9d68c0 - last_write_checksum: sha1:74d8ae18ace978d0bee583c9b769c4ff50c97368 - pristine_git_object: 51eb196500fa7cdc6426a1e70cfde56714f2deb9 + last_write_checksum: sha1:24637e6d3001d6232cb8f3991bcbef31b9bd875e + pristine_git_object: 51da195281cb537be5851ebac308e83c944ebc0d src/censys_platform/models/mdns.py: id: 892cdc4aec3c last_write_checksum: sha1:c89153cb82c589d39dc84e121ed6b61c9cde5fff @@ -4120,6 +4128,14 @@ trackedFiles: id: df57a65e4bf8 last_write_checksum: sha1:02940d233dbbcb427be68dc8003d93929307351e pristine_git_object: 19588fe6c60ad258905472a16245633976636fc1 + src/censys_platform/models/networklog.py: + id: ed29292c49bb + last_write_checksum: sha1:61ce0212d8d456ae5231655c747b21529cd2c050 + pristine_git_object: 0ada169da49f17c5c9be95d14b1b7956a59cd37a + src/censys_platform/models/networklog_resourceinfo.py: + id: 561e85d90544 + last_write_checksum: sha1:4f3aecd91cc68ad0f8bbb2068660262678528a82 + pristine_git_object: b676739ab9ea5397a6a2cda9586dfc5fb366ed52 src/censys_platform/models/nfsmountd.py: id: 51c06e6b4f8d last_write_checksum: sha1:c51830bff8e357045f63cdedefc45c9e44921813 @@ -4478,16 +4494,16 @@ trackedFiles: pristine_git_object: b229a39cba08bdfabc2cadb79e25e8b09d474572 src/censys_platform/models/reject.py: id: e3227f28ecbd - last_write_checksum: sha1:edb2682a4f536ca26a8ec9555119b77ef3c2e0fc - pristine_git_object: d70ce12e80ff2a8f5a5d84054b37b900462297e6 + last_write_checksum: sha1:b90eba1cf59b0e44182a93d5b3c30b5ce79ca2eb + pristine_git_object: 9e40820adea7987b6000429c363e40357e4497bd src/censys_platform/models/replaycapabilities.py: id: 2dec08a9f8c4 last_write_checksum: sha1:cbbe0f04d0f89facbf6c2c00a78d0835c94cc258 pristine_git_object: 877d057e70db1292c0e991976976d61a8b45b7b2 src/censys_platform/models/representativeinfo.py: id: c4ddf3932518 - last_write_checksum: sha1:f9c7d12c0af2adf99e23aa6774f0d42026183938 - pristine_git_object: 311543cd75b9d27da338e52c963849d6f851cf06 + last_write_checksum: sha1:313743cb741e18d493ceabbed0c68e612b838b22 + pristine_git_object: 1149755546ca90b9bed84d5da2680c8737ff5e3c src/censys_platform/models/responseenvelopecertificateasset.py: id: 0f38477cd4cc last_write_checksum: sha1:84c756009251a103278aa9fa15ca3f77f6a6442d @@ -4610,8 +4626,8 @@ trackedFiles: pristine_git_object: 54e634beb42e7031a9f847c9666abdb998570bb1 src/censys_platform/models/risk.py: id: 0b47bdbe2e69 - last_write_checksum: sha1:16123b4b28ad0f10432cb5e8d6827029e2a7559e - pristine_git_object: 946b6b0ca39bdc505fead600776e6e09ae4d8ab8 + last_write_checksum: sha1:3321ef0d43b39f634eb4c7342768396fe7147453 + pristine_git_object: 8fed77ac6c1576420034342cde66674478d3fe7b src/censys_platform/models/rlogin.py: id: 32fb1187dfbb last_write_checksum: sha1:e13c7f0ec67197ede4161cee385f008f5eb0a949 @@ -4634,8 +4650,8 @@ trackedFiles: pristine_git_object: b68fde718922c514d3285028251e72526c998739 src/censys_platform/models/rootstore.py: id: ac37c6e6e433 - last_write_checksum: sha1:aaf0bd0972901f6554187622e93f5f4a9618fb4f - pristine_git_object: 53465951485da6a77fc4793453aee9c57860e972 + last_write_checksum: sha1:d7e4c40ff0357da3490c6ee7b6ce5fdb669f62fb + pristine_git_object: d1777da1490e3002b73b9baf1a2b4325dd5526c8 src/censys_platform/models/rootstore_chain.py: id: 223e62e08979 last_write_checksum: sha1:922218816340f096ccd0bcb94e809fd662a710d8 @@ -4730,8 +4746,8 @@ trackedFiles: pristine_git_object: b8b1669002c9f996a83812127762115e01e2de56 src/censys_platform/models/searchconvertqueryresponse.py: id: 59a8c6898cc0 - last_write_checksum: sha1:a661a8c5f4a41446a3ff1e8d0fae51dfd0e5ab6a - pristine_git_object: 823cfdc4c0aa6eb4ed311b60573ca0c09455cbe1 + last_write_checksum: sha1:555b2ee9f00d5cb90e46113566f9d62c1b10135a + pristine_git_object: e3b0ed7a7110140a1761fc1af087126c99473b21 src/censys_platform/models/searchqueryhit.py: id: a3b996ab9936 last_write_checksum: sha1:f8ecba5a49a39c188311ec5ac768b189d06be1fc @@ -4774,16 +4790,16 @@ trackedFiles: pristine_git_object: a7391bbf7b2dc4f949ac86ac6969dd4b84d2ce44 src/censys_platform/models/service.py: id: 25dc1044897b - last_write_checksum: sha1:053da9c55b05c2f4c9e2d55c315f17811d63b44b - pristine_git_object: bc33d18cd776a6e6a83bef93cb4ac0a98e53382b + last_write_checksum: sha1:b6d433fc7b07070012711ab4cc81b0029362319e + pristine_git_object: 92db92f9511d251187e973f9b500d3ff72f6246e src/censys_platform/models/serviceid.py: id: 52a5b098ac72 - last_write_checksum: sha1:c4a2658ab45deb7e3dbe968c9835ab7f3553b641 - pristine_git_object: c4c6f67ff6f23fd1693b78a9f3bba28b243b5db1 + last_write_checksum: sha1:1e7bf71c1365b3f352342f5de05fd85c63345b7a + pristine_git_object: fb52b69a02398d69fe680fbbf1f9e131707cfd26 src/censys_platform/models/servicescan.py: id: 24c47a42f886 - last_write_checksum: sha1:7b8e129cce8e7ba199212f599ed21c6a1139230a - pristine_git_object: dd6b91fd2c44efb36d7fee09bd5a6892ea08c8bd + last_write_checksum: sha1:c8c79161d1fb321a6251f001a9d14ead697cc025 + pristine_git_object: 4de276e5b6983f15805d43b7ef69ff30f3195e74 src/censys_platform/models/servicescanned.py: id: 7a118692950e last_write_checksum: sha1:026ccd1b0189bfba2baa9b352deaefb55c4bce36 @@ -4942,8 +4958,8 @@ trackedFiles: pristine_git_object: 4dfeb00d3361ca179f9b8b43bf32a3e1bda1f7c3 src/censys_platform/models/threat.py: id: 6e8ab6e20796 - last_write_checksum: sha1:7b31f0d001405dfd89ccf467a290a699f94b6fdd - pristine_git_object: 5caf341b9f7d58ce0643fb0e1fcc3e6a99e29379 + last_write_checksum: sha1:3e3d6c716f0403e5f77380ae73892b2aa2b1c127 + pristine_git_object: af98c3e78c77bc4cfb85b4b4466dbf84555e1073 src/censys_platform/models/threat_actor.py: id: c826b9893395 last_write_checksum: sha1:7dbef7f486d4f45d4a22dfc687ee0a80f122051a @@ -4974,16 +4990,16 @@ trackedFiles: pristine_git_object: c0c0328d546aa9279d5e398bbf8201f050be3d5e src/censys_platform/models/tls.py: id: 28f934d811f8 - last_write_checksum: sha1:5a1c9432b7f4a4132f2f6fff97b805c6ec42ad7c - pristine_git_object: 0f5c99e88966c44cfde26fb0960c136b35c9e1fd + last_write_checksum: sha1:fb0f72d76f1c9ccf45ae4ddefcc585c902101185 + pristine_git_object: 76d0138a8c4538aa0c99e07c98cf2b47b7cc619b src/censys_platform/models/tls_chain.py: id: b670adfe054b last_write_checksum: sha1:720f257a527324384965ec2b0d3e2b1d51591f32 pristine_git_object: 7e63f8302b67e2288d0bb05f11c97d76f791dafc src/censys_platform/models/tls_versiondata.py: id: 72380b2a1487 - last_write_checksum: sha1:a5e1c7a5b358f6b0f0806489c33575170a71eb51 - pristine_git_object: 465690ce39538c6922616908c57f50b6f654eddf + last_write_checksum: sha1:927e88ab53bedf00d93c24887d94c04755215920 + pristine_git_object: 0d0ae8d397fc4538c851646b0e16a9e0192483d5 src/censys_platform/models/torservicedescriptor.py: id: 109d9e38d13a last_write_checksum: sha1:43e877ecef2bc9a66b66923df336c1d14c63fcc6 @@ -5010,8 +5026,8 @@ trackedFiles: pristine_git_object: 07098a8a482322f843a4e9e50aac1ed195022d0f src/censys_platform/models/trackedscan_task.py: id: 7bf05e568d3a - last_write_checksum: sha1:502a2bd7f9c76c5a73c3a06923c1c734217ab946 - pristine_git_object: 2ddaec96d2b6d0b841775236094ce183a2f53ac1 + last_write_checksum: sha1:dce4a349ff7ab97731dd801745bcff2a3ad43f46 + pristine_git_object: 5c8539b170667948dd27f18ec6a466644b66a530 src/censys_platform/models/unitronicspcom.py: id: be03a5ba7e18 last_write_checksum: sha1:de9026c78d2775306207f790d6d8c470ae03b729 @@ -5234,8 +5250,8 @@ trackedFiles: pristine_git_object: cfef571bd9ed74eac3abb80cfbb3bca035f9d8ea src/censys_platform/models/vuln.py: id: f51f970c072b - last_write_checksum: sha1:6489b4ef5216dcd8f3114b7aecf26c21e04e5e63 - pristine_git_object: 759e193652f88649c910d0d89e80d8364df5012e + last_write_checksum: sha1:f2e5f657bbd5cc95365125c1c35f288f9b62bce8 + pristine_git_object: 2f735691ae0ebb1911199b99d280a4e8d80e4d53 src/censys_platform/models/weblogict3.py: id: 3b51cf2919e4 last_write_checksum: sha1:688fe2fba13dc347344c3f4bd7b57f80b3578fe6 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 387a3d8..a3ce8fc 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.691.0 +speakeasyVersion: 1.700.2 sources: converge-source: sourceNamespace: converge-source - sourceRevisionDigest: sha256:921e943ec014cc1b8ab35a109ec052b30e1c4c30126e88e72b592fcd275e0e87 - sourceBlobDigest: sha256:ebf605a4da74b201214ffd90386798dcc36a8e73da11bd1035ab4aacbc187e76 + sourceRevisionDigest: sha256:7b3f780b817d3434a2d2aeb310cf8987d91c3d3a493f1b73bcf32ec3e877d56a + sourceBlobDigest: sha256:c82ea45eb541f2b2bd01aea26cd7a561098f9326ed7163df172c5ead3787bf44 tags: - latest - - speakeasy-sdk-regen-1767832222 - - 1.0.65 + - speakeasy-sdk-regen-1769214570 + - 1.0.71 targets: censys-sdk-python: source: converge-source sourceNamespace: converge-source - sourceRevisionDigest: sha256:921e943ec014cc1b8ab35a109ec052b30e1c4c30126e88e72b592fcd275e0e87 - sourceBlobDigest: sha256:ebf605a4da74b201214ffd90386798dcc36a8e73da11bd1035ab4aacbc187e76 + sourceRevisionDigest: sha256:7b3f780b817d3434a2d2aeb310cf8987d91c3d3a493f1b73bcf32ec3e877d56a + sourceBlobDigest: sha256:c82ea45eb541f2b2bd01aea26cd7a561098f9326ed7163df172c5ead3787bf44 codeSamplesNamespace: converge-source-python-code-samples - codeSamplesRevisionDigest: sha256:29a2377d4a9b0ef7ce9f8c207efae22e3d21be7b11fd5a26606f85dabe436fb9 + codeSamplesRevisionDigest: sha256:46f0471c3f518d7e1db3d3de0440503636ca49c3fa2d444e8e82b9a532835db1 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 2cf26d8..c47cfe8 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -186,4 +186,14 @@ Based on: ### Generated - [python v0.12.2] . ### Releases -- [PyPI v0.12.2] https://pypi.org/project/censys-platform/0.12.2 - . \ No newline at end of file +- [PyPI v0.12.2] https://pypi.org/project/censys-platform/0.12.2 - . + +## 2026-01-29 19:03:29 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.700.2 (2.801.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.12.4] . +### Releases +- [PyPI v0.12.4] https://pypi.org/project/censys-platform/0.12.4 - . \ No newline at end of file diff --git a/docs/models/http.md b/docs/models/http.md index 2581050..e63b547 100644 --- a/docs/models/http.md +++ b/docs/models/http.md @@ -14,6 +14,7 @@ | `headers` | Dict[str, [models.HTTPRepeatedHeaders](../models/httprepeatedheaders.md)] | :heavy_minus_sign: | The key-value header pairs included in the response. | | `html_tags` | List[*str*] | :heavy_minus_sign: | A list of the and <meta> tags from services.http.response.body. | | `html_title` | *Optional[str]* | :heavy_minus_sign: | The title of the HTML page: the inner contents of the <title> tag in the response body, if present. | +| `network_log` | [Optional[models.NetworkLog]](../models/networklog.md) | :heavy_minus_sign: | N/A | | `protocol` | *Optional[str]* | :heavy_minus_sign: | The protocol field of the response, which includes the claimed HTTP version number. | | `redirect_chain` | List[[models.HTTPRedirectChainLink](../models/httpredirectchainlink.md)] | :heavy_minus_sign: | If the scan redirects, the list of followup scans performed | | `status_code` | *Optional[int]* | :heavy_minus_sign: | A 3-digit integer result code indicating the result of the services.http.request. | diff --git a/docs/models/networklog.md b/docs/models/networklog.md new file mode 100644 index 0000000..258d2eb --- /dev/null +++ b/docs/models/networklog.md @@ -0,0 +1,9 @@ +# NetworkLog + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `har_handle` | *Optional[str]* | :heavy_minus_sign: | Storage handle for the full HAR network log. | +| `resources` | List[[models.NetworkLogResourceInfo](../models/networklogresourceinfo.md)] | :heavy_minus_sign: | Resources fetched during page load. | \ No newline at end of file diff --git a/docs/models/networklogresourceinfo.md b/docs/models/networklogresourceinfo.md new file mode 100644 index 0000000..025184d --- /dev/null +++ b/docs/models/networklogresourceinfo.md @@ -0,0 +1,17 @@ +# NetworkLogResourceInfo + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `host` | *Optional[str]* | :heavy_minus_sign: | Hostname from the URL. | +| `md5` | *Optional[str]* | :heavy_minus_sign: | MD5 hash of the resource content. | +| `mime_type` | *Optional[str]* | :heavy_minus_sign: | MIME type of the resource. | +| `path` | *Optional[str]* | :heavy_minus_sign: | Path from the URL. | +| `port` | *Optional[str]* | :heavy_minus_sign: | Port from the URL. | +| `scheme` | *Optional[str]* | :heavy_minus_sign: | URL scheme (e.g., http, https). | +| `sha1` | *Optional[str]* | :heavy_minus_sign: | SHA-1 hash of the resource content. | +| `sha256` | *Optional[str]* | :heavy_minus_sign: | SHA-256 hash of the resource content. | +| `size` | *Optional[int]* | :heavy_minus_sign: | Size of the resource in bytes. | +| `url` | *Optional[str]* | :heavy_minus_sign: | Full URL of the resource. | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 4a0c211..a39f186 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "censys-platform" -version = "0.12.2" +version = "0.12.4" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/src/censys_platform/_version.py b/src/censys_platform/_version.py index 7fd8eb6..3b6b423 100644 --- a/src/censys_platform/_version.py +++ b/src/censys_platform/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "censys-platform" -__version__: str = "0.12.2" -__openapi_doc_version__: str = "1.0.65" -__gen_version__: str = "2.797.1" -__user_agent__: str = "speakeasy-sdk/python 0.12.2 2.797.1 1.0.65 censys-platform" +__version__: str = "0.12.4" +__openapi_doc_version__: str = "1.0.71" +__gen_version__: str = "2.801.2" +__user_agent__: str = "speakeasy-sdk/python 0.12.4 2.801.2 1.0.71 censys-platform" try: if __package__ is not None: diff --git a/src/censys_platform/models/__init__.py b/src/censys_platform/models/__init__.py index 3c5fc1a..ab90863 100644 --- a/src/censys_platform/models/__init__.py +++ b/src/censys_platform/models/__init__.py @@ -602,6 +602,11 @@ from .nbd import Nbd, NbdTypedDict from .network import Network, NetworkTypedDict from .networkcapabilities import NetworkCapabilities, NetworkCapabilitiesTypedDict + from .networklog import NetworkLog, NetworkLogTypedDict + from .networklog_resourceinfo import ( + NetworkLogResourceInfo, + NetworkLogResourceInfoTypedDict, + ) from .nfsmountd import NfsMountd, NfsMountdTypedDict from .nmea import Nmea, NmeaTypedDict from .nmea_nmeamessage import NmeaNmeaMessage, NmeaNmeaMessageTypedDict @@ -1962,6 +1967,10 @@ "Network", "NetworkCapabilities", "NetworkCapabilitiesTypedDict", + "NetworkLog", + "NetworkLogResourceInfo", + "NetworkLogResourceInfoTypedDict", + "NetworkLogTypedDict", "NetworkTypedDict", "NewStatus", "NfsMountd", @@ -3337,6 +3346,10 @@ "NetworkTypedDict": ".network", "NetworkCapabilities": ".networkcapabilities", "NetworkCapabilitiesTypedDict": ".networkcapabilities", + "NetworkLog": ".networklog", + "NetworkLogTypedDict": ".networklog", + "NetworkLogResourceInfo": ".networklog_resourceinfo", + "NetworkLogResourceInfoTypedDict": ".networklog_resourceinfo", "NfsMountd": ".nfsmountd", "NfsMountdTypedDict": ".nfsmountd", "Nmea": ".nmea", diff --git a/src/censys_platform/models/alternativequery.py b/src/censys_platform/models/alternativequery.py index 01b811c..372fbdb 100644 --- a/src/censys_platform/models/alternativequery.py +++ b/src/censys_platform/models/alternativequery.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import utils from censys_platform.types import BaseModel, Nullable, UNSET_SENTINEL from enum import Enum from pydantic import model_serializer @@ -8,7 +9,7 @@ from typing_extensions import TypedDict -class Targets(str, Enum): +class Targets(str, Enum, metaclass=utils.OpenEnumMeta): HOST = "host" WEB = "web" CERT = "cert" diff --git a/src/censys_platform/models/attribute.py b/src/censys_platform/models/attribute.py index 18a0f47..7284124 100644 --- a/src/censys_platform/models/attribute.py +++ b/src/censys_platform/models/attribute.py @@ -4,6 +4,7 @@ from .cpe import Cpe, CpeTypedDict from .cpe_lifecycle import CPELifeCycle, CPELifeCycleTypedDict from .evidence import Evidence, EvidenceTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -12,12 +13,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class Source(str, Enum): +class Source(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" RECOG = "recog" @@ -69,6 +70,15 @@ class Attribute(BaseModel): version: Optional[str] = None + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.Source(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/certificate.py b/src/censys_platform/models/certificate.py index d7a6d23..880cf93 100644 --- a/src/censys_platform/models/certificate.py +++ b/src/censys_platform/models/certificate.py @@ -6,6 +6,7 @@ from .ct import Ct, CtTypedDict from .validation import Validation, ValidationTypedDict from .zlint import ZLint, ZLintTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -14,19 +15,19 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class ParseStatus(str, Enum): +class ParseStatus(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" SUCCESS = "success" FAIL = "fail" CORRUPTED = "corrupted" -class ValidationLevel(str, Enum): +class ValidationLevel(str, Enum, metaclass=utils.OpenEnumMeta): r"""The extent to which the certificate's issuer validated the identity of the entity requesting the certificate. Options include Domain validated (DV), Organization Validated (OV), or Extended Validation (EV).""" UNKNOWN = "" @@ -142,6 +143,24 @@ class Certificate(BaseModel): zlint: Optional[ZLint] = None + @field_serializer("parse_status") + def serialize_parse_status(self, value): + if isinstance(value, str): + try: + return models.ParseStatus(value) + except ValueError: + return value + return value + + @field_serializer("validation_level") + def serialize_validation_level(self, value): + if isinstance(value, str): + try: + return models.ValidationLevel(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/certificaterevocation_revocationinfo.py b/src/censys_platform/models/certificaterevocation_revocationinfo.py index c20d8a8..5f1f788 100644 --- a/src/censys_platform/models/certificaterevocation_revocationinfo.py +++ b/src/censys_platform/models/certificaterevocation_revocationinfo.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class Reason(str, Enum): +class Reason(str, Enum, metaclass=utils.OpenEnumMeta): r"""An enumerated value indicating the issuer-supplied reason for the revocation.""" UNKNOWN = "" @@ -46,6 +47,15 @@ class CertificateRevocationRevocationInfo(BaseModel): revoked: Optional[bool] = None r"""Whether the certificate has been revoked before its expiry date by the issuer.""" + @field_serializer("reason") + def serialize_reason(self, value): + if isinstance(value, str): + try: + return models.Reason(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["next_update", "reason", "revocation_time", "revoked"]) diff --git a/src/censys_platform/models/collection.py b/src/censys_platform/models/collection.py index 4758082..754638d 100644 --- a/src/censys_platform/models/collection.py +++ b/src/censys_platform/models/collection.py @@ -1,15 +1,16 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, Nullable, UNSET_SENTINEL from datetime import datetime from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class CollectionStatus(str, Enum): +class CollectionStatus(str, Enum, metaclass=utils.OpenEnumMeta): UNSPECIFIED = "unspecified" POPULATING = "populating" ACTIVE = "active" @@ -17,7 +18,7 @@ class CollectionStatus(str, Enum): ARCHIVED = "archived" -class StatusReason(str, Enum): +class StatusReason(str, Enum, metaclass=utils.OpenEnumMeta): UNSPECIFIED = "unspecified" NOT_ENOUGH_CREDITS = "not_enough_credits" NOT_ENTITLED = "not_entitled" @@ -66,6 +67,24 @@ class Collection(BaseModel): created_by: Optional[str] = None r"""The ID of a Censys user who created the collection.""" + @field_serializer("status") + def serialize_status(self, value): + if isinstance(value, str): + try: + return models.CollectionStatus(value) + except ValueError: + return value + return value + + @field_serializer("status_reason") + def serialize_status_reason(self, value): + if isinstance(value, str): + try: + return models.StatusReason(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["created_by"]) diff --git a/src/censys_platform/models/creditusagereport.py b/src/censys_platform/models/creditusagereport.py index a1976c3..e3f25a8 100644 --- a/src/censys_platform/models/creditusagereport.py +++ b/src/censys_platform/models/creditusagereport.py @@ -6,15 +6,16 @@ CreditUsageReportPeriodTypedDict, ) from .sourceusagebreakdown import SourceUsageBreakdown, SourceUsageBreakdownTypedDict +from censys_platform import models, utils from censys_platform.types import BaseModel, Nullable, UNSET_SENTINEL from datetime import datetime from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class Granularity(str, Enum): +class Granularity(str, Enum, metaclass=utils.OpenEnumMeta): r"""The granularity of the report.""" DAILY = "daily" @@ -73,6 +74,15 @@ class CreditUsageReport(BaseModel): granularity: Optional[Granularity] = Granularity.DAILY r"""The granularity of the report.""" + @field_serializer("granularity") + def serialize_granularity(self, value): + if isinstance(value, str): + try: + return models.Granularity(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["credits_consumed_by_consumer", "granularity"]) diff --git a/src/censys_platform/models/cvss_components.py b/src/censys_platform/models/cvss_components.py index 668ffcb..670277b 100644 --- a/src/censys_platform/models/cvss_components.py +++ b/src/censys_platform/models/cvss_components.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class AttackComplexity(str, Enum): +class AttackComplexity(str, Enum, metaclass=utils.OpenEnumMeta): r"""Indicates conditions beyond the attacker’s control that must exist in order to exploit the vulnerability. The Attack Complexity metric is scored as either Low or High. There are two possible values: Low (L) – There are no specific pre-conditions required for exploitation, High (H) – The attacker must complete some number of preparatory steps in order to get access.""" UNKNOWN = "" @@ -16,7 +17,7 @@ class AttackComplexity(str, Enum): HIGH = "high" -class AttackVector(str, Enum): +class AttackVector(str, Enum, metaclass=utils.OpenEnumMeta): r"""Indicates the level of access required for an attacker to exploit the vulnerability. The Attack Vector metric is scored in one of four levels: Network (N) – Vulnerabilities with this rating are remotely exploitable, from one or more hops away, up to, and including, remote exploitation over the Internet, Adjacent (A) – A vulnerability with this rating requires network adjacency for exploitation. The attack must be launched from the same physical or logical network, Local (L) – Vulnerabilities with this rating are not exploitable over a network, Physical (P) – An attacker must physically interact with the target system.""" UNKNOWN = "" @@ -26,7 +27,7 @@ class AttackVector(str, Enum): PHYSICAL = "physical" -class Availability(str, Enum): +class Availability(str, Enum, metaclass=utils.OpenEnumMeta): r"""If an attack renders information unavailable, such as when a system crashes or through a DDoS attack, availability is negatively impacted. Availability has three possible values: None (N) – There is no loss of availability, Low (L) – Availability might be intermittently limited, or performance might be negatively impacted, as a result of a successful attack, High (H) – There is a complete loss of availability of the impacted system or information.""" UNKNOWN = "" @@ -35,7 +36,7 @@ class Availability(str, Enum): HIGH = "high" -class Confidentiality(str, Enum): +class Confidentiality(str, Enum, metaclass=utils.OpenEnumMeta): r"""Refers to the disclosure of sensitive information to authorized and unauthorized users, with the goal being that only authorized users are able to access the target data. Confidentiality has three potential values: High (H) – The attacker has full access to all resources in the impacted system, including highly sensitive information such as encryption keys, Low (L) – The attacker has partial access to information, with no control over what, specifically, they are able to access, None (N) – No data is accessible to unauthorized users as a result of the exploit.""" UNKNOWN = "" @@ -44,7 +45,7 @@ class Confidentiality(str, Enum): HIGH = "high" -class Integrity(str, Enum): +class Integrity(str, Enum, metaclass=utils.OpenEnumMeta): r"""Refers to whether the protected information has been tampered with or changed in any way. If there is no way for an attacker to alter the accuracy or completeness of the information, integrity has been maintained. Integrity has three values: None (N) – There is no loss of the integrity of any information, Low (L) – A limited amount of information might be tampered with or modified, but there is no serious impact on the protected system, High (H) – The attacker can modify any/all information on the target system, resulting in a complete loss of integrity.""" UNKNOWN = "" @@ -53,7 +54,7 @@ class Integrity(str, Enum): HIGH = "high" -class PrivilegesRequired(str, Enum): +class PrivilegesRequired(str, Enum, metaclass=utils.OpenEnumMeta): r"""Describes the level of privileges or access an attacker must have before successful exploitation. There are three possible values: None (N) – There is no privilege or special access required to conduct the attack, Low (L) – The attacker requires basic, “user” level privileges to leverage the exploit, High (H) – Administrative or similar access privileges are required for successful attack.""" UNKNOWN = "" @@ -62,7 +63,7 @@ class PrivilegesRequired(str, Enum): HIGH = "high" -class Scope(str, Enum): +class Scope(str, Enum, metaclass=utils.OpenEnumMeta): r"""Determines whether a vulnerability in one system or component can impact another system or component. If a vulnerability in a vulnerable component can affect a component which is in a different security scope than the vulnerable component, a scope change occurs. Scope has two possible ratings: Changed (C) – An exploited vulnerability can have a carry over impact on another system, Unchanged (U) – The exploited vulnerability is limited in damage to only the local security authority.""" UNKNOWN = "" @@ -70,7 +71,7 @@ class Scope(str, Enum): CHANGED = "changed" -class UserInteraction(str, Enum): +class UserInteraction(str, Enum, metaclass=utils.OpenEnumMeta): r"""Describes whether a user, other than the attacker, is required to do anything or participate in exploitation of the vulnerability. User interaction has two possible values: None (N) – No user interaction is required, Required (R) – A user must complete some steps for the exploit to succeed. For example, a user might be required to install some software.""" UNKNOWN = "" @@ -122,6 +123,78 @@ class CVSSComponents(BaseModel): user_interaction: Optional[UserInteraction] = None r"""Describes whether a user, other than the attacker, is required to do anything or participate in exploitation of the vulnerability. User interaction has two possible values: None (N) – No user interaction is required, Required (R) – A user must complete some steps for the exploit to succeed. For example, a user might be required to install some software.""" + @field_serializer("attack_complexity") + def serialize_attack_complexity(self, value): + if isinstance(value, str): + try: + return models.AttackComplexity(value) + except ValueError: + return value + return value + + @field_serializer("attack_vector") + def serialize_attack_vector(self, value): + if isinstance(value, str): + try: + return models.AttackVector(value) + except ValueError: + return value + return value + + @field_serializer("availability") + def serialize_availability(self, value): + if isinstance(value, str): + try: + return models.Availability(value) + except ValueError: + return value + return value + + @field_serializer("confidentiality") + def serialize_confidentiality(self, value): + if isinstance(value, str): + try: + return models.Confidentiality(value) + except ValueError: + return value + return value + + @field_serializer("integrity") + def serialize_integrity(self, value): + if isinstance(value, str): + try: + return models.Integrity(value) + except ValueError: + return value + return value + + @field_serializer("privileges_required") + def serialize_privileges_required(self, value): + if isinstance(value, str): + try: + return models.PrivilegesRequired(value) + except ValueError: + return value + return value + + @field_serializer("scope") + def serialize_scope(self, value): + if isinstance(value, str): + try: + return models.Scope(value) + except ValueError: + return value + return value + + @field_serializer("user_interaction") + def serialize_user_interaction(self, value): + if isinstance(value, str): + try: + return models.UserInteraction(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/cvssv4_components.py b/src/censys_platform/models/cvssv4_components.py index a9e301c..98d1a43 100644 --- a/src/censys_platform/models/cvssv4_components.py +++ b/src/censys_platform/models/cvssv4_components.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class CVSSv4ComponentsAttackComplexity(str, Enum): +class CVSSv4ComponentsAttackComplexity(str, Enum, metaclass=utils.OpenEnumMeta): r"""Indicates conditions beyond the attacker’s control that must exist in order to exploit the vulnerability. The Attack Complexity metric is scored as either Low or High. There are two possible values: Low (L) – There are no specific pre-conditions required for exploitation, High (H) – The attacker must complete some number of preparatory steps in order to get access.""" UNKNOWN = "" @@ -16,13 +17,13 @@ class CVSSv4ComponentsAttackComplexity(str, Enum): HIGH = "high" -class AttackRequirements(str, Enum): +class AttackRequirements(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" NONE = "none" PRESENT = "present" -class CVSSv4ComponentsAttackVector(str, Enum): +class CVSSv4ComponentsAttackVector(str, Enum, metaclass=utils.OpenEnumMeta): r"""Indicates the level of access required for an attacker to exploit the vulnerability. The Attack Vector metric is scored in one of four levels: Network (N) – Vulnerabilities with this rating are remotely exploitable, from one or more hops away, up to, and including, remote exploitation over the Internet, Adjacent (A) – A vulnerability with this rating requires network adjacency for exploitation. The attack must be launched from the same physical or logical network, Local (L) – Vulnerabilities with this rating are not exploitable over a network, Physical (P) – An attacker must physically interact with the target system.""" UNKNOWN = "" @@ -32,13 +33,13 @@ class CVSSv4ComponentsAttackVector(str, Enum): PHYSICAL = "physical" -class Automatable(str, Enum): +class Automatable(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" NO = "no" YES = "yes" -class CVSSv4ComponentsAvailability(str, Enum): +class CVSSv4ComponentsAvailability(str, Enum, metaclass=utils.OpenEnumMeta): r"""If an attack renders information unavailable, such as when a system crashes or through a DDoS attack, availability is negatively impacted. Availability has three possible values: None (N) – There is no loss of availability, Low (L) – Availability might be intermittently limited, or performance might be negatively impacted, as a result of a successful attack, High (H) – There is a complete loss of availability of the impacted system or information.""" UNKNOWN = "" @@ -47,7 +48,7 @@ class CVSSv4ComponentsAvailability(str, Enum): HIGH = "high" -class CVSSv4ComponentsConfidentiality(str, Enum): +class CVSSv4ComponentsConfidentiality(str, Enum, metaclass=utils.OpenEnumMeta): r"""Refers to the disclosure of sensitive information to authorized and unauthorized users, with the goal being that only authorized users are able to access the target data. Confidentiality has three potential values: High (H) – The attacker has full access to all resources in the impacted system, including highly sensitive information such as encryption keys, Low (L) – The attacker has partial access to information, with no control over what, specifically, they are able to access, None (N) – No data is accessible to unauthorized users as a result of the exploit.""" UNKNOWN = "" @@ -56,7 +57,7 @@ class CVSSv4ComponentsConfidentiality(str, Enum): HIGH = "high" -class CVSSv4ComponentsIntegrity(str, Enum): +class CVSSv4ComponentsIntegrity(str, Enum, metaclass=utils.OpenEnumMeta): r"""Refers to whether the protected information has been tampered with or changed in any way. If there is no way for an attacker to alter the accuracy or completeness of the information, integrity has been maintained. Integrity has three values: None (N) – There is no loss of the integrity of any information, Low (L) – A limited amount of information might be tampered with or modified, but there is no serious impact on the protected system, High (H) – The attacker can modify any/all information on the target system, resulting in a complete loss of integrity.""" UNKNOWN = "" @@ -65,7 +66,7 @@ class CVSSv4ComponentsIntegrity(str, Enum): HIGH = "high" -class CVSSv4ComponentsPrivilegesRequired(str, Enum): +class CVSSv4ComponentsPrivilegesRequired(str, Enum, metaclass=utils.OpenEnumMeta): r"""Describes the level of privileges or access an attacker must have before successful exploitation. There are three possible values: None (N) – There is no privilege or special access required to conduct the attack, Low (L) – The attacker requires basic, “user” level privileges to leverage the exploit, High (H) – Administrative or similar access privileges are required for successful attack.""" UNKNOWN = "" @@ -74,7 +75,7 @@ class CVSSv4ComponentsPrivilegesRequired(str, Enum): HIGH = "high" -class ProviderUrgency(str, Enum): +class ProviderUrgency(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CLEAR = "clear" GREEN = "green" @@ -82,20 +83,20 @@ class ProviderUrgency(str, Enum): RED = "red" -class Recovery(str, Enum): +class Recovery(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" AUTOMATIC = "automatic" USER = "user" IRRECOVERABLE = "irrecoverable" -class Safety(str, Enum): +class Safety(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" NEGLIGIBLE = "negligible" PRESENT = "present" -class CVSSv4ComponentsUserInteraction(str, Enum): +class CVSSv4ComponentsUserInteraction(str, Enum, metaclass=utils.OpenEnumMeta): r"""Describes whether a user, other than the attacker, is required to do anything or participate in exploitation of the vulnerability. User interaction has two possible values: None (N) – No user interaction is required, Required (R) – A user must complete some steps for the exploit to succeed. For example, a user might be required to install some software.""" UNKNOWN = "" @@ -103,13 +104,13 @@ class CVSSv4ComponentsUserInteraction(str, Enum): REQUIRED = "required" -class ValueDensity(str, Enum): +class ValueDensity(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" DIFFUSE = "diffuse" CONCENTRATED = "concentrated" -class VulnerabilityResponseEffort(str, Enum): +class VulnerabilityResponseEffort(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" LOW = "low" MODERATE = "moderate" @@ -176,6 +177,132 @@ class CVSSv4Components(BaseModel): vulnerability_response_effort: Optional[VulnerabilityResponseEffort] = None + @field_serializer("attack_complexity") + def serialize_attack_complexity(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsAttackComplexity(value) + except ValueError: + return value + return value + + @field_serializer("attack_requirements") + def serialize_attack_requirements(self, value): + if isinstance(value, str): + try: + return models.AttackRequirements(value) + except ValueError: + return value + return value + + @field_serializer("attack_vector") + def serialize_attack_vector(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsAttackVector(value) + except ValueError: + return value + return value + + @field_serializer("automatable") + def serialize_automatable(self, value): + if isinstance(value, str): + try: + return models.Automatable(value) + except ValueError: + return value + return value + + @field_serializer("availability") + def serialize_availability(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsAvailability(value) + except ValueError: + return value + return value + + @field_serializer("confidentiality") + def serialize_confidentiality(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsConfidentiality(value) + except ValueError: + return value + return value + + @field_serializer("integrity") + def serialize_integrity(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsIntegrity(value) + except ValueError: + return value + return value + + @field_serializer("privileges_required") + def serialize_privileges_required(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsPrivilegesRequired(value) + except ValueError: + return value + return value + + @field_serializer("provider_urgency") + def serialize_provider_urgency(self, value): + if isinstance(value, str): + try: + return models.ProviderUrgency(value) + except ValueError: + return value + return value + + @field_serializer("recovery") + def serialize_recovery(self, value): + if isinstance(value, str): + try: + return models.Recovery(value) + except ValueError: + return value + return value + + @field_serializer("safety") + def serialize_safety(self, value): + if isinstance(value, str): + try: + return models.Safety(value) + except ValueError: + return value + return value + + @field_serializer("user_interaction") + def serialize_user_interaction(self, value): + if isinstance(value, str): + try: + return models.CVSSv4ComponentsUserInteraction(value) + except ValueError: + return value + return value + + @field_serializer("value_density") + def serialize_value_density(self, value): + if isinstance(value, str): + try: + return models.ValueDensity(value) + except ValueError: + return value + return value + + @field_serializer("vulnerability_response_effort") + def serialize_vulnerability_response_effort(self, value): + if isinstance(value, str): + try: + return models.VulnerabilityResponseEffort(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/dns.py b/src/censys_platform/models/dns.py index 7f83a03..491ebbe 100644 --- a/src/censys_platform/models/dns.py +++ b/src/censys_platform/models/dns.py @@ -3,6 +3,7 @@ from __future__ import annotations from .dns_edns import DNSEDNS, DNSEDNSTypedDict from .dns_resourcerecord import DNSResourceRecord, DNSResourceRecordTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -11,12 +12,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class RCode(str, Enum): +class RCode(str, Enum, metaclass=utils.OpenEnumMeta): r"""A enumerated field indicating the result of the request. The most common values are defined in RFC 1035.""" UNKNOWN = "" @@ -41,7 +42,7 @@ class RCode(str, Enum): BAD_COOKIE = "bad_cookie" -class ServerType(str, Enum): +class ServerType(str, Enum, metaclass=utils.OpenEnumMeta): r"""An enumerated value indicating the behavior of the server. An AUTHORITATIVE server fulfills requests for domain names it controls, which are not listed by the server. FORWARDING and RECURSIVE_RESOLVER servers fulfill requests indirectly for domain names they do not control. A RECURSIVE_RESOLVER will query ip.parrotdns.com itself, resulting in its own IP address being present in the dns.answers.response field.""" UNKNOWN = "" @@ -96,6 +97,24 @@ class DNS(BaseModel): version: Optional[str] = None + @field_serializer("r_code") + def serialize_r_code(self, value): + if isinstance(value, str): + try: + return models.RCode(value) + except ValueError: + return value + return value + + @field_serializer("server_type") + def serialize_server_type(self, value): + if isinstance(value, str): + try: + return models.ServerType(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/dns_resourcerecord.py b/src/censys_platform/models/dns_resourcerecord.py index ace271b..3a868eb 100644 --- a/src/censys_platform/models/dns_resourcerecord.py +++ b/src/censys_platform/models/dns_resourcerecord.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class DNSResourceRecordType(str, Enum): +class DNSResourceRecordType(str, Enum, metaclass=utils.OpenEnumMeta): r"""An enumerated field indicating what type of data is in the \"services.dns.additionals.response\" field. For example, \"A\" signifies that the value in \"services.dns.additionals.response\" is an IPv4 address for the FQDN in \"services.dns.additionals.name\".""" UNKNOWN = "" @@ -36,6 +37,15 @@ class DNSResourceRecord(BaseModel): type: Optional[DNSResourceRecordType] = None r"""An enumerated field indicating what type of data is in the \"services.dns.additionals.response\" field. For example, \"A\" signifies that the value in \"services.dns.additionals.response\" is an IPv4 address for the FQDN in \"services.dns.additionals.name\".""" + @field_serializer("type") + def serialize_type(self, value): + if isinstance(value, str): + try: + return models.DNSResourceRecordType(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["name", "response", "type"]) diff --git a/src/censys_platform/models/endpointscan.py b/src/censys_platform/models/endpointscan.py index 052b116..19d9fce 100644 --- a/src/censys_platform/models/endpointscan.py +++ b/src/censys_platform/models/endpointscan.py @@ -20,6 +20,7 @@ from .scadaview import ScadaView, ScadaViewTypedDict from .screenshot import Screenshot, ScreenshotTypedDict from .tls import TLS, TLSTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -28,12 +29,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class EndpointScanTransportProtocol(str, Enum): +class EndpointScanTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -132,6 +133,15 @@ class EndpointScan(BaseModel): transport_protocol: Optional[EndpointScanTransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.EndpointScanTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/endpointscanstate.py b/src/censys_platform/models/endpointscanstate.py index 1cd5387..71b7d12 100644 --- a/src/censys_platform/models/endpointscanstate.py +++ b/src/censys_platform/models/endpointscanstate.py @@ -20,6 +20,7 @@ from .redlionweb import RedlionWeb, RedlionWebTypedDict from .scadaview import ScadaView, ScadaViewTypedDict from .screenshot import Screenshot, ScreenshotTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -28,12 +29,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class EndpointScanStateTransportProtocol(str, Enum): +class EndpointScanStateTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -129,6 +130,15 @@ class EndpointScanState(BaseModel): transport_protocol: Optional[EndpointScanStateTransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.EndpointScanStateTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/eventassetchange.py b/src/censys_platform/models/eventassetchange.py index 49d6753..0838a90 100644 --- a/src/censys_platform/models/eventassetchange.py +++ b/src/censys_platform/models/eventassetchange.py @@ -1,13 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel from datetime import datetime from enum import Enum +from pydantic import field_serializer from typing_extensions import TypedDict -class ChangeType(str, Enum): +class ChangeType(str, Enum, metaclass=utils.OpenEnumMeta): ADDED = "added" REMOVED = "removed" @@ -24,3 +26,12 @@ class EventAssetChange(BaseModel): event_time: datetime reason: str + + @field_serializer("change_type") + def serialize_change_type(self, value): + if isinstance(value, str): + try: + return models.ChangeType(value) + except ValueError: + return value + return value diff --git a/src/censys_platform/models/eventstatuschange.py b/src/censys_platform/models/eventstatuschange.py index 85efc37..40acbbe 100644 --- a/src/censys_platform/models/eventstatuschange.py +++ b/src/censys_platform/models/eventstatuschange.py @@ -1,22 +1,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from datetime import datetime from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class NewStatus(str, Enum): +class NewStatus(str, Enum, metaclass=utils.OpenEnumMeta): ACTIVE = "active" POPULATING = "populating" PAUSED = "paused" ARCHIVED = "archived" -class OldStatus(str, Enum): +class OldStatus(str, Enum, metaclass=utils.OpenEnumMeta): ACTIVE = "active" POPULATING = "populating" PAUSED = "paused" @@ -39,6 +40,24 @@ class EventStatusChange(BaseModel): reason: Optional[str] = None + @field_serializer("new_status") + def serialize_new_status(self, value): + if isinstance(value, str): + try: + return models.NewStatus(value) + except ValueError: + return value + return value + + @field_serializer("old_status") + def serialize_old_status(self, value): + if isinstance(value, str): + try: + return models.OldStatus(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["old_status", "reason"]) diff --git a/src/censys_platform/models/hostdns_forwardresolution.py b/src/censys_platform/models/hostdns_forwardresolution.py index f219be4..718dfb5 100644 --- a/src/censys_platform/models/hostdns_forwardresolution.py +++ b/src/censys_platform/models/hostdns_forwardresolution.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class RecordType(str, Enum): +class RecordType(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" A = "a" AAAA = "aaaa" @@ -30,6 +31,15 @@ class HostDNSForwardResolution(BaseModel): server: Optional[str] = None + @field_serializer("record_type") + def serialize_record_type(self, value): + if isinstance(value, str): + try: + return models.RecordType(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["name", "record_type", "resolve_time", "server"]) diff --git a/src/censys_platform/models/http.py b/src/censys_platform/models/http.py index 11ffeb7..2245a1c 100644 --- a/src/censys_platform/models/http.py +++ b/src/censys_platform/models/http.py @@ -7,6 +7,7 @@ HTTPRedirectChainLinkTypedDict, ) from .http_repeatedheaders import HTTPRepeatedHeaders, HTTPRepeatedHeadersTypedDict +from .networklog import NetworkLog, NetworkLogTypedDict from censys_platform.types import ( BaseModel, Nullable, @@ -34,6 +35,7 @@ class HTTPTypedDict(TypedDict): r"""A list of the <title> and <meta> tags from services.http.response.body.""" html_title: NotRequired[str] r"""The title of the HTML page: the inner contents of the <title> tag in the response body, if present.""" + network_log: NotRequired[NetworkLogTypedDict] protocol: NotRequired[str] r"""The protocol field of the response, which includes the claimed HTTP version number.""" redirect_chain: NotRequired[Nullable[List[HTTPRedirectChainLinkTypedDict]]] @@ -71,6 +73,8 @@ class HTTP(BaseModel): html_title: Optional[str] = None r"""The title of the HTML page: the inner contents of the <title> tag in the response body, if present.""" + network_log: Optional[NetworkLog] = None + protocol: Optional[str] = None r"""The protocol field of the response, which includes the claimed HTTP version number.""" @@ -101,6 +105,7 @@ def serialize_model(self, handler): "headers", "html_tags", "html_title", + "network_log", "protocol", "redirect_chain", "status_code", diff --git a/src/censys_platform/models/http_redirectchainlink.py b/src/censys_platform/models/http_redirectchainlink.py index 3fd575d..8eccbf1 100644 --- a/src/censys_platform/models/http_redirectchainlink.py +++ b/src/censys_platform/models/http_redirectchainlink.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class HTTPRedirectChainLinkTransportProtocol(str, Enum): +class HTTPRedirectChainLinkTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -35,6 +36,15 @@ class HTTPRedirectChainLink(BaseModel): transport_protocol: Optional[HTTPRedirectChainLinkTransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.HTTPRedirectChainLinkTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/jarmscan.py b/src/censys_platform/models/jarmscan.py index f9672c2..a3d8eae 100644 --- a/src/censys_platform/models/jarmscan.py +++ b/src/censys_platform/models/jarmscan.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class JarmScanTransportProtocol(str, Enum): +class JarmScanTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -55,6 +56,15 @@ class JarmScan(BaseModel): transport_protocol: Optional[JarmScanTransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.JarmScanTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/kev.py b/src/censys_platform/models/kev.py index 9768861..3783346 100644 --- a/src/censys_platform/models/kev.py +++ b/src/censys_platform/models/kev.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class KEVSource(str, Enum): +class KEVSource(str, Enum, metaclass=utils.OpenEnumMeta): r"""The source checked to determine whether the CVE is in the KEV catalog.""" UNKNOWN = "" @@ -35,6 +36,15 @@ class Kev(BaseModel): source: Optional[KEVSource] = None r"""The source checked to determine whether the CVE is in the KEV catalog.""" + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.KEVSource(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["date_added", "date_due", "source"]) diff --git a/src/censys_platform/models/label.py b/src/censys_platform/models/label.py index af4a39d..377cf9f 100644 --- a/src/censys_platform/models/label.py +++ b/src/censys_platform/models/label.py @@ -2,6 +2,7 @@ from __future__ import annotations from .evidence import Evidence, EvidenceTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -10,12 +11,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class LabelSource(str, Enum): +class LabelSource(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" RECOG = "recog" @@ -40,6 +41,15 @@ class Label(BaseModel): value: Optional[str] = None + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.LabelSource(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["confidence", "evidence", "source", "value"]) diff --git a/src/censys_platform/models/matchedservice.py b/src/censys_platform/models/matchedservice.py index 51eb196..51da195 100644 --- a/src/censys_platform/models/matchedservice.py +++ b/src/censys_platform/models/matchedservice.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class TransportProtocol(str, Enum): +class TransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -29,6 +30,15 @@ class MatchedService(BaseModel): transport_protocol: Optional[TransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.TransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["port", "protocol", "transport_protocol"]) diff --git a/src/censys_platform/models/networklog.py b/src/censys_platform/models/networklog.py new file mode 100644 index 0000000..0ada169 --- /dev/null +++ b/src/censys_platform/models/networklog.py @@ -0,0 +1,57 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .networklog_resourceinfo import ( + NetworkLogResourceInfo, + NetworkLogResourceInfoTypedDict, +) +from censys_platform.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class NetworkLogTypedDict(TypedDict): + har_handle: NotRequired[str] + r"""Storage handle for the full HAR network log.""" + resources: NotRequired[Nullable[List[NetworkLogResourceInfoTypedDict]]] + r"""Resources fetched during page load.""" + + +class NetworkLog(BaseModel): + har_handle: Optional[str] = None + r"""Storage handle for the full HAR network log.""" + + resources: OptionalNullable[List[NetworkLogResourceInfo]] = UNSET + r"""Resources fetched during page load.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["har_handle", "resources"]) + nullable_fields = set(["resources"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/censys_platform/models/networklog_resourceinfo.py b/src/censys_platform/models/networklog_resourceinfo.py new file mode 100644 index 0000000..b676739 --- /dev/null +++ b/src/censys_platform/models/networklog_resourceinfo.py @@ -0,0 +1,91 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from censys_platform.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class NetworkLogResourceInfoTypedDict(TypedDict): + host: NotRequired[str] + r"""Hostname from the URL.""" + md5: NotRequired[str] + r"""MD5 hash of the resource content.""" + mime_type: NotRequired[str] + r"""MIME type of the resource.""" + path: NotRequired[str] + r"""Path from the URL.""" + port: NotRequired[str] + r"""Port from the URL.""" + scheme: NotRequired[str] + r"""URL scheme (e.g., http, https).""" + sha1: NotRequired[str] + r"""SHA-1 hash of the resource content.""" + sha256: NotRequired[str] + r"""SHA-256 hash of the resource content.""" + size: NotRequired[int] + r"""Size of the resource in bytes.""" + url: NotRequired[str] + r"""Full URL of the resource.""" + + +class NetworkLogResourceInfo(BaseModel): + host: Optional[str] = None + r"""Hostname from the URL.""" + + md5: Optional[str] = None + r"""MD5 hash of the resource content.""" + + mime_type: Optional[str] = None + r"""MIME type of the resource.""" + + path: Optional[str] = None + r"""Path from the URL.""" + + port: Optional[str] = None + r"""Port from the URL.""" + + scheme: Optional[str] = None + r"""URL scheme (e.g., http, https).""" + + sha1: Optional[str] = None + r"""SHA-1 hash of the resource content.""" + + sha256: Optional[str] = None + r"""SHA-256 hash of the resource content.""" + + size: Optional[int] = None + r"""Size of the resource in bytes.""" + + url: Optional[str] = None + r"""Full URL of the resource.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "host", + "md5", + "mime_type", + "path", + "port", + "scheme", + "sha1", + "sha256", + "size", + "url", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/censys_platform/models/reject.py b/src/censys_platform/models/reject.py index d70ce12..9e40820 100644 --- a/src/censys_platform/models/reject.py +++ b/src/censys_platform/models/reject.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class RejectType(str, Enum): +class RejectType(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" WRONG_VERSION = "wrong_version" INVALID_USERNAME = "invalid_username" @@ -30,6 +31,15 @@ class Reject(BaseModel): type: Optional[RejectType] = None + @field_serializer("type") + def serialize_type(self, value): + if isinstance(value, str): + try: + return models.RejectType(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["reason", "type"]) diff --git a/src/censys_platform/models/representativeinfo.py b/src/censys_platform/models/representativeinfo.py index 311543c..1149755 100644 --- a/src/censys_platform/models/representativeinfo.py +++ b/src/censys_platform/models/representativeinfo.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -9,12 +10,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class RepresentativeInfoReason(str, Enum): +class RepresentativeInfoReason(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" PROTOCOL_PORT_COUNT = "protocol_port_count" INCAPSULA = "incapsula" @@ -37,6 +38,15 @@ class RepresentativeInfo(BaseModel): sampled_port: Optional[int] = None + @field_serializer("reason") + def serialize_reason(self, value): + if isinstance(value, str): + try: + return models.RepresentativeInfoReason(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/risk.py b/src/censys_platform/models/risk.py index 946b6b0..8fed77a 100644 --- a/src/censys_platform/models/risk.py +++ b/src/censys_platform/models/risk.py @@ -4,6 +4,7 @@ from .cvss import Cvss, CvssTypedDict from .evidence import Evidence, EvidenceTypedDict from .metrics import Metrics, MetricsTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -12,18 +13,18 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class RiskSource(str, Enum): +class RiskSource(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" CVE = "cve" -class Severity(str, Enum): +class Severity(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" LOW = "low" MEDIUM = "medium" @@ -31,7 +32,7 @@ class Severity(str, Enum): CRITICAL = "critical" -class RiskSource1(str, Enum): +class RiskSource1(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" RECOG = "recog" @@ -74,6 +75,33 @@ class Risk(BaseModel): year: Optional[int] = None + @field_serializer("risk_source") + def serialize_risk_source(self, value): + if isinstance(value, str): + try: + return models.RiskSource(value) + except ValueError: + return value + return value + + @field_serializer("severity") + def serialize_severity(self, value): + if isinstance(value, str): + try: + return models.Severity(value) + except ValueError: + return value + return value + + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.RiskSource1(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/rootstore.py b/src/censys_platform/models/rootstore.py index 5346595..d1777da 100644 --- a/src/censys_platform/models/rootstore.py +++ b/src/censys_platform/models/rootstore.py @@ -2,6 +2,7 @@ from __future__ import annotations from .rootstore_chain import RootStoreChain, RootStoreChainTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -10,12 +11,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class Type(str, Enum): +class Type(str, Enum, metaclass=utils.OpenEnumMeta): r"""The certificate's type. Options include root, intermediate, or leaf.""" UNKNOWN = "" @@ -68,6 +69,15 @@ class RootStore(BaseModel): type: Optional[Type] = None r"""The certificate's type. Options include root, intermediate, or leaf.""" + @field_serializer("type") + def serialize_type(self, value): + if isinstance(value, str): + try: + return models.Type(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/searchconvertqueryresponse.py b/src/censys_platform/models/searchconvertqueryresponse.py index 823cfdc..e3b0ed7 100644 --- a/src/censys_platform/models/searchconvertqueryresponse.py +++ b/src/censys_platform/models/searchconvertqueryresponse.py @@ -3,6 +3,7 @@ from __future__ import annotations from .alternativequery import AlternativeQuery, AlternativeQueryTypedDict from .convertqueryerror import ConvertQueryError, ConvertQueryErrorTypedDict +from censys_platform import utils from censys_platform.types import ( BaseModel, Nullable, @@ -16,7 +17,7 @@ from typing_extensions import NotRequired, TypedDict -class SearchConvertQueryResponseTargets(str, Enum): +class SearchConvertQueryResponseTargets(str, Enum, metaclass=utils.OpenEnumMeta): HOST = "host" WEB = "web" CERT = "cert" diff --git a/src/censys_platform/models/service.py b/src/censys_platform/models/service.py index bc33d18..92db92f 100644 --- a/src/censys_platform/models/service.py +++ b/src/censys_platform/models/service.py @@ -130,6 +130,7 @@ from .wsdiscovery import WsDiscovery, WsDiscoveryTypedDict from .x11 import X11, X11TypedDict from .zeromq import Zeromq, ZeromqTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -138,12 +139,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class ServiceTransportProtocol(str, Enum): +class ServiceTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -566,6 +567,15 @@ class Service(BaseModel): zeromq: Optional[Zeromq] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.ServiceTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/serviceid.py b/src/censys_platform/models/serviceid.py index c4c6f67..fb52b69 100644 --- a/src/censys_platform/models/serviceid.py +++ b/src/censys_platform/models/serviceid.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class ServiceIDTransportProtocol(str, Enum): +class ServiceIDTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -32,6 +33,15 @@ class ServiceID(BaseModel): transport_protocol: Optional[ServiceIDTransportProtocol] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.ServiceIDTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["ip", "port", "protocol", "transport_protocol"]) diff --git a/src/censys_platform/models/servicescan.py b/src/censys_platform/models/servicescan.py index dd6b91f..4de276e 100644 --- a/src/censys_platform/models/servicescan.py +++ b/src/censys_platform/models/servicescan.py @@ -121,6 +121,7 @@ from .wsdiscovery import WsDiscovery, WsDiscoveryTypedDict from .x11 import X11, X11TypedDict from .zeromq import Zeromq, ZeromqTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -129,12 +130,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class ServiceScanTransportProtocol(str, Enum): +class ServiceScanTransportProtocol(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" TCP = "tcp" UDP = "udp" @@ -521,6 +522,15 @@ class ServiceScan(BaseModel): zeromq: Optional[Zeromq] = None + @field_serializer("transport_protocol") + def serialize_transport_protocol(self, value): + if isinstance(value, str): + try: + return models.ServiceScanTransportProtocol(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/threat.py b/src/censys_platform/models/threat.py index 5caf341..af98c3e 100644 --- a/src/censys_platform/models/threat.py +++ b/src/censys_platform/models/threat.py @@ -5,6 +5,7 @@ from .threat_actor import ThreatActor, ThreatActorTypedDict from .threat_details import ThreatDetails, ThreatDetailsTypedDict from .threat_malware import ThreatMalware, ThreatMalwareTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -13,12 +14,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class ThreatSource(str, Enum): +class ThreatSource(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" RECOG = "recog" @@ -61,6 +62,15 @@ class Threat(BaseModel): type: OptionalNullable[List[str]] = UNSET + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.ThreatSource(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/tls.py b/src/censys_platform/models/tls.py index 0f5c99e..76d0138 100644 --- a/src/censys_platform/models/tls.py +++ b/src/censys_platform/models/tls.py @@ -3,6 +3,7 @@ from __future__ import annotations from .tls_chain import TLSChain, TLSChainTypedDict from .tls_versiondata import TLSVersionData, TLSVersionDataTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -11,12 +12,12 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class VersionSelected(str, Enum): +class VersionSelected(str, Enum, metaclass=utils.OpenEnumMeta): r"""Certificate version v1(0), v2(1), v3(2).""" UNKNOWN = "" @@ -66,6 +67,15 @@ class TLS(BaseModel): versions: OptionalNullable[List[TLSVersionData]] = UNSET + @field_serializer("version_selected") + def serialize_version_selected(self, value): + if isinstance(value, str): + try: + return models.VersionSelected(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( diff --git a/src/censys_platform/models/tls_versiondata.py b/src/censys_platform/models/tls_versiondata.py index 465690c..0d0ae8d 100644 --- a/src/censys_platform/models/tls_versiondata.py +++ b/src/censys_platform/models/tls_versiondata.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class Version(str, Enum): +class Version(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" SS_LV_2 = "ss_lv_2" SS_LV_3 = "ss_lv_3" @@ -34,6 +35,15 @@ class TLSVersionData(BaseModel): version: Optional[Version] = None + @field_serializer("version") + def serialize_version(self, value): + if isinstance(value, str): + try: + return models.Version(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["ja3s", "ja4s", "version"]) diff --git a/src/censys_platform/models/trackedscan_task.py b/src/censys_platform/models/trackedscan_task.py index 2ddaec9..5c8539b 100644 --- a/src/censys_platform/models/trackedscan_task.py +++ b/src/censys_platform/models/trackedscan_task.py @@ -1,14 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from censys_platform import models, utils from censys_platform.types import BaseModel, UNSET_SENTINEL from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class TrackedScanTaskStatus(str, Enum): +class TrackedScanTaskStatus(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" SCANNING = "scanning" SCANNED = "scanned" @@ -31,6 +32,15 @@ class TrackedScanTask(BaseModel): update_time: Optional[str] = None + @field_serializer("status") + def serialize_status(self, value): + if isinstance(value, str): + try: + return models.TrackedScanTaskStatus(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["description", "status", "update_time"]) diff --git a/src/censys_platform/models/vuln.py b/src/censys_platform/models/vuln.py index 759e193..2f73569 100644 --- a/src/censys_platform/models/vuln.py +++ b/src/censys_platform/models/vuln.py @@ -5,6 +5,7 @@ from .evidence import Evidence, EvidenceTypedDict from .kev import Kev, KevTypedDict from .metrics import Metrics, MetricsTypedDict +from censys_platform import models, utils from censys_platform.types import ( BaseModel, Nullable, @@ -13,18 +14,18 @@ UNSET_SENTINEL, ) from enum import Enum -from pydantic import model_serializer +from pydantic import field_serializer, model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict -class VulnRiskSource(str, Enum): +class VulnRiskSource(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" CVE = "cve" -class VulnSeverity(str, Enum): +class VulnSeverity(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" LOW = "low" MEDIUM = "medium" @@ -32,7 +33,7 @@ class VulnSeverity(str, Enum): CRITICAL = "critical" -class VulnSource(str, Enum): +class VulnSource(str, Enum, metaclass=utils.OpenEnumMeta): UNKNOWN = "" CENSYS = "censys" RECOG = "recog" @@ -78,6 +79,33 @@ class Vuln(BaseModel): year: Optional[int] = None + @field_serializer("risk_source") + def serialize_risk_source(self, value): + if isinstance(value, str): + try: + return models.VulnRiskSource(value) + except ValueError: + return value + return value + + @field_serializer("severity") + def serialize_severity(self, value): + if isinstance(value, str): + try: + return models.VulnSeverity(value) + except ValueError: + return value + return value + + @field_serializer("source") + def serialize_source(self, value): + if isinstance(value, str): + try: + return models.VulnSource(value) + except ValueError: + return value + return value + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(