Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 583,
"has_wiki": true,
"homepage": "https://pydata-google-auth.readthedocs.io/",
"languages": {
"Python": 145382
},
"pushed_at": "2025-01-29T18:42:13Z",
"created_at": "2018-08-14T19:59:46Z",
"owner_type": "Organization",
"updated_at": "2025-06-25T16:10:10Z",
"description": "A package providing helpers for authenticating to Google APIs.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": "http://groups.google.com/forum/?fromgroups#!forum/pydata",
"name": "Python for Data",
"type": "Organization",
"login": "pydata",
"company": null,
"location": null,
"followers": 746,
"avatar_url": "https://avatars.githubusercontent.com/u/1284191?v=4",
"created_at": "2011-12-24T22:42:08Z",
"is_verified": null,
"public_repos": 29,
"account_age_days": 5331
},
"license": {
"state": "standard",
"spdx_id": "BSD-3-Clause",
"raw_spdx": "BSD-3-Clause",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "1.9.1",
"kind": "patch",
"published_at": "2025-01-23T21:07:01Z"
},
{
"tag": "1.9.0",
"kind": "minor",
"published_at": "2024-11-21T20:30:14Z"
},
{
"tag": "1.8.2",
"kind": "patch",
"published_at": "2023-08-01T17:03:36Z"
},
{
"tag": "1.8.0",
"kind": "minor",
"published_at": "2023-05-09T16:39:13Z"
},
{
"tag": "1.7.0",
"kind": "minor",
"published_at": "2023-02-07T22:02:04Z"
},
{
"tag": "1.5.0",
"kind": "minor",
"published_at": "2023-01-09T16:23:18Z"
},
{
"tag": "1.4.0",
"kind": "minor",
"published_at": "2022-03-14T16:53:10Z"
},
{
"tag": "1.3.0",
"kind": "minor",
"published_at": "2021-12-03T19:03:58Z"
},
{
"tag": "1.2.0",
"kind": "minor",
"published_at": "2021-04-21T22:09:02Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2020-04-23T14:36:58Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2020-04-23T14:31:03Z"
},
{
"tag": "0.3.0",
"kind": "minor",
"published_at": "2020-02-04T18:53:59Z"
},
{
"tag": "0.2.1",
"kind": "patch",
"published_at": "2019-12-13T17:34:20Z"
},
{
"tag": "0.2.0",
"kind": "minor",
"published_at": "2019-12-12T22:45:26Z"
},
{
"tag": "0.1.3",
"kind": "patch",
"published_at": "2019-02-26T22:16:15Z"
},
{
"tag": "0.1.2",
"kind": "patch",
"published_at": "2019-02-01T23:55:03Z"
},
{
"tag": "0.1.1",
"kind": "patch",
"published_at": "2019-02-01T21:22:56Z"
},
{
"tag": "0.1.0",
"kind": "minor",
"published_at": "2018-10-23T19:18:04Z"
}
],
"recent_commits": [
{
"oid": "ab923498a4f923c060c54e3b3913d002fc15bbfc",
"body": "… (#80)",
"is_bot": false,
"headline": "docs: Add warnings regarding consuming externally sourced credentials…",
"author_name": "Anthonios Partheniou",
"author_login": "parthea",
"committed_at": "2025-01-29T18:30:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28f012c2f22fb908064af3f7699e170ff133971a",
"body": "* docs: make oauth landing page more generic\r\n\r\nThis is to support magics such as https://github.com/cloudspannerecosystem/spanner-graph-notebook\r\n\r\n* add bqsql alias too",
"is_bot": false,
"headline": "docs: make oauth landing page more generic (#79)",
"author_name": "Tim Sweña (Swast)",
"author_login": "tswast",
"committed_at": "2025-01-23T19:48:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69befbbec4c12ad7effbf3a19dfdd70ef4ca393e",
"body": null,
"is_bot": false,
"headline": "chore: release 1.9.0 (#78)",
"author_name": "Tim Sweña (Swast)",
"author_login": "tswast",
"committed_at": "2024-11-21T19:54:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef7f02cd675c60a5551f781294ae66ebccca882b",
"body": "…not specified (#76)\n\n* feat: try colab credentials in `get_user_credentials` if `client_id` not specified\r\n\r\n* fix AttributeError: 'tuple' object has no attribute 'valid'\r\n\r\n* Update pydata_google_auth/auth.py\r\n\r\n* Update pydata_google_auth/auth.py\r\n\r\n* add unit tests\r\n\r\n* add unit tests, docs, and always try colab\r\n\r\n* update readthedocs config\r\n\r\n* fix indentation\r\n\r\n* try again\r\n\r\n* fix requirements",
"is_bot": false,
"headline": "feat: try colab credentials in `get_user_credentials` if `client_id` …",
"author_name": "Tim Sweña (Swast)",
"author_login": "tswast",
"committed_at": "2024-11-21T18:23:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64dc0ead5cc7262099b9b23050ffbe4a21f08f48",
"body": "* feat: support Python 3.13\r\n\r\n* drop python < 3.9",
"is_bot": false,
"headline": "feat: support Python 3.13, drop Python <=3.8 (#77)",
"author_name": "Tim Sweña (Swast)",
"author_login": "tswast",
"committed_at": "2024-11-19T16:15:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c99fe458d787e00def6c44c141e7024d4b061b3",
"body": "* Do not require six on Python 3\r\n\r\n* make lint happy\r\n\r\n* giving up, ran black 23.9.1\r\n\r\n* changelog",
"is_bot": false,
"headline": "Do not require six on Python 3 (#73)",
"author_name": "MeggyCal",
"author_login": "MeggyCal",
"committed_at": "2024-09-23T16:21:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f66a8e6537594ecaab3d906a0d3b415dc8b79b4",
"body": null,
"is_bot": false,
"headline": "chore: release 1.8.2",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-08-01T17:01:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "73d419f3a6abc9e61a7ceef092a246f598e828bc",
"body": "* fix: ensure we always get a refresh token after the auth prompt\r\n\r\n* fix lint",
"is_bot": false,
"headline": "fix: ensure we always get a refresh token after the auth prompt (#72)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-08-01T16:50:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a09e6f626b436ad6abcd85d068aebc811584c611",
"body": null,
"is_bot": false,
"headline": "chore: release 1.8.1",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-07-10T15:09:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00be87a2c39a3a8c6677169cb91d1a20e21524d4",
"body": null,
"is_bot": false,
"headline": "feat: pass on all colab auth exceptions (#71)",
"author_name": "Shobhit Singh",
"author_login": "shobsi",
"committed_at": "2023-07-07T14:23:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07d4363045cc74c8158c1d260f71e4cb4df6d7e0",
"body": "Also:\r\n\r\n* fix(python2.7): remove reference to ModuleNotFoundError which is\r\n not present in Python 2.7. Also, it is unnecessary, since it is a subclass of\r\n ImportError.\r\n* docs: add OAuth page to docs table-of-contents to fix Sphinx error",
"is_bot": false,
"headline": "chore: release 1.8.0 (#69)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-05-09T16:28:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06dc9a2e542c5914387b49059ef527c474abc2b6",
"body": null,
"is_bot": false,
"headline": "Add optional colab specific ADC (#68)",
"author_name": "Shobhit Singh",
"author_login": "shobsi",
"committed_at": "2023-05-05T20:32:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5efe5b8f512bb5d96c0836c5a0c7770c7fad9abb",
"body": null,
"is_bot": false,
"headline": "Edits sphinx labels (#66)",
"author_name": "Chalmer Lowe",
"author_login": "chalmerlowe",
"committed_at": "2023-02-07T21:57:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58de7f0e20931b8db4e3cd4993cb098af5fa1880",
"body": "* Updates changelog\r\n\r\n* Revises reference\r\n\r\n* Updates change log to 1.7.0",
"is_bot": false,
"headline": "Updates changelog (#65)",
"author_name": "Chalmer Lowe",
"author_login": "chalmerlowe",
"committed_at": "2023-02-07T20:31:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1a5d40373154106ce152a67e92093d7094da2ea",
"body": null,
"is_bot": false,
"headline": "chore: update release procedure",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-01-24T16:50:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41852ce104da65fbb4c6b8577af96667613d25a1",
"body": "* add oauth logic and webapp default handling\r\n\r\n* updates logic\r\n\r\n* feat: adds decision logic to handle multiple oauth use cases\r\n\r\n* lint the files and remove f-string",
"is_bot": false,
"headline": "feat: default redirect when `use_local_webserver = False` (#62)",
"author_name": "Chalmer Lowe",
"author_login": "chalmerlowe",
"committed_at": "2023-01-24T16:43:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d55d5345423f2a45eced2d59634b61bd6198547",
"body": "* chore: release 1.5.0\r\n\r\n* chore: release 1.5.0\r\n\r\nUpdate docs and changelog.",
"is_bot": false,
"headline": "chore: release 1.5.0 (#60)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-01-09T16:19:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "227e99d644c905c3e2a19a41a1732823027192e8",
"body": "* feat: adds ability to provide redirect uri\r\n\r\n* monkey patches a method to handle webapps\r\n\r\n* refactors the _run_webapp function\r\n\r\n* blacken\r\n\r\nCo-authored-by: Tim Swast <swast@google.com>",
"is_bot": false,
"headline": "feat: adds ability to provide redirect uri (#58)",
"author_name": "Chalmer Lowe",
"author_login": "chalmerlowe",
"committed_at": "2023-01-09T15:59:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bce5c71ca30625c9902c8f2620dfdbcac1560435",
"body": null,
"is_bot": false,
"headline": "chore: update to latest black (#59)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2023-01-09T15:29:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7bc885d35ac8c9693631a33b3f4bdb5576d41d0e",
"body": null,
"is_bot": false,
"headline": "chore: release 1.4.0",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2022-03-14T16:45:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56a8676d6e57efb8b7719babd4030ac4a8598632",
"body": "The console-based copy-paste-a-token flow has been deprecated. See:\r\nhttps://developers.googleblog.com/2022/02/making-oauth-flows-safer.html?m=1#disallowed-oob",
"is_bot": false,
"headline": "fix: avoid deprecated \"out-of-band\" authentication flow (#55)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2022-03-14T15:59:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "311a2008055dee78f8802e7da9e0cae0fb0c13bb",
"body": null,
"is_bot": false,
"headline": "chore: release 1.3.0 (#52)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2021-12-03T18:59:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "294ed4f18498905e489012afbb2cca87a48a69eb",
"body": "* feat: support Python 3.10\r\n\r\n* test with constrained dependencies\r\n\r\n* decrease coverage requirement",
"is_bot": false,
"headline": "feat: support Python 3.10 (#51)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2021-12-03T17:19:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b23bc5e83ba26a19972d0610bd4865dbcac91d30",
"body": "s/credentails/credentials/ on the auth.py -> get_user_credentials docstring",
"is_bot": false,
"headline": "doc: fix inconsequential \"credentails\" typo (#44)",
"author_name": "Helio Machado",
"author_login": "0x2b3bfa0",
"committed_at": "2021-09-22T20:58:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16093c7da7ea91e14a38a85f30c49dc55aff5f9c",
"body": "noxfile.py doesn't include 3.5 since the commit\r\ne798415e648baa96d30bc7e06c27567183158fbe",
"is_bot": false,
"headline": "test: update CircleCI jobs to match nox (#45)",
"author_name": "Helio Machado",
"author_login": "0x2b3bfa0",
"committed_at": "2021-09-22T20:57:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e798415e648baa96d30bc7e06c27567183158fbe",
"body": null,
"is_bot": false,
"headline": "chore: release 1.2.0",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2021-04-21T21:54:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1d4c9f5832415ad17af1bb1bcffce5232b15482",
"body": "* ENH: Add load_service_account_credentials function\r\n\r\n* explicitly accept scopes=",
"is_bot": false,
"headline": "ENH: Add load_service_account_credentials function (#40)",
"author_name": "Batuhan Taskaya",
"author_login": "isidentical",
"committed_at": "2021-04-21T21:24:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7f74594a8d2283d0685b7a427b4eba2ea6c75d1",
"body": "Since the real `find_open_port` runs, the requested port\r\nmight not always be 8080. For example, this test was\r\nconsistently failing when running `pytest tests` because\r\nthe unit tests were running after the system tests, making\r\nthe requested port 8082.",
"is_bot": false,
"headline": "test: fix flake in `test_webserver` (#37)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-24T14:35:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c224a80372d17ab1e803c9dfc6a2ffc282d0dc49",
"body": null,
"is_bot": false,
"headline": "chore: release 1.1.0",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-23T14:27:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29566c1fd4f7ebb235c482e9a02d79eb59fd0f1a",
"body": "* feat: search for open port before starting run_local_server flow\r\n\r\nThis prevents issues if port 8080 is already occupied. It also makes the\r\nsystem tests less flakey, as we get fewer cases when the authorization\r\ncode goes to the wrong test.\r\n\r\n* test: add unit tests for webserver module, update changelog\r\n\r\n* fix: use PyDataConnectionError to support py2.7\r\n\r\n* fix: test with assert_called_once_with for py3.5",
"is_bot": false,
"headline": "feat: search for open port before starting run_local_server flow (#36)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-23T14:18:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bef9ff193837d19e33735a614bcf13768a5e5e33",
"body": null,
"is_bot": false,
"headline": "doc: fix links to google-auth libraries (#34)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-20T14:59:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a780ba98e6feff1383c2c1691448a446df9f19f",
"body": null,
"is_bot": false,
"headline": "chore: release 1.0 (#33)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-20T14:34:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4961fb630978d5dbae8c88e60f6875352c94765",
"body": null,
"is_bot": false,
"headline": "doc: link to BQ sandbox on intro page (#32)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-04-17T21:17:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc6ce92e4d243d5aec635faa91c6feeb4ac6c822",
"body": "* feat: add CLI for working with user credentials\r\n\r\nThe CLI is run with `python -m pydata_google_auth`. It\r\ncontains a \"login\" command, which saves a user credentials\r\nJSON file (usable with `GOOGLE_APPLICATION_CREDENTIALS`).\r\nIt also contains a \"print-token\" command, which is useful\r\nfor generating an access token from a user credentials\r\nJSON file.\r\n\r\n* update changelog and docs",
"is_bot": false,
"headline": "feat: add CLI for working with user credentials (#28)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2020-02-04T18:38:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0644d2e0d760ee201f4f4259e7905981e205c69",
"body": null,
"is_bot": false,
"headline": "FIX: re-enable auth_local_webserver on default() auth method.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-12-12T23:04:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00e2b840df0170ba7a69de21b8937dde0b6da406",
"body": null,
"is_bot": false,
"headline": "TST: scopes might not match when using cached credentials",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-12-12T22:42:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e53f8d2b71d67f47f51926ec5b0a02dbe2913ca1",
"body": null,
"is_bot": false,
"headline": "Release 0.2.0",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-12-12T22:24:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6689aafe7d3de234e0e2cd5f7873029122075b49",
"body": "There are Windows machines without an APPDATA environment variable. Use\r\nthe `expanduser` logic for the default config path in this case.",
"is_bot": false,
"headline": "fix: don't raise error when APPDATA isn't set (#31)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-12-12T22:18:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "510f49696fb3d3aa1a77a29a0ee2125ca14ddde4",
"body": "* Use latest token enpoint for user credentials.\r\n\r\n* Add to changelog.",
"is_bot": false,
"headline": "Use latest token endpoint for user credentials. (#27)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-05-10T19:21:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "597cce281f41ab2a170b69e84a3ef35955da3c26",
"body": "* ENH: Add save_user_credentials to write to JSON file.\r\n\r\nThis function is useful in combination with Google Application Default\r\ncredentials. Use this function to create a JSON key file for your user\r\ncredentials, which works similarly to a service account JSON key file in\r\ncombination with Google client libraries.\r\n\r\n* Remove unused os.path import.",
"is_bot": false,
"headline": "ENH: Add save_user_credentials to write to JSON file. (#25)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-04-18T23:06:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc3b9f5edd45c53f04b4d72909a7974e836be02b",
"body": "* ENH: Add `authorized_user` to cached JSON files\r\n\r\nThis allows cached files to be used as application default credentials.\r\n\r\n* Remove unused import.",
"is_bot": false,
"headline": "ENH: Add `authorized_user` to cached JSON files (#24)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-04-18T19:57:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1edadfd48b69ccb0ff9515762b6447e6dd048568",
"body": "This will allow new versions of pydata-google-auth to be used with\nolder versions of pandas-gbq.",
"is_bot": false,
"headline": "ENH: Don't show warning when deprecated auth_local_webserver is used",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-04-18T18:27:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b58c1464fb46e49add5e3805e811969bffd17d93",
"body": "…#21)\n\n* CLN: deprecate auth_local_webserver in favor of use_local_webserver\r\n\r\n* Update changelog.",
"is_bot": false,
"headline": "CLN: deprecate auth_local_webserver in favor of use_local_webserver (…",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-04-15T17:19:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bbc5a62a7feb7f61b7be3048a3ba85179d89c08",
"body": "This is a bug-fix release.",
"is_bot": false,
"headline": "Release 0.1.3",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-26T22:04:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16370f6910f58cd6ed6ef46a7c21be6657c6da7a",
"body": "* BUG: Respect dirname and filename arguments in cache constructors\r\n\r\nPreviously, dirname and filename were ignored in the\r\nReadWriteCredentialsCache and WriteOnlyCredentialsCache constructors.\r\n\r\n* Add bug fix to changelog.",
"is_bot": false,
"headline": "BUG: Respect dirname and filename arguments in cache constructors (#17)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-26T22:00:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "574eb5204cf43bc5832cfe26b4fff239adf96aa8",
"body": "* Configure CircleCI to run nox sessions.\r\n\r\n* Remove ci directory. It is unnecessary now that we use nox sessions in the CircleCI config.\r\n\r\n* Test on Python 3.5\r\n\r\n* Remove stray references to pandas-gbq leftover from the original fork.",
"is_bot": false,
"headline": "Configure CircleCI (#15)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-01T23:51:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e62db158d78656952dab443311a8366a0bed95b",
"body": "* CLN: Use latest nox configuration.\r\n\r\nAdds sessions for running black and generating docs.\r\n\r\nRemoves unnecessary dependencies on pandas in tests.\r\n\r\n* Add Python 3.7 to nox config.\r\n\r\n* Fix coverage config for system tests.\r\n\r\n* Update nox installation step in contributing doc.",
"is_bot": false,
"headline": "CLN: Use latest nox configuration. (#14)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-01T23:06:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a6d2cf3f66987c636b261028f6c557023d80a93",
"body": null,
"is_bot": false,
"headline": "Release 0.1.2 (#12)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-01T21:29:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14f03205d46e19228f39d05e33159ad515202ffa",
"body": "Avoid writing to the filesystem when the module imports.\r\nThis prevents errors when the home directory is\r\nunwriteable.",
"is_bot": false,
"headline": "BUG: Don't write to the fs on module import. (#11)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2019-02-01T21:17:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c733c869aa688ec0b2b883bfcab8cdac418c89ed",
"body": null,
"is_bot": false,
"headline": "RLS: Use LICENSE.txt in manifest.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-26T21:29:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09304d8a449c1b175ee1658fc1e1c13cdb0cf58c",
"body": null,
"is_bot": false,
"headline": "DOC: adjust spacing in release guide",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-26T21:16:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46fba04020f8503ca11348fbcf53371e5485ee1c",
"body": "Improve README formatting and examples.",
"is_bot": false,
"headline": "Add license.txt to package.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-26T21:02:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5378c79102b2e6dc83dfc6ea19f30f0a1a27bd23",
"body": null,
"is_bot": false,
"headline": "DOC: add access/storage/sharing information to privacy policy",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-23T21:52:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "95e0445acfa78f14122d66535b4bfc08b553e7c7",
"body": null,
"is_bot": false,
"headline": "Add test dependencies.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-19T18:12:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "405eff81ee9257e38f9ef98ed07d8b799c879bd8",
"body": null,
"is_bot": false,
"headline": "Initial CircleCI configuration. (#6)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-19T18:09:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e245c5d4cbedcdb82242cbdb0b97d675610bf6e",
"body": "This typo was preventing ReadTheDocs from building.",
"is_bot": false,
"headline": "DOC: fix pypdata_google_auth typo",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-12T23:22:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee93aee360b7b997721e8478bbc4262c337f867b",
"body": "Also adds a google-site-verification identifier so that the client ID\r\ncan be verified.",
"is_bot": false,
"headline": "DOC: Add docs for pydata-google-auth (#5)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-12T22:13:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f46db86458695bb250f8833df4e2d63da133975",
"body": "The CredentialsCache classes allow for more flexible caching of user\r\ncredentials to disk. The pydata_google_auth.cache module provides 3\r\ncanonical instances of caches: NOOP (don't read/write to disk at all)\r\nREAUTH (write to disk, but don't read), and READ_WRITE (the default).",
"is_bot": false,
"headline": "[ENH] Add CredentialsCache classes (#4)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-10-12T17:59:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3564ac45831ca576cdfeeac28687268f782e0b15",
"body": null,
"is_bot": false,
"headline": "Apply black to source code.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-09-14T20:45:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ce7f3f822fbaea7cc73878f52c61f8b38109f36",
"body": "Trim pydata-google-auth package and add tests\r\n\r\nThis is the initial version of the proposed pydata-google-auth package (to be used by pandas-gbq and ibis). It includes two methods:\r\n\r\n* `pydata_google_auth.default()`\r\n * A function that does the same as pandas-gbq does auth currently. Tries `googl\n[…]\nr other APIs besides BigQuery. Plus there were problems with `try_credentials()` even for pandas-gbq (https://github.com/pydata/pandas-gbq/issues/202, https://github.com/pydata/pandas-gbq/issues/198).",
"is_bot": false,
"headline": "Trim pydata-google-auth package and add tests (#3)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-09-07T21:08:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cfa12902417517359e07c0feb41a28d94d1320ae",
"body": "Renames package and removes unnecessary modules / methods.",
"is_bot": false,
"headline": "Fork pandas-gbq with initial (incomplete) implementation.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-08-14T20:45:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "993fe55f7e1f44a15b282b415284774310fc530c",
"body": "…cal overload (#193)\n\n* Write to CSV stream with general float format.\r\n\r\n* Specify number of significant digits for float format.\r\n\r\n* Change format to '%.15g' and add tests.\r\n\r\n* Fixing style errors.\r\n\r\n* Define string as unicode in to_gbq's float test.\r\n\r\n* Update Changelog.",
"is_bot": false,
"headline": "Use general float format when writing to CSV buffer to prevent numeri…",
"author_name": "Anthony Delage",
"author_login": "anthonydelage",
"committed_at": "2018-07-26T14:47:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7652ac68ea01e383a822b1a5ee1c1702c10c74de",
"body": "Uses [Sphinx syntax for cross-reference labels](https://stackoverflow.com/a/19543591/101923).",
"is_bot": false,
"headline": "Add anchor links to versions in the changelog (#191)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-06-26T16:22:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06ff6992aff57b4af3b2a210a1b2eaee8875b41a",
"body": "The docs needs some corrections in order to pass the Pandas docs linter\r\nin https://github.com/pandas-dev/pandas/pull/21628",
"is_bot": false,
"headline": "DOC: synchronize docs changes with pandas (#190)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-06-25T18:26:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ade32a238d789a115788fe3e81e21aba34544a06",
"body": "* Update changelog with all changes since 0.4.1.\r\n* Address warnings when building the docs due to mis-formed links.\r\n* Removes some old references to streaming, which are no longer\r\n relevant.",
"is_bot": false,
"headline": "DOC: Prepare for 0.5.0 release (#188)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-06-15T16:54:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7007a883130116d6dc2814e6c859462f1fe10bf",
"body": "* ENH: Add location parameter to read_gbq and to_gbq\r\n\r\nThis allows queries to be run against datasets in the Tokyo region.\r\nLikewise, it enables loading dataframes into Tokyo datasets.\r\n\r\nThe location parameter was added in 0.32.0, so this PR also updates the\r\nminimum google-cloud-bigquery version.\r\n\r\n* DOC: Add location parameter to changelog.\r\n\r\nFix test to use private_key parameter so that it passes on Travis.\r\n\r\n* TST: lock conda google-cloud-bigquery version",
"is_bot": false,
"headline": "ENH: Add location parameter to read_gbq and to_gbq (#185)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-06-11T14:43:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e753cc4e61b0089dcea6330eb8c77e93a62984a7",
"body": "* TST: Add unit tests for pandas_gbq.auth.get_credentials().\r\n\r\nTests (actual auth mocked out):\r\n* Using private key with contents.\r\n* Using private key with path.\r\n* Using default credentials.\r\n* Using cached user credentials.\r\n\r\n* TST: Use classmethod decorator for mocked methods.\r\n\r\nSee: https://stackoverflow.com/a/29235090/101923",
"is_bot": false,
"headline": "TST: Add unit tests for pandas_gbq.auth.get_credentials(). (#184)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-26T15:58:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee9955f81b454ff43b3c9c20e15d776444503ac8",
"body": "The docs build is currently broken. This attempts to fix it by using pip\nto install pandas-gbq.",
"is_bot": false,
"headline": "DOC: Add readthedocs YAML",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-25T23:56:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7439771e3dfc2f84dabafa0621246acfa6c73119",
"body": "* Clarifies order of authentication methods.\r\n* Updates links to external resources.",
"is_bot": false,
"headline": "DOC: Add how-to guide for authentication (#183)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-25T23:43:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08166685d3305a57fbfd3bc4c41a1cf5df98ebcf",
"body": "* CLN: refactor auth logic to its own module.\r\n\r\nUses new-style tests for auth-related tests.\r\n\r\n* Mock new auth module functions in gbq unit tests.\r\n\r\n* Use monkeypatch in unit tests to not break system tests.\r\n\r\n* Use private_key and explicit project when default creds not available\r\n\r\n(such as on\n[…]\ngenerate gbq schema test to unit tests.\r\n\r\n* Use pytest marks to skip local auth tests on Travis.\r\n\r\n* Skip tests when no private key file.\r\n\r\n* Use shared test fixtures for auth and gbq system tests.",
"is_bot": false,
"headline": "CLN: refactor auth logic to its own module. (#176)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-07T16:09:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f301442082bab62c793b6a80cf00c03f97938609",
"body": "Now that load jobs are used, no sleep is required when replacing a\r\ntable.",
"is_bot": false,
"headline": "CLN: remove workaround for streaming delays. (#173)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-04T19:15:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0069da3fd3c8d26c406c88768c5387d4481b7694",
"body": "My local tests seem to show that\r\nhttps://github.com/conda-forge/google-cloud-bigquery-feedstock/issues/10\r\nhas been resolved with the latest release of Miniconda (most recent\r\nupdate was on 2018-05-02).",
"is_bot": false,
"headline": "TST: use latest version of miniconda on Travis (#172)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-05-04T19:15:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d038aceb49e8d0ed9df64589ba4081bb946b993c",
"body": "* Add progress for to_gbq function using tqdm\r\n\r\n* Add tqdm addition to changelog\r\n\r\n* Add issue number to changelog for progress bar",
"is_bot": false,
"headline": "Add progress for to_gbq function (#166)",
"author_name": "Amit Kumar",
"author_login": "aktech",
"committed_at": "2018-04-27T21:17:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7711bb06fccaf8aff90f3eba18681afe18263c22",
"body": "* project_id is optional\r\n* don't skip if no project\r\n* docstring & import order\r\n* project not required only if default creds available\r\n* Use tuple for credentials & project for default project detection.\r\n* Update bad_project_id test to query actual data.\r\n\r\nI think BigQuery stopped checking for valid project on queries with no\r\ndata access.\r\n\r\n* Skip credentials tests if key not present.",
"is_bot": false,
"headline": "ENH: project_id optional for to_gbq and read_gbq (#127)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-04-25T19:41:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "187a57f698e21f82f40d6ca0dd626b49db6b7561",
"body": "…build (#169)\n\n* TST: add mocked job_id for google-cloud-bigquery 0.29\r\n\r\nCloses GH#168.\r\n\r\n* TST: upgrade setuptools for namespace package support\r\n\r\n* TST: upgrade pip for namespace package breakage.\r\n\r\n* TST: remove pip commands from conda test environment\r\n\r\n* TST: remove another pip command fro\n[…]\n\r\n\r\n* TST: add setuptools to conda installation\r\n\r\n* TST: add explicit google-api-core dep to conda build\r\n\r\n* TST: pin miniconda to specific version\r\n\r\n* TST: pin google-cloud-bigquery in conda build",
"is_bot": false,
"headline": "TST: mock job_id for g-c-bq 0.29 tests. pin g-c-bq version for conda …",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-25T03:48:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f49ec3f134cc0a85f541116c42647c515fdc7e6",
"body": null,
"is_bot": false,
"headline": "CLN: update test paths in contributing guide (#164)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-10T23:45:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ded66e590b587fc30b01dd3002a26417f405f4f",
"body": "* CLN: rename internal modules. move tests.\r\n\r\nPer GH#154 we don't need to use underscore to show submodules are\r\nprivate. To be 100% clear, I have added a disclaimer to the API\r\nreference as well.\r\n\r\nAlso, I have split the system tests from the unit tests so that the\r\n(fast) unit tests can be more \n[…]\ns. I have followed the same directory structure as used in\r\nthe google-cloud-bigquery library.\r\n\r\n* CLN: move _version.py back for versioneer\r\n\r\n* CLN: run tests from tests directory in conda test run",
"is_bot": false,
"headline": "CLN: rename internal modules. move tests. (#163)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-10T23:10:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e09fc11f93163e0af25142f36acaf4ace22e98b1",
"body": "* TST: use nox for testing\r\n\r\nSeparates conda install from pip installs in Travis config.\r\nThe reason is that nox isn't playing nice with conda. I got\r\na \"could not find _remove_dead_weakref\" when trying to\r\ninstall pip packages when conda was also present.\r\n\r\n* TST: add global pyenv so binaries appear with right aliases.",
"is_bot": false,
"headline": "TST: use nox for testing (#160)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-07T00:14:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1fb6c00041217799cff5ce1fe2d79a6850da0f07",
"body": "* BUG: only show verbose warning for new pandas versions.\r\n\r\n* TST: add unit tests for verbose deprecation warning",
"is_bot": false,
"headline": "BUG: only show verbose warning for new pandas versions. (#158)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-06T18:29:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ced97b19e24ff503330ed108547dd4bf9c422c9",
"body": null,
"is_bot": false,
"headline": "DOC: restore build instructions.",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-03T21:59:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "225c4342d9393577a75b7a590709d77a7016f51f",
"body": "Preparing for a release of 0.4.0.",
"is_bot": false,
"headline": "DOC: Changelog for 0.4.0 (#155)",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-03T21:42:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6294f7a6e4fc9ec63fce49077d146caba96387c3",
"body": "…152)\n\n* BUG: Update pandas-gbq to latest version of google-cloud-bigquery\r\n\r\nThere was a breaking change in 0.32.0.dev1 which changed the way\r\nconfiguration for the query job gets loaded. Also, it added the\r\n'description' field to the schema resource, so this change updates the\r\nschema comparison l\n[…]\nto account for that.\r\n\r\nDetect google-cloud-bigquery version for backwards compatibility\r\n\r\n* DOC: Add verbose deprecation to changelog.\r\n\r\n* TST: MASTER in CI also builds with g-c-bigquery at MASTER.",
"is_bot": false,
"headline": "BUG: Adapt to breaking change in google-cloud-bigquery 0.32.0.dev1 (#…",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-04-03T20:27:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9666965ec23788516698c6365bffa5bca8ba4a02",
"body": null,
"is_bot": false,
"headline": "remove prof files (#153)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-04-02T21:10:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27d5d11678148a4f54219c219dff86bfa888ddd0",
"body": "* bump google auth verison to 1.0.2\r\n\r\n* bump to 1.4.1\r\n\r\n* remove pins",
"is_bot": false,
"headline": "bump google auth version (#143)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-04-01T11:56:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f19fdcc79b8f70281efb5b79127560b3bff49f4",
"body": "* rebase\r\n\r\n* Changes from feedback\r\n\r\n* remove verbose from docstrings and internal classes\r\n\r\n* WIP\r\n\r\n* update for newer code\r\n\r\n* remove verbose for private class\r\n\r\n* updates if cache hit\r\n\r\n* couple refinements\r\n\r\n* remove commented out code\r\n\r\n* show logs in pytest\r\n\r\n* docs",
"is_bot": false,
"headline": "ENH: log rather than print (#18)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-24T01:31:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09e42377aadd4dda06c5a0f6b3eb6f5a22f5e201",
"body": "* remove merge-py\r\n\r\n* repo ops",
"is_bot": false,
"headline": "Remove scripts (#146)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-21T22:34:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f3fada043afd31023acf1f81d18806bbf3f763f",
"body": null,
"is_bot": false,
"headline": "fix & parametrize (#147)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-21T20:43:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a9a48ee9e5c0b454c6ce1c974b3402fe69fca50",
"body": "* Load data with the supplied schema\r\n\r\n* Test for upload data with different df and user schema",
"is_bot": false,
"headline": "Load data with user defined schema (#150)",
"author_name": "Amit Kumar",
"author_login": "aktech",
"committed_at": "2018-03-14T20:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed178867d09fee00e95d9baf5a83b7ec8356c509",
"body": "…_gbq`. (#148)\n\n* BUG: fix bug that all TIMESTAMP fileds become 00 secconds.\r\n\r\n* add a test for extact timestamp\r\n\r\n* use fixed value instead of now()",
"is_bot": false,
"headline": "BUG: TIMESTAMP fields were missing seconds and microseconds after `to…",
"author_name": "rhoboro",
"author_login": "rhoboro",
"committed_at": "2018-03-13T19:40:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "369959a6f2a62de2bf9af9f4977f99f56324b73a",
"body": "* Test incorrectly named\r\n\r\n* gitignore\r\n\r\n* skip failing test for the moment",
"is_bot": false,
"headline": "Skip failing test (#138)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-09T17:28:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dac22f4a904830a303e24426ba6a783707c78205",
"body": "* sorted imports\r\n\r\n* gitignore additions\r\n\r\n* merge\r\n\r\n* flake",
"is_bot": false,
"headline": "CLN: isort (#137)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-08T16:19:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "874b26bd0c68cbf6557212a06d5e1ebe70aa1be5",
"body": "… (#145)",
"is_bot": false,
"headline": "CLN: Minor tweak to error message shown when dependencies are missing…",
"author_name": "Anthonios Partheniou",
"author_login": "parthea",
"committed_at": "2018-03-08T00:08:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "672b357be6b8343d47bf1d4837baff4171a6e85b",
"body": "* remove _setup_common\r\n\r\n* gitignore additions\r\n\r\n* !fix _setup_common\r\n\r\n* lint\r\n\r\n* project as a fixture\r\n\r\n* lint\r\n\r\n* gitignore additions\r\n\r\n* change setup_method to autouse fixture\r\n\r\n* mock breaking on Py3\r\n\r\n* remove some empty methods\r\n\r\n* Revert \"gitignore additions\"\r\n\r\nThis reverts commit\n[…]\nconnector fixture\r\n\r\n* param another test\r\n\r\n* All-but-eliminated auth-specific tests\r\n\r\n* put teardown code in the fixture\r\n\r\n* scope=function\r\n\r\n* and in travis\r\n\r\n* Only run one auth type in Travis",
"is_bot": false,
"headline": "TST: use pytest idioms (#139)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-08T00:07:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "16747609dc58f0b6df2c4e896db5a3f365c4677c",
"body": null,
"is_bot": false,
"headline": "BLD: add @stickler-ci (#141)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-03-04T12:41:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11559583d1451fc64108c12f332d1c93dec4c80c",
"body": null,
"is_bot": false,
"headline": "fix test_parse test (#126)",
"author_name": "Maximilian Roos",
"author_login": "max-sixty",
"committed_at": "2018-02-23T11:07:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2f21126d767805f44784b35d735aeeb48791699",
"body": "* Fix array of floats bug\r\n\r\n* Update changelog",
"is_bot": false,
"headline": "BUG: Use object dtype when querying an array of floats (#134)",
"author_name": "Jason Q. Ng",
"author_login": "jasonqng",
"committed_at": "2018-02-23T10:59:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5666e6dec00d3d1de95fb5ea89103d14ebcacd04",
"body": null,
"is_bot": false,
"headline": "Fix package description (#130)",
"author_name": "Matti Remes",
"author_login": null,
"committed_at": "2018-02-20T12:05:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99cd849ee79173b8239a44bdec212c6003f74576",
"body": "On 64-bit windows 10 the `int` values are cast into 32-bit integers for reasons given here\r\nhttps://stackoverflow.com/questions/36278590/numpy-array-dtype-is-coming-as-int32-by-default-in-a-windows-10-64-bit-machine\r\nThis leads to unhanded exceptions when handling values beyond 32-bit signed range\r\nIn Bigquery, int is always 64bit, so the solution is to specify the data type explicitly",
"is_bot": false,
"headline": "Explicitly use 64bit integers (#121)",
"author_name": "Max Belov",
"author_login": "blose",
"committed_at": "2018-02-15T17:52:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1e1ac6b8255c938845a8280d8f178916dc5c8bc",
"body": null,
"is_bot": false,
"headline": "DOC: unicode error references correct issue",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-02-13T21:24:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff007088c216a40cb44ad4d7d84622c62ad42f44",
"body": null,
"is_bot": false,
"headline": "Add instructions for using test PyPI",
"author_name": "Tim Swast",
"author_login": "tswast",
"committed_at": "2018-02-13T21:15:54Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 18,
"commits_last_year": 0,
"latest_release_at": "2025-01-23T21:07:01Z",
"latest_release_tag": "1.9.1",
"releases_from_tags": false,
"days_since_last_push": 547,
"active_weeks_last_year": 0,
"days_since_latest_release": 553,
"mean_days_between_releases": 192.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 18,
"stars": 37,
"watchers": 10,
"fork_history": {
"days": [
{
"date": "2018-08-19",
"count": 1
},
{
"date": "2018-09-14",
"count": 1
},
{
"date": "2019-06-03",
"count": 1
},
{
"date": "2021-02-11",
"count": 1
},
{
"date": "2021-02-16",
"count": 1
},
{
"date": "2021-03-12",
"count": 1
},
{
"date": "2022-02-28",
"count": 1
},
{
"date": "2022-07-21",
"count": 1
},
{
"date": "2022-12-08",
"count": 1
},
{
"date": "2023-02-09",
"count": 1
},
{
"date": "2023-04-26",
"count": 1
},
{
"date": "2023-05-03",
"count": 1
},
{
"date": "2023-05-22",
"count": 1
},
{
"date": "2023-09-08",
"count": 1
},
{
"date": "2023-10-19",
"count": 1
},
{
"date": "2024-08-15",
"count": 1
},
{
"date": "2024-11-08",
"count": 1
},
{
"date": "2025-02-18",
"count": 1
}
],
"complete": true,
"collected": 18,
"total_forks": 18
},
"star_history": null,
"open_issues_and_prs": 17
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"docs/source/Makefile",
"noxfile.py"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 68883,
"source_files_sampled": 19,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"ci/requirements-conda.txt",
"docs/requirements-docs.txt",
"requirements-dev.txt",
"requirements.txt",
"setup.cfg",
"setup.py"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 6,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 9,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "alabaster",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "flake8",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "google-auth",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "google-auth-oauthlib",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "nox",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pyfakefs",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "recommonmark",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "setuptools",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "sphinx",
"direct": false,
"version": "4.5.0",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-applehelp",
"direct": false,
"version": "1.0.4",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-devhelp",
"direct": false,
"version": "1.0.2",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-htmlhelp",
"direct": false,
"version": "2.0.1",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-qthelp",
"direct": false,
"version": "1.0.3",
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-serializinghtml",
"direct": false,
"version": "1.1.5",
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 15,
"direct_count": 0,
"indirect_count": 15
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 42,
"open_issues": 17,
"closed_ratio": 0.528,
"closed_issues": 19,
"closed_unmerged_prs": 0
},
"bus_factor": 2,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "tswast",
"commits": 87,
"avatar_url": "https://avatars.githubusercontent.com/u/247555?v=4"
},
{
"type": "User",
"login": "jreback",
"commits": 57,
"avatar_url": "https://avatars.githubusercontent.com/u/953992?v=4"
},
{
"type": "User",
"login": "parthea",
"commits": 14,
"avatar_url": "https://avatars.githubusercontent.com/u/5184014?v=4"
},
{
"type": "User",
"login": "max-sixty",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/5635139?v=4"
},
{
"type": "User",
"login": "chalmerlowe",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/7291104?v=4"
},
{
"type": "User",
"login": "jasonqng",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/3181961?v=4"
},
{
"type": "User",
"login": "tworec",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/12720209?v=4"
},
{
"type": "User",
"login": "aktech",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/5647941?v=4"
},
{
"type": "User",
"login": "0x2b3bfa0",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/11387611?v=4"
},
{
"type": "User",
"login": "shobsi",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/10303222?v=4"
}
],
"contributors_sampled": 20,
"top_contributor_share": 0.442
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"linter_configs": [
".flake8"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 24 merged PRs checked by a CI test -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 5,
"reason": "Found 15/30 approved changesets -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 4 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "ab923498a4f923c060c54e3b3913d002fc15bbfc",
"ran_at": "2026-07-30T22:15:24Z",
"aggregate_score": 3.2,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [],
"last_merged_pr_at": "2025-01-29T18:30:10Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 7,
"created_at": "2018-10-23T21:29:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9,
"created_at": "2019-01-25T18:05:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 19,
"created_at": "2019-03-14T16:27:35Z",
"last_comment_at": "2019-03-15T02:24:51Z",
"last_comment_author": "max-sixty"
},
{
"number": 23,
"created_at": "2019-04-12T23:20:40Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 26,
"created_at": "2019-04-23T17:30:02Z",
"last_comment_at": "2023-04-27T18:17:36Z",
"last_comment_author": "abdelmegahed"
},
{
"number": 30,
"created_at": "2019-11-09T01:01:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 38,
"created_at": "2020-09-24T16:25:55Z",
"last_comment_at": "2023-11-26T08:52:41Z",
"last_comment_author": "RahulDubey391"
},
{
"number": 41,
"created_at": "2021-04-21T21:25:27Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 43,
"created_at": "2021-04-21T22:10:56Z",
"last_comment_at": "2021-06-26T13:25:22Z",
"last_comment_author": "0x2b3bfa0"
},
{
"number": 48,
"created_at": "2021-11-18T17:50:15Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 49,
"created_at": "2021-11-19T20:37:17Z",
"last_comment_at": "2021-12-28T17:59:36Z",
"last_comment_author": "martindurant"
},
{
"number": 53,
"created_at": "2022-02-23T15:59:39Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 56,
"created_at": "2022-05-07T14:47:13Z",
"last_comment_at": "2022-06-29T16:01:40Z",
"last_comment_author": "tswast"
},
{
"number": 61,
"created_at": "2023-01-09T18:55:29Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 63,
"created_at": "2023-01-23T15:14:31Z",
"last_comment_at": "2023-01-23T15:14:49Z",
"last_comment_author": "tswast"
},
{
"number": 70,
"created_at": "2023-05-22T08:03:07Z",
"last_comment_at": "2023-09-12T17:09:45Z",
"last_comment_author": "tswast"
},
{
"number": 74,
"created_at": "2024-03-22T20:23:29Z",
"last_comment_at": "2024-11-21T18:25:20Z",
"last_comment_author": "tswast"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/pydata/pydata-google-auth",
"host": "github.com",
"name": "pydata-google-auth",
"owner": "pydata"
},
"metrics": {
"overall": {
"key": "overall",
"band": "weak",
"name": "Overall health",
"note": "The weighted overall 50 is calibrated to 50 on the published index scale (record calibration 2026-08-02). Abandonment Policy applies a 85% multiplier to weighted overall health.",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 50,
"calibrated": 50,
"calibration": "2026-08-02"
}
},
{
"code": "abandonment_overall_adjustment",
"params": {
"cap": 0,
"pct": 85
}
}
],
"value": 42,
"inputs": {
"security": 46,
"vitality": 19,
"community": 55,
"governance": 68,
"calibration": "2026-08-02",
"engineering": 60,
"ai_readiness": 50,
"abandonment_cap": null,
"abandonment_state": "at_risk",
"weighted_overall_raw": 50,
"abandonment_multiplier": 85,
"weighted_overall_before_abandonment": 50,
"overall_after_abandonment_multiplier": 42
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "critical",
"name": "Vitality",
"value": 19,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "critical",
"name": "Development activity",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"commits_last_year": 0,
"human_commit_share": 1,
"days_since_last_push": 547,
"active_weeks_last_year": 0
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 547 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "push_recency",
"params": {
"days": 547
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "0/52 weeks with commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 0
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "0 commits in the last year",
"points": 0,
"status": "missed",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 0
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "weak",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 47,
"inputs": {
"releases_count": 18,
"latest_release_tag": "1.9.1",
"releases_from_tags": false,
"days_since_latest_release": 553,
"mean_days_between_releases": 192.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "18 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 18
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 553 days ago",
"points": 7.2,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 553
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~192.9 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 192.9
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"cap": null,
"state": "at_risk",
"guards": [
"dependencies_clean"
],
"signals": [
"issue_rot",
"scorecard_unmaintained"
],
"red_flag": true,
"multiplier_pct": 85,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": 0,
"unanswered_open_issues": 11,
"days_since_last_merged_pr": 552,
"days_since_last_human_commit": 552,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "no human commit for 552 days; 2 unmet obligation(s): issues unanswered, Scorecard reports it unmaintained",
"points": 85,
"status": "partial",
"details": [
{
"code": "abandonment_flagged",
"params": {
"days": 552,
"count": 2,
"signals": "issues unanswered, Scorecard reports it unmaintained"
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 55,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "weak",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 41,
"inputs": {
"forks": 18,
"stars": 37,
"watchers": 10,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "37 stars",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 37
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "18 forks",
"points": 10.3,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 18
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "10 watchers",
"points": 5.3,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 10
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (BSD-3-Clause)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "BSD-3-Clause"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 68,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 20,
"top_contributor_share": 0.442
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 44% of commits",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 44
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "20 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 20
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 4 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 69,
"inputs": {
"merged_prs": 42,
"open_issues": 17,
"closed_issues": 19,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.528,
"closed_unmerged_prs": 0,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "53% of issues closed",
"points": 22.2,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 53
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "42/42 decided PRs merged",
"points": 30,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 42,
"decided": 42
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 15/30 approved changesets -- score normalized to 5",
"points": 7.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 74,
"inputs": {
"followers": 746,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "pydata",
"public_repos": 29,
"account_age_days": 5331
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "746 followers of pydata",
"points": 20.7,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 746,
"login": "pydata"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "29 public repos, account ~14 yr old",
"points": 22.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 29
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 60,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "weak",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".flake8",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".flake8"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 24 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://pydata-google-auth.readthedocs.io/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://pydata-google-auth.readthedocs.io/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "weak",
"name": "Security",
"value": 46,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 32,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 3.2
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 24 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 15/30 approved changesets -- score normalized to 5",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 4 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 6 resolved dependencies against OSV; 9 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 6
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 9
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 6,
"unassessed_packages": 9,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 6,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 15
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 50,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "weak",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.84,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "84 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 84,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 57,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"docs/source/Makefile",
"noxfile.py"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "docs/source/Makefile, noxfile.py",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "docs/source/Makefile, noxfile.py"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".flake8",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".flake8"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 68883,
"source_files_sampled": 19,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/19 source files over 60KB",
"points": 52.1,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 19,
"oversized": 1
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"top": [],
"labels": [],
"scores": {},
"primary": null,
"evidence": [],
"artifacts": [],
"confidence": "none",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": false
},
"metrics_version": "2.5.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-30T22:15:45.643895Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/pydata/pydata-google-auth.svg",
"full_name": "pydata/pydata-google-auth",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}