{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:02.345257Z","repo":{"ref":{"host":"github.com","owner":"ZiniuLu","name":"Python-100-Days"},"default_branch":"master","clone_url":"https://github.com/ZiniuLu/Python-100-Days.git","html_url":"https://github.com/ZiniuLu/Python-100-Days","description":"出处：https://github.com/jackfrued/Python-100-Days.git","stars":3851,"forks":1156,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":34138,"primary_language":"Python","license_spdx":null,"created_at":"2018-06-12T09:40:33Z","pushed_at":"2020-10-01T07:20:35Z","security_policy_url":null,"distribution":{"owner_created_at":"2017-11-30T10:09:58Z","owner_type":"User","release_assets":[]}},"commit_sha":"d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c","profile":{"lines_by_language":{"Python":7860,"SQL":7},"files_by_category":{"source":226,"binary":142,"docs":57,"other":21,"config":5,"vendored":4,"oversized":1},"source_lines":7867,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.57,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":0.0},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":35.0,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":100.0,"duplication":32.6,"lint":4.0,"testing":0.0,"docs":40.0,"type_safety":40.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 0% of function code in complex or long functions; 19% duplicated lines. Weakest area: testing."},"security":{"score":68.2,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":62.5,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 4 high-severity SAST findings. Weakest area: posture."}},"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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":67.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":7864.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2018-03":{"loc":1027,"attributed_loc":0},"2018-04":{"loc":3608,"attributed_loc":0},"2018-05":{"loc":1715,"attributed_loc":0},"2018-06":{"loc":1514,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":23.0,"flagged_units":0.0,"pre_ai_era_bursts":1.0,"pre_ai_era_measured_loc":7864.0,"pre_ai_era_burst_loc":3608.0,"measured_loc":7864.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":902.0,"median_loc_per_hour":87.125,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":7867.0,"index":0.0,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"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":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":18.0,"findings_high":4.0,"findings_medium":10.0,"findings_low":4.0,"weighted_findings":10.562,"scanned_lines":7860.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'call' 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":"Day01-15/Day13/multiprocess3.py","line":21,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:Day01-15/Day13/multiprocess3.py:21"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args","severity":"high","message":"Detected subprocess function 'call' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium]","path":"Day01-15/Day13/multiprocess3.py","line":21,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-tainted-env-args:Day01-15/Day13/multiprocess3.py:21"},{"rule_id":"opengrep/python.lang.security.unverified-ssl-context","severity":"high","message":"Unverified SSL context detected. This will permit insecure connections without verifying SSL certificates. Use 'ssl.create_default_context' instead. [confidence medium]","path":"Day66-75/code/example01.py","line":77,"fingerprint":"python.lang.security.unverified-ssl-context:Day66-75/code/example01.py:77"},{"rule_id":"opengrep/python.lang.security.unverified-ssl-context","severity":"high","message":"Unverified SSL context detected. This will permit insecure connections without verifying SSL certificates. Use 'ssl.create_default_context' instead. [confidence medium]","path":"Day66-75/code/example05.py","line":76,"fingerprint":"python.lang.security.unverified-ssl-context:Day66-75/code/example05.py:76"},{"rule_id":"opengrep/python.django.security.django-no-csrf-token","severity":"medium","message":"Manually-created forms in django templates should specify a csrf_token to prevent CSRF attacks. [confidence medium]","path":"Day21-30/form_and_table.html","line":98,"fingerprint":"python.django.security.django-no-csrf-token:Day21-30/form_and_table.html:98"},{"rule_id":"opengrep/python.django.security.audit.django-secure-set-cookie","severity":"medium","message":"Django cookies should be handled securely by setting secure=True, httponly=True, and samesite='Lax' in response.set_cookie(...). If your situation calls for different settings, explicitly disable the setting. If you want to send the cookie over http, set secure=False. If you want to let client-side  [confidence low]","path":"Day41-55/car/search/views.py","line":43,"fingerprint":"python.django.security.audit.django-secure-set-cookie:Day41-55/car/search/views.py:43"},{"rule_id":"opengrep/python.lang.security.audit.dynamic-urllib-use-detected","severity":"medium","message":"Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low]","path":"Day66-75/code/example01.py","line":28,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:Day66-75/code/example01.py:28"},{"rule_id":"opengrep/python.lang.security.audit.dynamic-urllib-use-detected","severity":"medium","message":"Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low]","path":"Day66-75/code/example05.py","line":36,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:Day66-75/code/example05.py:36"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-md5","severity":"medium","message":"Detected MD5 hash algorithm which is considered insecure. MD5 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":"Day66-75/code/example05.py","line":69,"fingerprint":"python.lang.security.insecure-hash-algorithm-md5:Day66-75/code/example05.py:69"},{"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":"Day66-75/code/example05.py","line":71,"fingerprint":"python.lang.security.deserialization.avoid-pickle:Day66-75/code/example05.py:71"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":"Day66-75/code/example06.py","line":28,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:Day66-75/code/example06.py:28"},{"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":"Day66-75/code/example06.py","line":42,"fingerprint":"python.lang.security.deserialization.avoid-pickle:Day66-75/code/example06.py:42"},{"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":"Day66-75/code/main_redis.py","line":124,"fingerprint":"python.lang.security.deserialization.avoid-pickle:Day66-75/code/main_redis.py:124"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":"Day66-75/code/main_redis.py","line":136,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:Day66-75/code/main_redis.py:136"},{"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":"Day01-15/Day11/csv2.py","line":40,"fingerprint":"python.lang.security.use-defusedcsv:Day01-15/Day11/csv2.py:40"},{"rule_id":"opengrep/python.lang.security.audit.insecure-transport.requests.request-with-http","severity":"low","message":"Detected a request using 'http://'. This request will be unencrypted, and attackers could listen into traffic on the network and be able to obtain sensitive information. Use 'https://' instead. [confidence medium]","path":"Day01-15/Day14/mmdownloader.py","line":23,"fingerprint":"python.lang.security.audit.insecure-transport.requests.request-with-http:Day01-15/Day14/mmdownloader.py:23"},{"rule_id":"opengrep/python.lang.security.audit.insecure-transport.requests.request-with-http","severity":"low","message":"Detected a request using 'http://'. This request will be unencrypted, and attackers could listen into traffic on the network and be able to obtain sensitive information. Use 'https://' instead. [confidence medium]","path":"Day66-75/code/example03.py","line":10,"fingerprint":"python.lang.security.audit.insecure-transport.requests.request-with-http:Day66-75/code/example03.py:10"},{"rule_id":"opengrep/python.lang.security.audit.insecure-transport.requests.request-with-http","severity":"low","message":"Detected a request using 'http://'. This request will be unencrypted, and attackers could listen into traffic on the network and be able to obtain sensitive information. Use 'https://' instead. [confidence medium]","path":"Day66-75/code/example03.py","line":20,"fingerprint":"python.lang.security.audit.insecure-transport.requests.request-with-http:Day66-75/code/example03.py:20"}],"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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0149,"unpinned_manifests":0.0},"findings":[],"evidence":[],"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":386.0,"function_nloc":2293.0,"mean_ccn":1.73,"p90_ccn":3.0,"complex_functions":0.0,"long_functions":0.0,"many_param_functions":0.0,"risky_nloc_share":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":5292.0,"duplicated_lines":988.0,"duplicated_share":0.1867,"files":226.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day01/peppa_pig.py:112 and Day01-15/Day01/peppa_pig.py:134","ref":"Day01-15/Day01/peppa_pig.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day01/peppa_pig.py#L112","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day02/variable1.py:13 and Day01-15/Day02/variable2.py:13","ref":"Day01-15/Day02/variable1.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day02/variable1.py#L13","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day08/clock.py:32 and Day01-15/Day09/clock.py:19","ref":"Day01-15/Day08/clock.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day08/clock.py#L32","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day08/student.py:37 and Day01-15/Day09/dependency.py:74","ref":"Day01-15/Day08/student.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day08/student.py#L37","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day09/car1.py:48 and Day01-15/Day09/car2.py:41","ref":"Day01-15/Day09/car1.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day09/car1.py#L48","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day11/ex1.py:3 and Day01-15/Day11/ex2.py:3","ref":"Day01-15/Day11/ex1.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day11/ex1.py#L3","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day13/coroutine1.py:5 and Day01-15/Day13/coroutine2.py:5","ref":"Day01-15/Day13/coroutine1.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day13/coroutine1.py#L5","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day13/multithread1.py:3 and Day01-15/Day13/multithread2.py:3","ref":"Day01-15/Day13/multithread1.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day13/multithread1.py#L3","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day13/multithread2.py:6 and Day01-15/Day13/singlethread1.py:6","ref":"Day01-15/Day13/multithread2.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day13/multithread2.py#L6","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: Day01-15/Day13/multithread2.py:28 and Day01-15/Day13/multithread3.py:37","ref":"Day01-15/Day13/multithread2.py","url":"https://github.com/ZiniuLu/Python-100-Days/blob/d4d159d1d6a7ad37da45a90ca4cdd2da6fef848c/Day01-15/Day13/multithread2.py#L28","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":57.0,"weighted_findings":101.0,"scanned_lines":7860.0,"category:best-practice":51.0,"category:correctness":5.0,"category:maintainability":1.0},"findings":[{"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":"Day01-15/Day02/operator.py","line":32,"fingerprint":"python.lang.correctness.common-mistakes.identical-is-comparison:Day01-15/Day02/operator.py:32"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day07/marquee.py","line":19,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day07/marquee.py:19"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day08/clock.py","line":52,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day08/clock.py:52"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day09/clock.py","line":39,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day09/clock.py:39"},{"rule_id":"opengrep/python.lang.correctness.list-modify-while-iterate","severity":"high","message":"It appears that `balls` is a list that is being modified while in a for loop. This will likely cause a runtime error or an infinite loop.","path":"Day01-15/Day10/ball.py","line":94,"fingerprint":"python.lang.correctness.list-modify-while-iterate:Day01-15/Day10/ball.py:94"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day11/ex3.py","line":27,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day11/ex3.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":"Day01-15/Day11/file1.py","line":23,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day11/file1.py:23"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/coroutine1.py","line":33,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/coroutine1.py:33"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/coroutine2.py","line":22,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/coroutine2.py:22"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/multiprocess1.py","line":23,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/multiprocess1.py:23"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/multithread4.py","line":23,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/multithread4.py:23"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/multithread5.py","line":26,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/multithread5.py:26"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/multithread6.py","line":26,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/multithread6.py:26"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/multithread6.py","line":43,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/multithread6.py:43"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/singlethread2.py","line":18,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/singlethread2.py:18"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/test2.py","line":22,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/test2.py:22"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day01-15/Day13/test3.py","line":49,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day01-15/Day13/test3.py:49"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day66-75/code/coroutine01.py","line":17,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day66-75/code/coroutine01.py:17"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day66-75/code/coroutine02.py","line":20,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day66-75/code/coroutine02.py:20"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day66-75/code/coroutine02.py","line":31,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day66-75/code/coroutine02.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":"Day66-75/code/generator02.py","line":13,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day66-75/code/generator02.py:13"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"Day66-75/code/main.py","line":126,"fingerprint":"python.lang.best-practice.arbitrary-sleep:Day66-75/code/main.py:126"},{"rule_id":"opengrep/python.lang.correctness.baseclass-attribute-override","severity":"medium","message":"Class Son inherits from both `Father` and `Monk` which both have a method named `$F`; one of these methods will be overwritten.","path":"Day01-15/Day09/multi.py","line":55,"fingerprint":"python.lang.correctness.baseclass-attribute-override:Day01-15/Day09/multi.py:55"},{"rule_id":"opengrep/python.lang.correctness.baseclass-attribute-override","severity":"medium","message":"Class Son inherits from both `Father` and `Musician` which both have a method named `$F`; one of these methods will be overwritten.","path":"Day01-15/Day09/multi.py","line":55,"fingerprint":"python.lang.correctness.baseclass-attribute-override:Day01-15/Day09/multi.py:55"},{"rule_id":"opengrep/python.lang.correctness.baseclass-attribute-override","severity":"medium","message":"Class Son inherits from both `Monk` and `Musician` which both have a method named `$F`; one of these methods will be overwritten.","path":"Day01-15/Day09/multi.py","line":55,"fingerprint":"python.lang.correctness.baseclass-attribute-override:Day01-15/Day09/multi.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":"Day01-15/Day11/csv1.py","line":16,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/csv1.py:16"},{"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":"Day01-15/Day11/csv2.py","line":39,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/csv2.py:39"},{"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":"Day01-15/Day11/ex3.py","line":16,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/ex3.py:16"},{"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":"Day01-15/Day11/file1.py","line":20,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/file1.py:20"},{"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":"Day01-15/Day11/file1.py","line":27,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/file1.py:27"},{"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":"Day01-15/Day11/file2.py","line":12,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/file2.py:12"},{"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":"Day01-15/Day11/file3.py","line":24,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:Day01-15/Day11/file3.py:24"},{"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":"Day01-15/Day14/mmdownloader.py","line":15,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day01-15/Day14/mmdownloader.py:15"},{"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":"Day01-15/Day14/mmdownloader.py","line":15,"fingerprint":"python.requests.best-practice.use-timeout:Day01-15/Day14/mmdownloader.py:15"},{"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":"Day01-15/Day14/mmdownloader.py","line":22,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day01-15/Day14/mmdownloader.py:22"},{"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":"Day01-15/Day14/mmdownloader.py","line":22,"fingerprint":"python.requests.best-practice.use-timeout:Day01-15/Day14/mmdownloader.py:22"},{"rule_id":"opengrep/python.lang.maintainability.code-after-unconditional-return","severity":"medium","message":"code after return statement will not be executed","path":"Day41-55/car/search/models.py","line":13,"fingerprint":"python.lang.maintainability.code-after-unconditional-return:Day41-55/car/search/models.py:13"},{"rule_id":"opengrep/python.lang.best-practice.pass-body-fn","severity":"medium","message":"`pass` is the body of function add_to_cart. Consider removing this or raise NotImplementedError() if this is a TODO","path":"Day41-55/shop_origin/cart/views.py","line":15,"fingerprint":"python.lang.best-practice.pass-body-fn:Day41-55/shop_origin/cart/views.py:15"},{"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":"Day66-75/code/example03.py","line":10,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example03.py:10"},{"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":"Day66-75/code/example03.py","line":10,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example03.py:10"},{"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":"Day66-75/code/example03.py","line":20,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example03.py:20"},{"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":"Day66-75/code/example03.py","line":20,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example03.py:20"},{"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":"Day66-75/code/example04.py","line":16,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example04.py:16"},{"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":"Day66-75/code/example04.py","line":16,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example04.py:16"},{"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":"Day66-75/code/example06.py","line":23,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example06.py:23"},{"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":"Day66-75/code/example06.py","line":23,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example06.py:23"},{"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":"Day66-75/code/example06.py","line":40,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example06.py:40"},{"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":"Day66-75/code/example06.py","line":40,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example06.py:40"},{"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":"Day66-75/code/example08.py","line":6,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example08.py:6"},{"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":"Day66-75/code/example08.py","line":22,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example08.py:22"},{"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":"Day66-75/code/example08.py","line":22,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example08.py:22"},{"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":"Day66-75/code/example12.py","line":21,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/example12.py:21"},{"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":"Day66-75/code/example12.py","line":21,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/example12.py:21"},{"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":"Day66-75/code/main.py","line":62,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/main.py:62"},{"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":"Day66-75/code/main.py","line":62,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/main.py:62"},{"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":"Day66-75/code/main_redis.py","line":67,"fingerprint":"python.requests.best-practice.use-raise-for-status:Day66-75/code/main_redis.py:67"},{"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":"Day66-75/code/main_redis.py","line":67,"fingerprint":"python.requests.best-practice.use-timeout:Day66-75/code/main_redis.py:67"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":7867.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":28.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":201.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}