Title: Don't use assert to enforce interface constraints · Issue #1552 · gitpython-developers/GitPython · GitHub
Open Graph Title: Don't use assert to enforce interface constraints · Issue #1552 · gitpython-developers/GitPython
X Title: Don't use assert to enforce interface constraints · Issue #1552 · gitpython-developers/GitPython
Description: # sscce.py import git git.Repo(".").tags[None] $ git init Initialized empty Git repository in /tmp/tmp.Xoz9gZndOi/.git/ $ venv/bin/python sscce.py Traceback (most recent call last): File "sscce.py", line 5, in
Open Graph Description: # sscce.py import git git.Repo(".").tags[None] $ git init Initialized empty Git repository in /tmp/tmp.Xoz9gZndOi/.git/ $ venv/bin/python sscce.py Traceback (most recent call last): File "sscce.py"...
X Description: # sscce.py import git git.Repo(".").tags[None] $ git init Initialized empty Git repository in /tmp/tmp.Xoz9gZndOi/.git/ $ venv/bin/python sscce.py Traceback (most recent call last): File ...
Opengraph URL: https://github.com/gitpython-developers/GitPython/issues/1552
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Don't use assert to enforce interface constraints","articleBody":"``` py\r\n# sscce.py\r\n\r\nimport git\r\n\r\ngit.Repo(\".\").tags[None]\r\n```\r\n``` console\r\n$ git init\r\nInitialized empty Git repository in /tmp/tmp.Xoz9gZndOi/.git/\r\n$ venv/bin/python sscce.py\r\nTraceback (most recent call last):\r\n File \"sscce.py\", line 5, in \u003cmodule\u003e\r\n git.Repo(\".\").tags[None]\r\n File \"/tmp/tmp.Xoz9gZndOi/venv/lib/python3.8/site-packages/git/util.py\", line 1087, in __getitem__\r\n assert isinstance(index, (int, str, slice)), \"Index of IterableList should be an int or str\"\r\nAssertionError: Index of IterableList should be an int or str\r\n```\r\nhttps://github.com/gitpython-developers/GitPython/blob/c84dde218ef896a9b9af4f825ce222a6eb39291e/git/util.py#L1087\r\n`assert` should not be used in product code because it can be ignored with `-O`:\r\n``` console\r\n$ venv/bin/python -O sscce.py\r\nTraceback (most recent call last):\r\n File \"sscce.py\", line 5, in \u003cmodule\u003e\r\n git.Repo(\".\").tags[None]\r\n File \"/tmp/tmp.Xoz9gZndOi/venv/lib/python3.8/site-packages/git/util.py\", line 1095, in __getitem__\r\n return getattr(self, index)\r\nTypeError: getattr(): attribute name must be string\r\n```\r\n(In fact, that behavior is probably _better_ since a `TypeError` is more semantically meaningful.)\r\n\r\n[`bandit`](https://pypi.org/project/bandit/) can catch this kind of thing:\r\n``` console\r\n$ venv/bin/bandit venv/lib/python3.8/site-packages/git/util.py\r\n...\r\n\u003e\u003e Issue: [B101:assert_used] Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.\r\n Severity: Low Confidence: High\r\n CWE: CWE-703 (https://cwe.mitre.org/data/definitions/703.html)\r\n Location: venv/lib/python3.8/site-packages/git/util.py:1087:8\r\n More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b101_assert_used.html\r\n1086\r\n1087 assert isinstance(index, (int, str, slice)), \"Index of IterableList should be an int or str\"\r\n1088\r\n1089 if isinstance(index, int):\r\n...\r\n```","author":{"url":"https://github.com/tucked","@type":"Person","name":"tucked"},"datePublished":"2023-02-05T19:39:11.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/1552/GitPython/issues/1552"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:68fbaaed-e637-f92a-7b84-0b28058e36f8 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A522:1F0AF1:10BAFE9:17475DB:6968AE5B |
| html-safe-nonce | dd4a766b219169ce9ebeef43dc201dd56886429262cf9bfce22f3bf1b2c4bbfd |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNTIyOjFGMEFGMToxMEJBRkU5OjE3NDc1REI6Njk2OEFFNUIiLCJ2aXNpdG9yX2lkIjoiNDc5OTIxMzIzNDQ2MTEyNjIzNSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | fa54ed31581e66a2757a0a20c64c9e9c99c4bcb263958d04619b6629a2a82d63 |
| hovercard-subject-tag | issue:1571584220 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/gitpython-developers/GitPython/1552/issue_layout |
| twitter:image | https://opengraph.githubassets.com/6b524b8b49f361bf470108b76cdc4d980218dbd2850e134e2c8ed73a5fe7d130/gitpython-developers/GitPython/issues/1552 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/6b524b8b49f361bf470108b76cdc4d980218dbd2850e134e2c8ed73a5fe7d130/gitpython-developers/GitPython/issues/1552 |
| og:image:alt | # sscce.py import git git.Repo(".").tags[None] $ git init Initialized empty Git repository in /tmp/tmp.Xoz9gZndOi/.git/ $ venv/bin/python sscce.py Traceback (most recent call last): File "sscce.py"... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | tucked |
| hostname | github.com |
| expected-hostname | github.com |
| None | fdc7c66bd36a6c12eb8e771e806db863266e573fc299e77f27505a768d4f8a98 |
| turbo-cache-control | no-preview |
| go-import | github.com/gitpython-developers/GitPython git https://github.com/gitpython-developers/GitPython.git |
| octolytics-dimension-user_id | 503709 |
| octolytics-dimension-user_login | gitpython-developers |
| octolytics-dimension-repository_id | 1126087 |
| octolytics-dimension-repository_nwo | gitpython-developers/GitPython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1126087 |
| octolytics-dimension-repository_network_root_nwo | gitpython-developers/GitPython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 3223a6503d318917691422cdadfbe16cd8fb21e5 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width