{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-14T00:06:01.328550Z","repo":{"ref":{"host":"github.com","owner":"datachain-ai","name":"datachain"},"default_branch":"main","clone_url":"https://github.com/datachain-ai/datachain.git","html_url":"https://github.com/datachain-ai/datachain","description":"The Context Layer for unstructured data: typed, versioned datasets over S3, GCS, Azure","stars":2832,"forks":178,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":23261,"primary_language":"Python","license_spdx":"Apache-2.0","created_at":"2024-06-25T22:29:35Z","pushed_at":"2026-11-13T23:20:37Z","security_policy_url":null,"distribution":{"owner_created_at":"2025-05-09T23:54:40Z","owner_type":"Organization","release_assets":[]}},"commit_sha":"8b7fe3202ba87f473782b06ac5e184d23d674921","profile":{"lines_by_language":{"Python":146657},"files_by_category":{"source":240,"test":233,"docs":135,"config":24,"binary":15,"other":13,"oversized":1},"source_lines":60658,"test_lines":85999},"pillars":{"ai_provenance":{"score":9.3,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.093,"suspected_share":0.0114,"estimated_share":0.093,"ai_artifacts":1.0,"flagged_work_units":2.0,"flagged_releases":1.0},"summary":"Explicit AI attribution on 9% of first-party code added; an estimated 9% including velocity signals."},"quality":{"score":76.3,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":66.3,"duplication":75.0,"lint":54.6,"testing":100.0,"docs":80.0,"type_safety":60.0,"process":null},"summary":"Code quality is adequate: test-to-source ratio 1.42, CI runs tests; 14% of function code in complex or long functions; 5% duplicated lines. Weakest area: lint."},"security":{"score":62.9,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":76.6,"sast":94.4,"dependencies":null,"ci_actions":0.0,"posture":60.0,"scorecard":null},"summary":"Security posture is weak: 8 high-severity SAST findings; 37 high-severity workflow issues. Weakest area: ci actions."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":91.0,"checked":91.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":1301.0,"attributed_commits":108.0,"attributed_commit_share":0.0830130668716372,"effective_loc":212271.0,"attributed_loc":19735.0,"attributed_loc_share":0.09297077792067687,"tools_detected":4.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 87 attributed commits, 15,643 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"GitHub Copilot coding agent: 21 attributed commits, 2,873 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"Cursor agent: 3 attributed commits, 1,039 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"OpenAI Codex: 1 attributed commits, 195 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"8b7fe3202ba87f473782b06ac5e184d23d674921","url":"https://github.com/datachain-ai/datachain/commit/8b7fe3202ba87f473782b06ac5e184d23d674921","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ae3ce429b3f868c8f62a26e444939bb5beede991","url":"https://github.com/datachain-ai/datachain/commit/ae3ce429b3f868c8f62a26e444939bb5beede991","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"5de86b14002e102ae404b0d796574ad5ce4cb73d","url":"https://github.com/datachain-ai/datachain/commit/5de86b14002e102ae404b0d796574ad5ce4cb73d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"3e034bbdb4f9926e9e3e7cf6c8ac5428f3a09ef2","url":"https://github.com/datachain-ai/datachain/commit/3e034bbdb4f9926e9e3e7cf6c8ac5428f3a09ef2","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c726a3ce002dfc6826330f2286f3257d5c3dc560","url":"https://github.com/datachain-ai/datachain/commit/c726a3ce002dfc6826330f2286f3257d5c3dc560","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"42f7aef8fd278455318abae2744d711fbb9a3451","url":"https://github.com/datachain-ai/datachain/commit/42f7aef8fd278455318abae2744d711fbb9a3451","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"fcbf2bfb5aae89c2ea15789f66bf5f0420bf0a16","url":"https://github.com/datachain-ai/datachain/commit/fcbf2bfb5aae89c2ea15789f66bf5f0420bf0a16","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"eac393917eec3e2ce8695b0e42088a3bb08dcb8f","url":"https://github.com/datachain-ai/datachain/commit/eac393917eec3e2ce8695b0e42088a3bb08dcb8f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"fdd56ac260149c42894590f4c2c2fd8a56c00183","url":"https://github.com/datachain-ai/datachain/commit/fdd56ac260149c42894590f4c2c2fd8a56c00183","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"a50eafa67bb8215b05ec2bf7a5be5f3e6a02f4c0","url":"https://github.com/datachain-ai/datachain/commit/a50eafa67bb8215b05ec2bf7a5be5f3e6a02f4c0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"290720176d803097f0ca7346fc0c67c0008e5321","url":"https://github.com/datachain-ai/datachain/commit/290720176d803097f0ca7346fc0c67c0008e5321","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7661288e7a0a406fe9ec8349b9ff3bdb734bca30","url":"https://github.com/datachain-ai/datachain/commit/7661288e7a0a406fe9ec8349b9ff3bdb734bca30","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"5ddebc3deb656ad56550131d5902dee9d64766f6","url":"https://github.com/datachain-ai/datachain/commit/5ddebc3deb656ad56550131d5902dee9d64766f6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"aa5ef5598ed3434b3a6f668124596c60c82c3573","url":"https://github.com/datachain-ai/datachain/commit/aa5ef5598ed3434b3a6f668124596c60c82c3573","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"37de2f7c70a62e7701e975a7ea384aa2bcdca400","url":"https://github.com/datachain-ai/datachain/commit/37de2f7c70a62e7701e975a7ea384aa2bcdca400","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"c84e27c2ae2c82fbdd796edcc6156fad8ae9bde9","url":"https://github.com/datachain-ai/datachain/commit/c84e27c2ae2c82fbdd796edcc6156fad8ae9bde9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"01cceff22dc5c109b72e96a738bd1e73dba3dbfe","url":"https://github.com/datachain-ai/datachain/commit/01cceff22dc5c109b72e96a738bd1e73dba3dbfe","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7271bd74db3683f656a6f23eb0248a61dc75f9a0","url":"https://github.com/datachain-ai/datachain/commit/7271bd74db3683f656a6f23eb0248a61dc75f9a0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"ffe4a3c115d10daeac3bd60aec0f443dd37fe94d","url":"https://github.com/datachain-ai/datachain/commit/ffe4a3c115d10daeac3bd60aec0f443dd37fe94d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"b0a2cce9aa6b5c4521b7d7f862eb210f10e3aebd","url":"https://github.com/datachain-ai/datachain/commit/b0a2cce9aa6b5c4521b7d7f862eb210f10e3aebd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"b0afa987dad5069b385869f8e4a7d2af3c2c4d35","url":"https://github.com/datachain-ai/datachain/commit/b0afa987dad5069b385869f8e4a7d2af3c2c4d35","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"f863c0796d8b604e5a5b901b58763784d9692e5f","url":"https://github.com/datachain-ai/datachain/commit/f863c0796d8b604e5a5b901b58763784d9692e5f","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"b705f8366419d1a1f95553e1e403f6a4401c9a0b","url":"https://github.com/datachain-ai/datachain/commit/b705f8366419d1a1f95553e1e403f6a4401c9a0b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"7f212871d5fdaf841369e328fafcb4074e83d019","url":"https://github.com/datachain-ai/datachain/commit/7f212871d5fdaf841369e328fafcb4074e83d019","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"4f2b6cd18785bb19089e6912d6a3cd320d814eab","url":"https://github.com/datachain-ai/datachain/commit/4f2b6cd18785bb19089e6912d6a3cd320d814eab","weight":0.9}],"data":{"attributed_loc_by_commit":{"02479f01d0810ef45d6c698614cf6c998084ce8f":51,"a62d65d0fb59e0d7ebffe453bbd351ccc3f9c29e":27,"396d8a96990fbd18a6fb9b2776b9b90f20ad69a6":87,"05dfadf4ddb9d2d59535f6279e8c0ed266848bc8":952,"b190cd603e2179df123163ff2ed81c453efbca08":13,"7175f12e2fe9c61ea56d163e05e15ea6ed8df892":7,"e14fe67933d18c0c21a6442629b2cfad5d10f82f":0,"7500174cf6fc6703f226f9a03ec9a935227ef790":0,"38ed1ddcbf76f926bc1280cb5760d321eb3d4e9b":90,"4b023eadcc17eeb082c8d1e3db1d346379c7681a":85,"835d935eae66f59fb911135dfc9b1a94c25b3ebf":61,"7a4a6911d3a527f3072398b99e423a240a0fbc0b":580,"8d7be7f7160017b67f0b578a286ce02b0062b5e2":81,"a0eda411fe0679fd62d2679fc4b6f3c5f1cf0ac8":1625,"04bc6b83bf8e936604e07a05bc809f617f199b41":56,"d8d4b31a875eb57205c48bd3c1c331a3e130660e":29,"f6e17e911f73fc505365c454da5a51d03cfc138b":76,"3cc2814adbec5214a5ebf4b703a12804ea34c866":121,"f9a731cedece4f131cb6db081acfc1874dbc7560":428,"aff9efe3860ddf78bed47c4da37f7a97d3aa188c":2,"b6ce8992d6c733034ecc3066d326f4e692d3f90d":0,"6b32aa154ff8b3bc4d175a896310d854d42a45a8":50,"505cf3835063363cf19ab503f808ef9128dc9edf":103,"d3065440b8ef539864831c6a25b95e9cca60bf0b":195,"df04c12415f6f5827e7ee7750c9571835b455a6f":0,"a9d639ea67c8ef401ec05409e50d14e187889a1a":2,"7f143e1ad160e071f0da756cdf6b6a5babfbfc78":1140,"e9c6802b166a065993a3633bc2e7b8a8f980302f":146,"347e1b31254162e876701b86fd39fda7f80995ea":55,"3ab33ef46d885b821a36f7963cf9b90d2db993b5":3,"dd96621a1f89c79b0ca2ce89fc857949af8f1547":0,"3b8f313ac6d97f75866b008f4fa41ed3e20ec50f":5,"e5e70c9f507ecef0e1abd107a4e8c36d751f240c":1,"1955f8e5b31b3bd49ba57e454c96af3336ee6339":29,"dd883063b19556e6104f1dba0cf8cf27ead47b05":58,"7ac83167e9f48fe363e94def5c49461d1a3db355":117,"86fce06c32760f216d0065241410d77e0465899a":48,"7a568b7c93bf76cdead4ab304c94042212cf6577":648,"395d5e0944967a9cf537f248ab388848c062453c":366,"f28478cae19572780aed12a6965c9fb220256163":57,"fcfeac77be4eb5218c101520704ce0a46387ba13":1,"f6be3ca987f93c34d44fb409afddb4d58619ebbc":257,"1a69d6946eb04d86e3d64cbe825f17a3fab699c9":0,"b66a81b077bac0fda25c2ca228ba1b0824bfd6f4":101,"71ddbf501544a8970b3d26e0bfb32d25237bd925":0,"b675028d3f243fab0bee269f2ae23b1b7f5ff77e":485,"7c73a4fde2562ebd1e0bc3f72401330b870d67ff":6,"7888833243dee617ef571be132c187560b1dd46e":25,"88c165a5a978d6af10d27c0961fe6acc27031c4c":86,"1788701001760dfbc0d408b75cf992f4c28d3079":387,"bf0a0de8f31356bab38607dad29b28ab43d5b394":0,"ae41d4e8ab3a11e41eb2b699ee438ec0dc698bdf":218,"b0999d164abda9b7275bb55233d0d3940be2e205":22,"f2d745131e1b988b485bb6aaa1db7dfc65c98afa":12,"3d2903786d49332085b5dbf00ada50f65a301a35":5,"7005c12937797bb1ac1a17ce27c78062fcfe4abd":0,"a0e11a4e5363d9c67bc9bbe705d024b2c5b388e9":815,"a781b435f677925dc3b168060307a15ee228f0b2":5,"b01cbab34fad4b74b8cca88035de8786964d9dd3":17,"4faa01e65253d8ef73e05c1c67f6f932c4c191b2":181,"a12589ad3ff8a74f3a466a98e390f432041e6f16":453,"1c9bb7aae967245790e05ff9937d8fa44cb231b2":3,"d9608087bba10c923393a09a9a1f76fb948709ea":0,"8fb8c4a44b205ab29c9bdfd0822a95627ada0372":14,"7743f7f9782fff6440a9ef145154a98838da3b7f":129,"aa6371f403137cd95a3089694c06ca3ee73edcc4":21,"745d9d93b5bde95ddd15681e4684423e7d006819":1624,"f63c62eea550d9ffbe9c2a65d7e23949741c2a10":203,"e690029806094f152252bffdb1ef92d755e45102":259,"050da3733e9ba5c53cff9ff95b69dea882e5c531":42,"67147749a90c8fc3a17b6108abbdb3cb32f57383":30,"8f0cf9d79bac11699d419ae5e638ccfe8b2dd39b":51,"aefd8dd534997752b3350a47629b2f64fa2baaf7":43,"bb8f05ae822f7ae9b4d0f7ff56cd9eff1ea781eb":4,"46efbac47523262cb9add41fe201612a307c8ce2":32,"4873d352a9dc23041219323de24235385b378256":180,"d28f0ab3b1e304f6828dc6694316026dd4c9c203":12,"5ebac0233b8dc6af48a94a00c23dd1f88fb5962e":15,"e1e04f4154af257c8992a6325c70586252a5b755":148,"bead6765f754356008d825c85fba4a6832cd873f":32,"03f670859c5323f6eba2b7dc61ac5c839dcf497e":86,"d8956d1718e005d929d12cd90902d66f2f821de3":123,"c40705319ef708700d18c6b57059c92fe2e19086":145,"4f2b6cd18785bb19089e6912d6a3cd320d814eab":42,"7f212871d5fdaf841369e328fafcb4074e83d019":21,"b705f8366419d1a1f95553e1e403f6a4401c9a0b":3,"f863c0796d8b604e5a5b901b58763784d9692e5f":29,"b0afa987dad5069b385869f8e4a7d2af3c2c4d35":7,"b0a2cce9aa6b5c4521b7d7f862eb210f10e3aebd":142,"ffe4a3c115d10daeac3bd60aec0f443dd37fe94d":19,"7271bd74db3683f656a6f23eb0248a61dc75f9a0":139,"01cceff22dc5c109b72e96a738bd1e73dba3dbfe":436,"c84e27c2ae2c82fbdd796edcc6156fad8ae9bde9":41,"37de2f7c70a62e7701e975a7ea384aa2bcdca400":143,"aa5ef5598ed3434b3a6f668124596c60c82c3573":764,"5ddebc3deb656ad56550131d5902dee9d64766f6":283,"7661288e7a0a406fe9ec8349b9ff3bdb734bca30":6,"290720176d803097f0ca7346fc0c67c0008e5321":229,"a50eafa67bb8215b05ec2bf7a5be5f3e6a02f4c0":21,"fdd56ac260149c42894590f4c2c2fd8a56c00183":494,"eac393917eec3e2ce8695b0e42088a3bb08dcb8f":1087,"fcbf2bfb5aae89c2ea15789f66bf5f0420bf0a16":13,"42f7aef8fd278455318abae2744d711fbb9a3451":13,"c726a3ce002dfc6826330f2286f3257d5c3dc560":243,"3e034bbdb4f9926e9e3e7cf6c8ac5428f3a09ef2":1104,"5de86b14002e102ae404b0d796574ad5ce4cb73d":720,"ae3ce429b3f868c8f62a26e444939bb5beede991":31,"8b7fe3202ba87f473782b06ac5e184d23d674921":39},"tools":{"github-copilot":{"name":"GitHub Copilot coding agent","commits":21,"loc":2873,"first_seen":1749601411,"last_seen":1793731325},"cursor":{"name":"Cursor agent","commits":3,"loc":1039,"first_seen":1751616790,"last_seen":1761667026},"claude-code":{"name":"Claude Code","commits":87,"loc":15643,"first_seen":1774203671,"last_seen":1794599699},"openai-codex":{"name":"OpenAI Codex","commits":1,"loc":195,"first_seen":1780703015,"last_seen":1780703015}},"monthly":{"2024-06":{"loc":0,"attributed_loc":0},"2024-07":{"loc":43573,"attributed_loc":0},"2024-08":{"loc":5425,"attributed_loc":0},"2024-09":{"loc":5252,"attributed_loc":0},"2024-10":{"loc":4579,"attributed_loc":0},"2024-11":{"loc":6421,"attributed_loc":0},"2024-12":{"loc":4259,"attributed_loc":0},"2025-01":{"loc":5484,"attributed_loc":0},"2025-02":{"loc":2084,"attributed_loc":0},"2025-03":{"loc":9058,"attributed_loc":0},"2025-04":{"loc":1398,"attributed_loc":0},"2025-05":{"loc":5787,"attributed_loc":0},"2025-06":{"loc":6802,"attributed_loc":78},"2025-07":{"loc":4901,"attributed_loc":1052},"2025-08":{"loc":3419,"attributed_loc":0},"2025-09":{"loc":5090,"attributed_loc":7},"2025-10":{"loc":7510,"attributed_loc":0},"2025-11":{"loc":2150,"attributed_loc":0},"2025-12":{"loc":5326,"attributed_loc":236},"2026-01":{"loc":2640,"attributed_loc":0},"2026-02":{"loc":6909,"attributed_loc":2286},"2026-03":{"loc":10403,"attributed_loc":710},"2026-04":{"loc":10375,"attributed_loc":2},"2026-05":{"loc":4428,"attributed_loc":153},"2026-06":{"loc":5246,"attributed_loc":197},"2026-07":{"loc":8021,"attributed_loc":1379},"2026-08":{"loc":3074,"attributed_loc":1552},"2026-09":{"loc":1517,"attributed_loc":586},"2026-10":{"loc":15329,"attributed_loc":4879},"2026-11":{"loc":15811,"attributed_loc":6618}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1781331291.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1781331291}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":965.0,"flagged_units":2.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":175671.0,"flagged_loc":2429.0,"flagged_loc_share":0.013826983395096516,"max_loc_per_hour":2756.0,"median_loc_per_hour":3.351175238538515,"pr_timed_units":944.0,"excluded_import_loc":36600.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"1,378 lines of first-party code in ~0.5h (2,756 lines/hour, 1 commit session)","ref":"3d199e60b5361b46e957f1d6b62ab671523bd18c","url":"https://github.com/datachain-ai/datachain/commit/3d199e60b5361b46e957f1d6b62ab671523bd18c","weight":0.6},{"kind":"velocity-burst","description":"1,051 lines of first-party code in ~0.5h (2,102 lines/hour, 1 commit session)","ref":"dc3490402eb0c35b84546be39cb2700dc35bbc15","url":"https://github.com/datachain-ai/datachain/commit/dc3490402eb0c35b84546be39cb2700dc35bbc15","weight":0.6}],"data":{"flagged_loc_by_commit":{"3d199e60b5361b46e957f1d6b62ab671523bd18c":1378,"dc3490402eb0c35b84546be39cb2700dc35bbc15":1051},"excluded_import_commits":["317c95507969d7ba8f3d068a81dca3de9cdbf848"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":99.0,"flagged_releases":1.0,"max_loc_per_day":13994.3},"findings":[],"evidence":[{"kind":"release-burst","description":"0.47.2 → 0.48.0: 5,678 lines in 1.64 days (3,453.8 lines/day)","ref":"0.47.2...0.48.0","url":"https://github.com/datachain-ai/datachain/compare/0.47.2...0.48.0","weight":0.4}],"data":{"releases":[{"from":"0.37.6","to":"0.37.7","loc":18,"days":0.79,"loc_per_day":22.8,"flagged":false},{"from":"0.37.7","to":"0.37.8","loc":119,"days":2.05,"loc_per_day":58.1,"flagged":false},{"from":"0.37.8","to":"0.37.9","loc":948,"days":0.07,"loc_per_day":12760.1,"flagged":false},{"from":"0.37.9","to":"0.37.10","loc":15,"days":2.7,"loc_per_day":5.6,"flagged":false},{"from":"0.37.10","to":"0.37.11","loc":216,"days":1.1,"loc_per_day":195.8,"flagged":false},{"from":"0.37.11","to":"0.37.12","loc":448,"days":3.48,"loc_per_day":128.6,"flagged":false},{"from":"0.37.12","to":"0.37.13","loc":238,"days":3.98,"loc_per_day":59.8,"flagged":false},{"from":"0.37.13","to":"0.37.14","loc":450,"days":3.59,"loc_per_day":125.5,"flagged":false},{"from":"0.37.14","to":"0.37.15","loc":98,"days":1.16,"loc_per_day":84.5,"flagged":false},{"from":"0.37.15","to":"0.38.0","loc":506,"days":6.06,"loc_per_day":83.5,"flagged":false},{"from":"0.38.0","to":"0.38.1","loc":161,"days":7.19,"loc_per_day":22.4,"flagged":false},{"from":"0.38.1","to":"0.38.2","loc":18,"days":1.39,"loc_per_day":13.0,"flagged":false},{"from":"0.38.2","to":"0.38.3","loc":64,"days":1.58,"loc_per_day":40.6,"flagged":false},{"from":"0.38.3","to":"0.38.4","loc":745,"days":3.09,"loc_per_day":241.0,"flagged":false},{"from":"0.38.4","to":"0.38.5","loc":445,"days":1.73,"loc_per_day":257.9,"flagged":false},{"from":"0.38.5","to":"0.39.0","loc":673,"days":3.3,"loc_per_day":203.8,"flagged":false},{"from":"0.39.0","to":"0.40.0","loc":266,"days":4.0,"loc_per_day":66.5,"flagged":false},{"from":"0.40.0","to":"0.40.1","loc":1761,"days":4.19,"loc_per_day":420.1,"flagged":false},{"from":"0.40.1","to":"0.40.2","loc":2,"days":0.58,"loc_per_day":3.5,"flagged":false},{"from":"0.40.2","to":"0.41.0","loc":364,"days":0.08,"loc_per_day":4503.7,"flagged":false},{"from":"0.41.0","to":"0.42.0","loc":190,"days":2.91,"loc_per_day":65.2,"flagged":false},{"from":"0.42.0","to":"0.43.0","loc":527,"days":2.11,"loc_per_day":250.0,"flagged":false},{"from":"0.43.0","to":"0.43.1","loc":106,"days":5.14,"loc_per_day":20.6,"flagged":false},{"from":"0.43.1","to":"0.43.2","loc":108,"days":1.69,"loc_per_day":63.7,"flagged":false},{"from":"0.43.2","to":"0.44.0","loc":75,"days":0.42,"loc_per_day":177.2,"flagged":false},{"from":"0.44.0","to":"0.44.1","loc":14,"days":7.49,"loc_per_day":1.9,"flagged":false},{"from":"0.44.1","to":"0.44.2","loc":425,"days":4.59,"loc_per_day":92.6,"flagged":false},{"from":"0.44.2","to":"0.44.3","loc":3,"days":1.06,"loc_per_day":2.8,"flagged":false},{"from":"0.44.3","to":"0.44.4","loc":517,"days":0.77,"loc_per_day":667.3,"flagged":false},{"from":"0.44.4","to":"0.44.5","loc":721,"days":8.07,"loc_per_day":89.4,"flagged":false},{"from":"0.44.5","to":"0.44.6","loc":0,"days":1.44,"loc_per_day":0.0,"flagged":false},{"from":"0.44.6","to":"0.44.7","loc":309,"days":1.85,"loc_per_day":167.1,"flagged":false},{"from":"0.44.7","to":"0.44.8","loc":277,"days":3.69,"loc_per_day":75.0,"flagged":false},{"from":"0.44.8","to":"0.44.9","loc":374,"days":0.06,"loc_per_day":6263.5,"flagged":false},{"from":"0.44.9","to":"0.45","loc":580,"days":11.16,"loc_per_day":52.0,"flagged":false},{"from":"0.45","to":"0.46.0","loc":4226,"days":5.5,"loc_per_day":769.0,"flagged":false},{"from":"0.46.0","to":"0.46.1","loc":1806,"days":2.71,"loc_per_day":666.6,"flagged":false},{"from":"0.46.1","to":"0.46.2","loc":289,"days":6.01,"loc_per_day":48.1,"flagged":false},{"from":"0.46.2","to":"0.46.3","loc":8,"days":1.83,"loc_per_day":4.4,"flagged":false},{"from":"0.46.3","to":"0.46.4","loc":320,"days":4.72,"loc_per_day":67.9,"flagged":false},{"from":"0.46.4","to":"0.46.5","loc":60,"days":2.9,"loc_per_day":20.7,"flagged":false},{"from":"0.46.5","to":"0.47.0","loc":745,"days":0.29,"loc_per_day":2610.6,"flagged":false},{"from":"0.47.0","to":"0.47.1","loc":99,"days":0.13,"loc_per_day":754.0,"flagged":false},{"from":"0.47.1","to":"0.47.2","loc":188,"days":9.57,"loc_per_day":19.6,"flagged":false},{"from":"0.47.2","to":"0.48.0","loc":5678,"days":1.64,"loc_per_day":3453.8,"flagged":true},{"from":"0.48.0","to":"0.48.1","loc":800,"days":4.26,"loc_per_day":187.9,"flagged":false},{"from":"0.48.1","to":"0.48.2","loc":377,"days":3.18,"loc_per_day":118.5,"flagged":false},{"from":"0.48.2","to":"0.48.3","loc":7,"days":0.28,"loc_per_day":25.4,"flagged":false},{"from":"0.48.3","to":"0.48.4","loc":322,"days":1.11,"loc_per_day":288.9,"flagged":false},{"from":"0.48.4","to":"0.49.0","loc":1053,"days":3.02,"loc_per_day":348.6,"flagged":false},{"from":"0.49.0","to":"0.49.1","loc":4,"days":1.81,"loc_per_day":2.2,"flagged":false},{"from":"0.49.1","to":"0.50.0","loc":752,"days":2.78,"loc_per_day":270.5,"flagged":false},{"from":"0.50.0","to":"0.50.1","loc":634,"days":5.21,"loc_per_day":121.6,"flagged":false},{"from":"0.50.1","to":"0.50.2","loc":177,"days":0.94,"loc_per_day":189.2,"flagged":false},{"from":"0.50.2","to":"0.51.0","loc":68,"days":4.62,"loc_per_day":14.7,"flagged":false},{"from":"0.51.0","to":"0.51.1","loc":5155,"days":4.55,"loc_per_day":1133.9,"flagged":false},{"from":"0.51.1","to":"0.52.0","loc":1949,"days":3.08,"loc_per_day":632.4,"flagged":false},{"from":"0.52.0","to":"0.53.0","loc":926,"days":3.56,"loc_per_day":259.9,"flagged":false},{"from":"0.53.0","to":"0.54.0","loc":342,"days":0.57,"loc_per_day":597.5,"flagged":false},{"from":"0.54.0","to":"0.54.1","loc":537,"days":4.96,"loc_per_day":108.3,"flagged":false},{"from":"0.54.1","to":"0.54.2","loc":585,"days":4.7,"loc_per_day":124.5,"flagged":false},{"from":"0.54.2","to":"0.54.3","loc":16,"days":0.91,"loc_per_day":17.6,"flagged":false},{"from":"0.54.3","to":"0.54.4","loc":0,"days":0.05,"loc_per_day":0.0,"flagged":false},{"from":"0.54.4","to":"0.54.5","loc":610,"days":2.61,"loc_per_day":234.1,"flagged":false},{"from":"0.54.5","to":"0.55.0","loc":175,"days":3.57,"loc_per_day":49.1,"flagged":false},{"from":"0.55.0","to":"0.55.1","loc":320,"days":0.69,"loc_per_day":463.9,"flagged":false},{"from":"0.55.1","to":"0.55.2","loc":52,"days":0.8,"loc_per_day":64.7,"flagged":false},{"from":"0.55.2","to":"0.56.0","loc":2196,"days":5.94,"loc_per_day":370.0,"flagged":false},{"from":"0.56.0","to":"0.56.1","loc":417,"days":2.46,"loc_per_day":169.3,"flagged":false},{"from":"0.56.1","to":"0.57.0","loc":1258,"days":11.49,"loc_per_day":109.5,"flagged":false},{"from":"0.57.0","to":"0.57.1","loc":206,"days":2.56,"loc_per_day":80.5,"flagged":false},{"from":"0.57.1","to":"0.57.2","loc":375,"days":2.04,"loc_per_day":183.5,"flagged":false},{"from":"0.57.2","to":"0.57.3","loc":3605,"days":11.31,"loc_per_day":318.6,"flagged":false},{"from":"0.57.3","to":"0.58.0","loc":444,"days":9.12,"loc_per_day":48.7,"flagged":false},{"from":"0.58.0","to":"0.58.1","loc":1214,"days":10.17,"loc_per_day":119.3,"flagged":false},{"from":"0.58.1","to":"0.58.2","loc":1147,"days":0.92,"loc_per_day":1243.3,"flagged":false},{"from":"0.58.2","to":"0.58.3","loc":146,"days":1.69,"loc_per_day":86.5,"flagged":false},{"from":"0.58.3","to":"0.59.0","loc":4786,"days":5.03,"loc_per_day":951.1,"flagged":false},{"from":"0.59.0","to":"0.59.1","loc":392,"days":2.33,"loc_per_day":168.3,"flagged":false},{"from":"0.59.1","to":"0.59.2","loc":18,"days":0.13,"loc_per_day":138.8,"flagged":false},{"from":"0.59.2","to":"0.59.3","loc":289,"days":10.84,"loc_per_day":26.7,"flagged":false},{"from":"0.59.3","to":"0.59.4","loc":204,"days":6.88,"loc_per_day":29.6,"flagged":false},{"from":"0.59.4","to":"0.59.5","loc":48,"days":0.05,"loc_per_day":879.9,"flagged":false},{"from":"0.59.5","to":"0.59.6","loc":1026,"days":13.37,"loc_per_day":76.7,"flagged":false},{"from":"0.59.6","to":"0.59.7","loc":586,"days":7.18,"loc_per_day":81.7,"flagged":false},{"from":"0.59.7","to":"0.59.8","loc":1535,"days":16.4,"loc_per_day":93.6,"flagged":false},{"from":"0.59.8","to":"0.59.9","loc":69,"days":2.5,"loc_per_day":27.6,"flagged":false},{"from":"0.59.9","to":"0.59.10","loc":358,"days":2.58,"loc_per_day":138.8,"flagged":false},{"from":"0.59.10","to":"0.59.11","loc":84,"days":1.0,"loc_per_day":83.9,"flagged":false},{"from":"0.59.11","to":"0.59.12","loc":490,"days":5.51,"loc_per_day":88.9,"flagged":false},{"from":"0.59.12","to":"0.59.13","loc":219,"days":7.78,"loc_per_day":28.1,"flagged":false},{"from":"0.59.13","to":"0.60.0","loc":475,"days":5.07,"loc_per_day":93.7,"flagged":false},{"from":"0.60.0","to":"0.61.0","loc":1166,"days":16.37,"loc_per_day":71.2,"flagged":false},{"from":"0.61.0","to":"0.61.1","loc":0,"days":0.47,"loc_per_day":0.0,"flagged":false},{"from":"0.61.1","to":"0.62.0","loc":4450,"days":0.32,"loc_per_day":13994.3,"flagged":false},{"from":"0.62.0","to":"0.62.1","loc":5401,"days":7.83,"loc_per_day":689.7,"flagged":false},{"from":"0.62.1","to":"0.62.2","loc":3829,"days":1.47,"loc_per_day":2601.0,"flagged":false},{"from":"0.62.2","to":"0.62.3","loc":2493,"days":4.0,"loc_per_day":623.0,"flagged":false},{"from":"0.62.3","to":"0.62.4","loc":6062,"days":4.47,"loc_per_day":1355.3,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":60658.0,"index":0.223,"count:narrated_steps":11.0,"per_kloc:narrated_steps":0.181,"files:narrated_steps":4.0,"count:placeholder":1.0,"per_kloc:placeholder":0.016,"files:placeholder":1.0,"count:emoji_in_code":1.0,"per_kloc:emoji_in_code":0.016,"files:emoji_in_code":1.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 1: Create initial dataset with sample data","ref":"examples/incremental_processing/retry.py:50","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/examples/incremental_processing/retry.py#L50","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 2: First processing pass - some records will fail","ref":"examples/incremental_processing/retry.py:66","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/examples/incremental_processing/retry.py#L66","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 3: Retry processing - only failed records will be reprocessed","ref":"examples/incremental_processing/retry.py:93","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/examples/incremental_processing/retry.py#L93","weight":0.0},{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: \"In a real scenario, you could run this again or implement \"","ref":"examples/incremental_processing/retry.py:122","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/examples/incremental_processing/retry.py#L122","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 1: Anonymous probe — uses BlobServiceClient directly (not adlfs)","ref":"src/datachain/client/azure.py:69","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/azure.py#L69","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 2: Authenticated probe.","ref":"src/datachain/client/azure.py:91","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/azure.py#L91","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 1: Anonymous probe.","ref":"src/datachain/client/gcs.py:70","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/gcs.py#L70","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 2: Authenticated probe — create_fs resolves credentials from","ref":"src/datachain/client/gcs.py:101","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/gcs.py#L101","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":8.0,"secrets_low_confidence":0.0},"findings":[{"rule_id":"gitleaks/slack-webhook-url","severity":"low","message":"Possible slack-webhook-url secret in the current tree (test/docs/example file)","path":"docs/studio/webhooks.md","line":262,"fingerprint":"docs/studio/webhooks.md:slack-webhook-url:262"},{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in the current tree (test/docs/example file)","path":"tests/func/fake-service-account-credentials.json","line":5,"fingerprint":"tests/func/fake-service-account-credentials.json:private-key:5"},{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in history (commit 7500174cf6); removed from the current tree but still retrievable","path":"docs/studio/self-hosting/installation/k8s-helm.md","line":125,"fingerprint":"7500174cf6fc6703f226f9a03ec9a935227ef790:docs/studio/self-hosting/installation/k8s-helm.md:private-key:125"},{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in history (commit 7500174cf6); removed from the current tree but still retrievable","path":"docs/studio/self-hosting/configuration/git-forges/index.md","line":104,"fingerprint":"7500174cf6fc6703f226f9a03ec9a935227ef790:docs/studio/self-hosting/configuration/git-forges/index.md:private-key:104"},{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in history (commit 7500174cf6); removed from the current tree but still retrievable","path":"docs/studio/self-hosting/configuration/git-forges/github.md","line":91,"fingerprint":"7500174cf6fc6703f226f9a03ec9a935227ef790:docs/studio/self-hosting/configuration/git-forges/github.md:private-key:91"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit 7500174cf6); removed from the current tree but still retrievable","path":"docs/studio/self-hosting/configuration/git-forges/gitlab.md","line":460,"fingerprint":"7500174cf6fc6703f226f9a03ec9a935227ef790:docs/studio/self-hosting/configuration/git-forges/gitlab.md:curl-auth-header:460"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 317c955079); removed from the current tree but still retrievable","path":"tests/func/test_pull.py","line":139,"fingerprint":"317c95507969d7ba8f3d068a81dca3de9cdbf848:tests/func/test_pull.py:generic-api-key:139"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 317c955079); removed from the current tree but still retrievable","path":"tests/func/test_ls.py","line":262,"fingerprint":"317c95507969d7ba8f3d068a81dca3de9cdbf848:tests/func/test_ls.py:generic-api-key:262"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":21.0,"findings_high":8.0,"findings_medium":11.0,"findings_low":2.0,"weighted_findings":9.925,"scanned_lines":60658.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-system-call-audit","severity":"high","message":"Found dynamic content used in a system call. This is dangerous if external data can reach this function call because it allows a malicious actor to execute commands. Use the 'subprocess' module instead, which is easier to use without accidentally exposing a command injection vulnerability. [confidence low]","path":"docs/api_hooks.py","line":42,"fingerprint":"python.lang.security.audit.dangerous-system-call-audit:docs/api_hooks.py:42"},{"rule_id":"opengrep/python.lang.security.use-defused-xml","severity":"high","message":"The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and \"XML bombs\" can cause denial of service. [confidence low]","path":"src/datachain/client/azure.py","line":8,"fingerprint":"python.lang.security.use-defused-xml:src/datachain/client/azure.py:8"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-asyncio-create-exec-audit","severity":"high","message":"Detected 'create_subprocess_exec' function without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/datachain/client/listing_worker.py","line":83,"fingerprint":"python.lang.security.audit.dangerous-asyncio-create-exec-audit:src/datachain/client/listing_worker.py:83"},{"rule_id":"opengrep/python.lang.security.use-defused-xml","severity":"high","message":"The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and \"XML bombs\" can cause denial of service. [confidence low]","path":"src/datachain/client/s3.py","line":7,"fingerprint":"python.lang.security.use-defused-xml:src/datachain/client/s3.py:7"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/datachain/lib/video.py","line":616,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/datachain/lib/video.py:616"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/datachain/query/dataset.py","line":1010,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/datachain/query/dataset.py:1010"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"src/datachain/sql/sqlite/base.py","line":779,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:src/datachain/sql/sqlite/base.py:779"},{"rule_id":"opengrep/python.sqlalchemy.security.audit.avoid-sqlalchemy-text","severity":"high","message":"sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as or_, and_, etc.) to const [confidence medium]","path":"src/datachain/testing.py","line":25,"fingerprint":"python.sqlalchemy.security.audit.avoid-sqlalchemy-text:src/datachain/testing.py:25"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/catalog/loader.py","line":64,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/catalog/loader.py:64"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/catalog/loader.py","line":106,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/catalog/loader.py:106"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/catalog/loader.py","line":130,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/catalog/loader.py:130"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/client/fsspec.py","line":132,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/client/fsspec.py:132"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":"src/datachain/client/listing_worker.py","line":40,"fingerprint":"python.lang.security.deserialization.avoid-pickle:src/datachain/client/listing_worker.py:40"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":"src/datachain/client/listing_worker.py","line":49,"fingerprint":"python.lang.security.deserialization.avoid-pickle:src/datachain/client/listing_worker.py:49"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":"src/datachain/client/listing_worker.py","line":55,"fingerprint":"python.lang.security.deserialization.avoid-pickle:src/datachain/client/listing_worker.py:55"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":"src/datachain/client/listing_worker.py","line":56,"fingerprint":"python.lang.security.deserialization.avoid-pickle:src/datachain/client/listing_worker.py:56"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/lazy.py","line":19,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/lazy.py:19"},{"rule_id":"opengrep/python.lang.security.audit.exec-detected","severity":"medium","message":"Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low]","path":"src/datachain/lib/meta_formats.py","line":174,"fingerprint":"python.lang.security.audit.exec-detected:src/datachain/lib/meta_formats.py:174"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"src/datachain/lib/model_store.py","line":147,"fingerprint":"python.lang.security.audit.non-literal-import:src/datachain/lib/model_store.py:147"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":"src/datachain/lib/dc/datachain.py","line":3185,"fingerprint":"python.lang.security.use-defusedcsv:src/datachain/lib/dc/datachain.py:3185"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-annotations-usage","severity":"low","message":"Annotations passed to `typing.get_type_hints` are evaluated in `globals` and `locals` namespaces. Make sure that no arbitrary value can be written as the annotation and passed to `typing.get_type_hints` function. [confidence low]","path":"src/datachain/llm/spec.py","line":309,"fingerprint":"python.lang.security.audit.dangerous-annotations-usage:src/datachain/llm/spec.py:309"}],"evidence":[],"data":{"rulesets":["python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":7.0,"findings":65.0,"findings_high":37.0,"findings_medium":13.0,"findings_low":15.0,"penalty":477.0},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/actions/install-ffmpeg/action.yml","line":17,"fingerprint":"unpinned-uses:.github/actions/install-ffmpeg/action.yml:17"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/actions/install-ffmpeg/action.yml","line":37,"fingerprint":"unpinned-uses:.github/actions/install-ffmpeg/action.yml:37"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/benchmarks.yml","line":21,"fingerprint":"unpinned-uses:.github/workflows/benchmarks.yml:21"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/benchmarks.yml","line":23,"fingerprint":"unpinned-uses:.github/workflows/benchmarks.yml:23"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/benchmarks.yml","line":28,"fingerprint":"unpinned-uses:.github/workflows/benchmarks.yml:28"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":20,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:20"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":30,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":40,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:40"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":49,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:49"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":54,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:54"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":59,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:59"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codspeed.yml","line":72,"fingerprint":"unpinned-uses:.github/workflows/codspeed.yml:72"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":20,"fingerprint":"unpinned-uses:.github/workflows/release.yml:20"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/release.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":30,"fingerprint":"unpinned-uses:.github/workflows/release.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":39,"fingerprint":"unpinned-uses:.github/workflows/release.yml:39"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/release.yml","line":30,"fingerprint":"cache-poisoning:.github/workflows/release.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests-studio.yml","line":72,"fingerprint":"unpinned-uses:.github/workflows/tests-studio.yml:72"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests-studio.yml","line":80,"fingerprint":"unpinned-uses:.github/workflows/tests-studio.yml:80"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests-studio.yml","line":86,"fingerprint":"unpinned-uses:.github/workflows/tests-studio.yml:86"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests-studio.yml","line":91,"fingerprint":"unpinned-uses:.github/workflows/tests-studio.yml:91"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":21,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:21"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":27,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:27"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":32,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:32"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":51,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:51"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":81,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:81"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":105,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:105"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":110,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:110"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":162,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:162"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":190,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:190"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":199,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:199"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":204,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:204"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/tests.yml","line":249,"fingerprint":"unpinned-uses:.github/workflows/tests.yml:249"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/update-template.yaml","line":14,"fingerprint":"unpinned-uses:.github/workflows/update-template.yaml:14"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/update-template.yaml","line":17,"fingerprint":"unpinned-uses:.github/workflows/update-template.yaml:17"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":5,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:5"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":12,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:12"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/benchmarks.yml","line":18,"fingerprint":"excessive-permissions:.github/workflows/benchmarks.yml:18"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/codspeed.yml","line":1,"fingerprint":"excessive-permissions:.github/workflows/codspeed.yml:1"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/codspeed.yml","line":17,"fingerprint":"excessive-permissions:.github/workflows/codspeed.yml:17"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/codspeed.yml","line":46,"fingerprint":"excessive-permissions:.github/workflows/codspeed.yml:46"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests-studio.yml","line":18,"fingerprint":"excessive-permissions:.github/workflows/tests-studio.yml:18"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests.yml","line":1,"fingerprint":"excessive-permissions:.github/workflows/tests.yml:1"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests.yml","line":17,"fingerprint":"excessive-permissions:.github/workflows/tests.yml:17"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests.yml","line":59,"fingerprint":"excessive-permissions:.github/workflows/tests.yml:59"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests.yml","line":176,"fingerprint":"excessive-permissions:.github/workflows/tests.yml:176"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/tests.yml","line":244,"fingerprint":"excessive-permissions:.github/workflows/tests.yml:244"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/update-template.yaml","line":10,"fingerprint":"excessive-permissions:.github/workflows/update-template.yaml:10"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/benchmarks.yml","line":21,"fingerprint":"artipacked:.github/workflows/benchmarks.yml:21"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/codspeed.yml","line":20,"fingerprint":"artipacked:.github/workflows/codspeed.yml:20"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/codspeed.yml","line":49,"fingerprint":"artipacked:.github/workflows/codspeed.yml:49"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":19,"fingerprint":"artipacked:.github/workflows/release.yml:19"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/tests-studio.yml","line":71,"fingerprint":"artipacked:.github/workflows/tests-studio.yml:71"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/tests-studio.yml","line":79,"fingerprint":"artipacked:.github/workflows/tests-studio.yml:79"},{"rule_id":"zizmor/template-injection","severity":"low","message":"code injection via template expansion [confidence high]","path":".github/workflows/tests-studio.yml","line":106,"fingerprint":"template-injection:.github/workflows/tests-studio.yml:106"},{"rule_id":"zizmor/self-repository","severity":"low","message":"use GitHub's dedicated self-repository syntax [confidence high]","path":".github/workflows/tests-studio.yml","line":110,"fingerprint":"self-repository:.github/workflows/tests-studio.yml:110"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/tests.yml","line":20,"fingerprint":"artipacked:.github/workflows/tests.yml:20"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/tests.yml","line":80,"fingerprint":"artipacked:.github/workflows/tests.yml:80"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/tests.yml","line":190,"fingerprint":"artipacked:.github/workflows/tests.yml:190"},{"rule_id":"zizmor/self-repository","severity":"low","message":"use GitHub's dedicated self-repository syntax [confidence high]","path":".github/workflows/tests.yml","line":140,"fingerprint":"self-repository:.github/workflows/tests.yml:140"},{"rule_id":"zizmor/self-repository","severity":"low","message":"use GitHub's dedicated self-repository syntax [confidence high]","path":".github/workflows/tests.yml","line":232,"fingerprint":"self-repository:.github/workflows/tests.yml:232"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/update-template.yaml","line":13,"fingerprint":"artipacked:.github/workflows/update-template.yaml:13"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/tests.yml","line":100,"fingerprint":"template-injection:.github/workflows/tests.yml:100"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":1.0,"check:signed_commits":1.0,"check:lockfiles":1.0,"signed_commit_share":0.965,"unpinned_manifests":0.0},"findings":[],"evidence":[{"kind":"posture","description":"Dependency updates: .github/dependabot.yml","ref":".github/dependabot.yml","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":2975.0,"function_nloc":35759.0,"mean_ccn":3.33,"p90_ccn":8.0,"complex_functions":53.0,"long_functions":15.0,"many_param_functions":94.0,"risky_nloc_share":0.137},"findings":[],"evidence":[{"kind":"complex-function","description":"__init__ in src/datachain/lib/settings.py: complexity 37, 143 lines","ref":"src/datachain/lib/settings.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/settings.py#L32","weight":0.6166666666666667},{"kind":"complex-function","description":"group_by in src/datachain/lib/dc/datachain.py: complexity 33, 134 lines","ref":"src/datachain/lib/dc/datachain.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/dc/datachain.py#L1816","weight":0.55},{"kind":"complex-function","description":"_compare in src/datachain/diff/__init__.py: complexity 31, 106 lines","ref":"src/datachain/diff/__init__.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/diff/__init__.py#L27","weight":0.5166666666666667},{"kind":"complex-function","description":"pull_dataset in src/datachain/catalog/catalog.py: complexity 30, 247 lines","ref":"src/datachain/catalog/catalog.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/catalog/catalog.py#L1958","weight":0.5},{"kind":"complex-function","description":"type_to_str in src/datachain/lib/utils.py: complexity 28, 114 lines","ref":"src/datachain/lib/utils.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/utils.py#L196","weight":0.4666666666666667},{"kind":"complex-function","description":"plan_datasets in src/datachain/skill/knowledge/scripts/plan.py: complexity 28, 79 lines","ref":"src/datachain/skill/knowledge/scripts/plan.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/skill/knowledge/scripts/plan.py#L46","weight":0.4666666666666667},{"kind":"complex-function","description":"save in src/datachain/query/dataset.py: complexity 26, 120 lines","ref":"src/datachain/query/dataset.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/query/dataset.py#L3455","weight":0.43333333333333335},{"kind":"complex-function","description":"_build_multi_signal_mapper in src/datachain/lib/dc/datachain.py: complexity 25, 91 lines","ref":"src/datachain/lib/dc/datachain.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/dc/datachain.py#L1300","weight":0.4166666666666667},{"kind":"complex-function","description":"_convert_feature_value in src/datachain/lib/signal_schema.py: complexity 25, 68 lines","ref":"src/datachain/lib/signal_schema.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/signal_schema.py#L990","weight":0.4166666666666667},{"kind":"complex-function","description":"parse_tabular in src/datachain/lib/dc/datachain.py: complexity 24, 89 lines","ref":"src/datachain/lib/dc/datachain.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/lib/dc/datachain.py#L2911","weight":0.4}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":44631.0,"duplicated_lines":2141.0,"duplicated_share":0.048,"files":240.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/__init__.py:196 and src/datachain/lib/dc/__init__.py:45","ref":"src/datachain/__init__.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/__init__.py#L196","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/catalog/catalog.py:139 and src/datachain/remote/studio.py:155","ref":"src/datachain/catalog/catalog.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/catalog/catalog.py#L139","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/catalog/catalog.py:899 and src/datachain/catalog/catalog.py:968","ref":"src/datachain/catalog/catalog.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/catalog/catalog.py#L899","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/catalog/catalog.py:1498 and src/datachain/data_storage/metastore.py:436","ref":"src/datachain/catalog/catalog.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/catalog/catalog.py#L1498","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/checkpoint_event.py:88 and src/datachain/data_storage/metastore.py:2946","ref":"src/datachain/checkpoint_event.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/checkpoint_event.py#L88","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/cli/__init__.py:176 and src/datachain/cli/__init__.py:187","ref":"src/datachain/cli/__init__.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/cli/__init__.py#L176","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/cli/parser/__init__.py:83 and src/datachain/cli/parser/__init__.py:117","ref":"src/datachain/cli/parser/__init__.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/cli/parser/__init__.py#L83","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/client/azure.py:219 and src/datachain/client/fsspec.py:254","ref":"src/datachain/client/azure.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/azure.py#L219","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/client/azure.py:221 and src/datachain/client/gcs.py:148","ref":"src/datachain/client/azure.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/azure.py#L221","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/datachain/client/azure.py:222 and src/datachain/client/s3.py:377","ref":"src/datachain/client/azure.py","url":"https://github.com/datachain-ai/datachain/blob/8b7fe3202ba87f473782b06ac5e184d23d674921/src/datachain/client/azure.py#L222","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":133.0,"weighted_findings":147.0,"scanned_lines":60658.0,"category:best-practice":31.0,"category:correctness":2.0,"category:maintainability":100.0},"findings":[{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/datachain/catalog/catalog.py","line":229,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/datachain/catalog/catalog.py:229"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/datachain/data_storage/sqlite.py","line":188,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/datachain/data_storage/sqlite.py:188"},{"rule_id":"opengrep/python.lang.best-practice.open-never-closed","severity":"high","message":"file object opened without corresponding close","path":"src/datachain/lib/tar.py","line":34,"fingerprint":"python.lang.best-practice.open-never-closed:src/datachain/lib/tar.py:34"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.identical-is-comparison","severity":"high","message":"Found identical comparison using is. Ensure this is what you intended.","path":"src/datachain/lib/zarr.py","line":31,"fingerprint":"python.lang.correctness.common-mistakes.identical-is-comparison:src/datachain/lib/zarr.py:31"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/datachain/query/dispatch.py","line":310,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/datachain/query/dispatch.py:310"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/datachain/query/queue.py","line":27,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/datachain/query/queue.py:27"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"src/datachain/query/queue.py","line":42,"fingerprint":"python.lang.best-practice.arbitrary-sleep:src/datachain/query/queue.py:42"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"docs/api_hooks.py","line":15,"fingerprint":"python.requests.best-practice.use-raise-for-status:docs/api_hooks.py:15"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"docs/api_hooks.py","line":22,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:docs/api_hooks.py:22"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_dataset\" a function or an attribute? If it is a function, you may have meant n.is_dataset() because n.is_dataset is always true.","path":"src/datachain/catalog/catalog.py","line":324,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:324"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_dataset\" a function or an attribute? If it is a function, you may have meant node_group.is_dataset() because node_group.is_dataset is always true.","path":"src/datachain/catalog/catalog.py","line":448,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:448"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant dataset.get_version(target_version).is_removed() because dataset.get_version(target_version).is_removed is always true.","path":"src/datachain/catalog/catalog.py","line":950,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:950"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_internal\" a function or an attribute? If it is a function, you may have meant dataset.is_internal() because dataset.is_internal is always true.","path":"src/datachain/catalog/catalog.py","line":1198,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:1198"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_internal\" a function or an attribute? If it is a function, you may have meant dataset.is_internal() because dataset.is_internal is always true.","path":"src/datachain/catalog/catalog.py","line":1335,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:1335"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_bucket_listing\" a function or an attribute? If it is a function, you may have meant d.is_bucket_listing() because d.is_bucket_listing is always true.","path":"src/datachain/catalog/catalog.py","line":1703,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:1703"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_internal\" a function or an attribute? If it is a function, you may have meant dataset.is_internal() because dataset.is_internal is always true.","path":"src/datachain/catalog/catalog.py","line":1867,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:1867"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant v.is_removed() because v.is_removed is always true.","path":"src/datachain/catalog/catalog.py","line":1868,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:1868"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant ver.is_removed() because ver.is_removed is always true.","path":"src/datachain/catalog/catalog.py","line":2063,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:2063"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant local_ver.is_removed() because local_ver.is_removed is always true.","path":"src/datachain/catalog/catalog.py","line":2113,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/catalog/catalog.py:2113"},{"rule_id":"opengrep/python.lang.best-practice.python-debugger-found","severity":"medium","message":"Importing the python debugger; did you mean to leave this in?","path":"src/datachain/cli/__init__.py","line":388,"fingerprint":"python.lang.best-practice.python-debugger-found:src/datachain/cli/__init__.py:388"},{"rule_id":"opengrep/python.lang.correctness.pdb-remove","severity":"medium","message":"pdb is an interactive debugging tool and you may have forgotten to remove it before committing your code","path":"src/datachain/cli/__init__.py","line":390,"fingerprint":"python.lang.correctness.pdb-remove:src/datachain/cli/__init__.py:390"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant v.is_removed() because v.is_removed is always true.","path":"src/datachain/cli/commands/datasets.py","line":140,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/cli/commands/datasets.py:140"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/datachain/client/listing_worker.py","line":314,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/datachain/client/listing_worker.py:314"},{"rule_id":"opengrep/python.requests.best-practice.use-timeout","severity":"medium","message":"Detected a 'requests' call without a timeout set. By default, 'requests' calls wait until the connection is closed. This means a 'requests' call without a timeout will hang the program if a response is never received. Consider setting a timeout for all 'requests'.","path":"src/datachain/client/listing_worker.py","line":314,"fingerprint":"python.requests.best-practice.use-timeout:src/datachain/client/listing_worker.py:314"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/client/s3.py","line":116,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/client/s3.py:116"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/config.py","line":79,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/config.py:79"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_remote_execution\" a function or an attribute? If it is a function, you may have meant self._jobs.c.is_remote_execution() because self._jobs.c.is_remote_execution is always true.","path":"src/datachain/data_storage/metastore.py","line":2527,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/metastore.py:2527"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_creator\" a function or an attribute? If it is a function, you may have meant self._dataset_version_jobs.c.is_creator() because self._dataset_version_jobs.c.is_creator is always true.","path":"src/datachain/data_storage/metastore.py","line":3131,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/metastore.py:3131"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":146,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:146"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":232,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:232"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":242,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:242"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":245,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:245"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":251,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:251"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":359,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:359"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_closed\" a function or an attribute? If it is a function, you may have meant self.is_closed() because self.is_closed is always true.","path":"src/datachain/data_storage/sqlite.py","line":362,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/sqlite.py:362"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant dataset_updated.get_version(version).is_removed() because dataset_updated.get_version(version).is_removed is always true.","path":"src/datachain/data_storage/warehouse.py","line":494,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/warehouse.py:494"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_container\" a function or an attribute? If it is a function, you may have meant n.is_container() because n.is_container is always true.","path":"src/datachain/data_storage/warehouse.py","line":792,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/warehouse.py:792"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_container\" a function or an attribute? If it is a function, you may have meant node.is_container() because node.is_container is always true.","path":"src/datachain/data_storage/warehouse.py","line":956,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/data_storage/warehouse.py:956"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/dataset.py","line":512,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/dataset.py:512"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant v.is_removed() because v.is_removed is always true.","path":"src/datachain/dataset.py","line":541,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/dataset.py:541"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant v.is_removed() because v.is_removed is always true.","path":"src/datachain/dataset.py","line":940,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/dataset.py:940"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_array\" a function or an attribute? If it is a function, you may have meant self.is_array() because self.is_array is always true.","path":"src/datachain/func/func.py","line":118,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:118"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_window\" a function or an attribute? If it is a function, you may have meant self.is_window() because self.is_window is always true.","path":"src/datachain/func/func.py","line":120,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:120"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_window\" a function or an attribute? If it is a function, you may have meant self.is_window() because self.is_window is always true.","path":"src/datachain/func/func.py","line":128,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:128"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_array\" a function or an attribute? If it is a function, you may have meant self.is_array() because self.is_array is always true.","path":"src/datachain/func/func.py","line":139,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:139"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_window\" a function or an attribute? If it is a function, you may have meant self.is_window() because self.is_window is always true.","path":"src/datachain/func/func.py","line":141,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:141"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_array\" a function or an attribute? If it is a function, you may have meant self.is_array() because self.is_array is always true.","path":"src/datachain/func/func.py","line":180,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:180"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_array\" a function or an attribute? If it is a function, you may have meant self.is_array() because self.is_array is always true.","path":"src/datachain/func/func.py","line":190,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:190"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_window\" a function or an attribute? If it is a function, you may have meant self.is_window() because self.is_window is always true.","path":"src/datachain/func/func.py","line":557,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/func/func.py:557"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant output_kind.is_model() because output_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":612,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:612"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant stored_kind.is_model() because stored_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":612,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:612"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant output_kind.is_model() because output_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":613,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:613"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant output_kind.is_model() because output_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":616,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:616"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_optional\" a function or an attribute? If it is a function, you may have meant stored_kind.is_optional() because stored_kind.is_optional is always true.","path":"src/datachain/lib/arrow.py","line":622,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:622"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_optional\" a function or an attribute? If it is a function, you may have meant output_kind.is_optional() because output_kind.is_optional is always true.","path":"src/datachain/lib/arrow.py","line":622,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:622"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant output_kind.is_model() because output_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":627,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:627"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_optional\" a function or an attribute? If it is a function, you may have meant output_kind.is_optional() because output_kind.is_optional is always true.","path":"src/datachain/lib/arrow.py","line":627,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:627"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_optional\" a function or an attribute? If it is a function, you may have meant stored_kind.is_optional() because stored_kind.is_optional is always true.","path":"src/datachain/lib/arrow.py","line":627,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:627"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant output_kind.is_model() because output_kind.is_model is always true.","path":"src/datachain/lib/arrow.py","line":631,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/arrow.py:631"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant kind.is_model() because kind.is_model is always true.","path":"src/datachain/lib/convert/flatten.py","line":97,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/convert/flatten.py:97"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant kind.is_model() because kind.is_model is always true.","path":"src/datachain/lib/convert/flatten.py","line":127,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/convert/flatten.py:127"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant kind.is_model() because kind.is_model is always true.","path":"src/datachain/lib/convert/unflatten.py","line":74,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/convert/unflatten.py:74"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant fn.is_input_batched() because fn.is_input_batched is always true.","path":"src/datachain/lib/dc/datachain.py","line":1272,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/dc/datachain.py:1272"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant target_class.is_input_batched() because target_class.is_input_batched is always true.","path":"src/datachain/lib/dc/datachain.py","line":1631,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/dc/datachain.py:1631"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_output_batched\" a function or an attribute? If it is a function, you may have meant target_class.is_output_batched() because target_class.is_output_batched is always true.","path":"src/datachain/lib/dc/datachain.py","line":1632,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/dc/datachain.py:1632"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_temp\" a function or an attribute? If it is a function, you may have meant d.is_temp() because d.is_temp is always true.","path":"src/datachain/lib/dc/datasets.py","line":363,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/dc/datasets.py:363"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_model\" a function or an attribute? If it is a function, you may have meant classify_field(anno).is_model() because classify_field(anno).is_model is always true.","path":"src/datachain/lib/dc/records.py","line":35,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/dc/records.py:35"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_local\" a function or an attribute? If it is a function, you may have meant self.is_local() because self.is_local is always true.","path":"src/datachain/lib/file.py","line":87,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/file.py:87"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_local\" a function or an attribute? If it is a function, you may have meant self.is_local() because self.is_local is always true.","path":"src/datachain/lib/file.py","line":97,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/file.py:97"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_expired\" a function or an attribute? If it is a function, you may have meant ls.is_expired() because ls.is_expired is always true.","path":"src/datachain/lib/listing.py","line":496,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/listing.py:496"},{"rule_id":"opengrep/python.lang.best-practice.pass-body-fn","severity":"medium","message":"`pass` is the body of function noop. Consider removing this or raise NotImplementedError() if this is a TODO","path":"src/datachain/lib/udf.py","line":493,"fingerprint":"python.lang.best-practice.pass-body-fn:src/datachain/lib/udf.py:493"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant self.is_input_batched() because self.is_input_batched is always true.","path":"src/datachain/lib/udf.py","line":628,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/udf.py:628"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant self.is_input_batched() because self.is_input_batched is always true.","path":"src/datachain/lib/udf.py","line":732,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/udf.py:732"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant self.is_input_batched() because self.is_input_batched is always true.","path":"src/datachain/lib/udf.py","line":845,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/udf.py:845"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant self.is_input_batched() because self.is_input_batched is always true.","path":"src/datachain/lib/udf.py","line":854,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/udf.py:854"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant self.is_input_batched() because self.is_input_batched is always true.","path":"src/datachain/lib/udf.py","line":859,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/lib/udf.py:859"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/lib/webdataset.py","line":99,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/lib/webdataset.py:99"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/lib/webdataset.py","line":100,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/lib/webdataset.py:100"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/lib/webdataset.py","line":101,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/lib/webdataset.py:101"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/lib/webdataset.py","line":102,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/lib/webdataset.py:102"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/lib/webdataset.py","line":103,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/lib/webdataset.py:103"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_dir\" a function or an attribute? If it is a function, you may have meant self.is_dir() because self.is_dir is always true.","path":"src/datachain/node.py","line":77,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/node.py:77"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_dir\" a function or an attribute? If it is a function, you may have meant self.is_dir() because self.is_dir is always true.","path":"src/datachain/node.py","line":92,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/node.py:92"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_latest\" a function or an attribute? If it is a function, you may have meant self.is_latest() because self.is_latest is always true.","path":"src/datachain/node.py","line":105,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/node.py:105"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_latest\" a function or an attribute? If it is a function, you may have meant f.is_latest() because f.is_latest is always true.","path":"src/datachain/node.py","line":116,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/node.py:116"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_dir\" a function or an attribute? If it is a function, you may have meant self.n.is_dir() because self.n.is_dir is always true.","path":"src/datachain/node.py","line":178,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/node.py:178"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_downloadable\" a function or an attribute? If it is a function, you may have meant node.is_downloadable() because node.is_downloadable is always true.","path":"src/datachain/nodes_thread_pool.py","line":22,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/nodes_thread_pool.py:22"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_input_batched\" a function or an attribute? If it is a function, you may have meant udf.inner.is_input_batched() because udf.inner.is_input_batched is always true.","path":"src/datachain/query/dataset.py","line":689,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:689"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_output_batched\" a function or an attribute? If it is a function, you may have meant udf.inner.is_output_batched() because udf.inner.is_output_batched is always true.","path":"src/datachain/query/dataset.py","line":689,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:689"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_output_batched\" a function or an attribute? If it is a function, you may have meant udf.inner.is_output_batched() because udf.inner.is_output_batched is always true.","path":"src/datachain/query/dataset.py","line":691,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:691"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_aggregator\" a function or an attribute? If it is a function, you may have meant self.is_aggregator() because self.is_aggregator is always true.","path":"src/datachain/query/dataset.py","line":791,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:791"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_generator\" a function or an attribute? If it is a function, you may have meant self.is_generator() because self.is_generator is always true.","path":"src/datachain/query/dataset.py","line":798,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:798"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_generator\" a function or an attribute? If it is a function, you may have meant self.is_generator() because self.is_generator is always true.","path":"src/datachain/query/dataset.py","line":947,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:947"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_generator\" a function or an attribute? If it is a function, you may have meant self.is_generator() because self.is_generator is always true.","path":"src/datachain/query/dataset.py","line":986,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:986"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_generator\" a function or an attribute? If it is a function, you may have meant self.is_generator() because self.is_generator is always true.","path":"src/datachain/query/dataset.py","line":1038,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:1038"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_single_partition_aggregator\" a function or an attribute? If it is a function, you may have meant self.is_single_partition_aggregator() because self.is_single_partition_aggregator is always true.","path":"src/datachain/query/dataset.py","line":1391,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:1391"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_ordered\" a function or an attribute? If it is a function, you may have meant query.is_ordered() because query.is_ordered is always true.","path":"src/datachain/query/dataset.py","line":3136,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:3136"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_removed\" a function or an attribute? If it is a function, you may have meant existing.get_version(version).is_removed() because existing.get_version(version).is_removed is always true.","path":"src/datachain/query/dataset.py","line":3490,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dataset.py:3490"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_generator\" a function or an attribute? If it is a function, you may have meant self.is_generator() because self.is_generator is always true.","path":"src/datachain/query/dispatch.py","line":124,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:124"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":126,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:126"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.batching.is_batching() because self.batching.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":126,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:126"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":157,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:157"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":222,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:222"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":229,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:229"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":280,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:280"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":462,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:462"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_batching\" a function or an attribute? If it is a function, you may have meant self.is_batching() because self.is_batching is always true.","path":"src/datachain/query/dispatch.py","line":504,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/dispatch.py:504"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_new_catalog\" a function or an attribute? If it is a function, you may have meant self.is_new_catalog() because self.is_new_catalog is always true.","path":"src/datachain/query/session.py","line":94,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/session.py:94"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_new_catalog\" a function or an attribute? If it is a function, you may have meant view.is_new_catalog() because view.is_new_catalog is always true.","path":"src/datachain/query/session.py","line":112,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/session.py:112"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_new_catalog\" a function or an attribute? If it is a function, you may have meant self.is_new_catalog() because self.is_new_catalog is always true.","path":"src/datachain/query/session.py","line":133,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/query/session.py:133"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/query/session.py","line":203,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/query/session.py:203"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/datachain/remote/studio.py","line":178,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/datachain/remote/studio.py:178"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/datachain/remote/studio.py","line":220,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/datachain/remote/studio.py:220"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/datachain/remote/studio.py","line":266,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/datachain/remote/studio.py:266"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/cleanup_json.py","line":18,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/cleanup_json.py:18"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/dataset_all.py","line":55,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/dataset_all.py:55"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/dataset_all.py","line":63,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/dataset_all.py:63"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_expired\" a function or an attribute? If it is a function, you may have meant listing.is_expired() because listing.is_expired is always true.","path":"src/datachain/skill/knowledge/scripts/plan.py","line":196,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:src/datachain/skill/knowledge/scripts/plan.py:196"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/render_index.py","line":96,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/render_index.py:96"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/render_index.py","line":260,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/render_index.py:260"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/skill/knowledge/scripts/summary.py","line":616,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/skill/knowledge/scripts/summary.py:616"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/skill/knowledge/scripts/summary.py","line":617,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/skill/knowledge/scripts/summary.py:617"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/skill/knowledge/scripts/summary.py","line":618,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/skill/knowledge/scripts/summary.py:618"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"src/datachain/skill/knowledge/scripts/summary.py","line":619,"fingerprint":"python.lang.maintainability.return-not-in-function:src/datachain/skill/knowledge/scripts/summary.py:619"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/utils.py","line":15,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/utils.py:15"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/utils.py","line":116,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/utils.py:116"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/utils.py","line":201,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/utils.py:201"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/utils.py","line":211,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/utils.py:211"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/skill/knowledge/scripts/utils.py","line":441,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/skill/knowledge/scripts/utils.py:441"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"src/datachain/studio.py","line":246,"fingerprint":"python.requests.best-practice.use-raise-for-status:src/datachain/studio.py:246"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/studio.py","line":618,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/studio.py:618"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/studio.py","line":624,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/studio.py:624"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"src/datachain/studio.py","line":629,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:src/datachain/studio.py:629"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":1.0,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":1.0,"test_lines":85999.0,"source_lines":60658.0,"test_ratio":1.4178,"ci_files":7.0,"cochange_share":0.8421,"cochange_commits":209.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/benchmarks.yml","ref":".github/workflows/benchmarks.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/codspeed.yml","ref":".github/workflows/codspeed.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/release.yml","ref":".github/workflows/release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/tests-studio.yml","ref":".github/workflows/tests-studio.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/tests.yml","ref":".github/workflows/tests.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/update-template.yaml","ref":".github/workflows/update-template.yaml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/update-website-docs.yml","ref":".github/workflows/update-website-docs.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (pytest, nox)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (mypy, pre-commit)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["pytest","nox"],"lint_commands":["mypy","pre-commit"]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":1.0,"check:changelog":0.0,"readme_lines":249.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"docs/contributing.md","ref":"docs/contributing.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":0.0,"escapes":973.0,"escapes_per_kloc":16.041},"findings":[],"evidence":[{"kind":"typing","description":"Python strict type checking: pyproject.toml","ref":"pyproject.toml","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":6165.0,"other_lines":54493.0,"files_blamed":240.0,"blame_failures":0.0,"quality:ai_findings":16.0,"quality:ai_per_kloc":2.595,"quality:other_findings":117.0,"quality:other_per_kloc":2.147,"quality:ratio":1.21,"security:ai_findings":4.0,"security:ai_per_kloc":0.649,"security:other_findings":17.0,"security:other_per_kloc":0.312,"security:ratio":2.08},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}