{
  "appeals": 1,
  "budgets": {
    "baseline_limit_s": 600,
    "verification_timeout_s": 600,
    "worker": {
      "max_completion_tokens": 96000,
      "max_turns": 60,
      "max_wall_seconds": 1500.0,
      "prompt_token_budget": 160000
    }
  },
  "issue": "tidy-imports --black fails with no pyproject.toml (PyInf#11819)\nWhen using --black outside of a tree with a pyproject.toml, tidy-imports 1.8.9 crashes with the attached traceback. tidy-imports 1.8.6 doesn't exhibit this issue. Started happening after commit - https://github.com/deshaw/pyflyby/commit/8c10f4971d328fc985b0910f1397b4c36a67c318\r\n\r\n```\r\n> tidy-imports --black /var/tmp/a.py --no-remove-unused\r\nTraceback (most recent call last):\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_cmdline.py\", line 391, in process_actions\r\n    action(m)\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_cmdline.py\", line 433, in action_ifchanged\r\n    if m.output_content.joined == m.input_content.joined:\r\n       ^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_util.py\", line 58, in __get__\r\n    result = self.method(inst)\r\n             ^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_cmdline.py\", line 346, in output_content\r\n    return FileText(self.modifier(self.input_content), filename=self.filename)\r\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/bin/tidy-imports\", line 155, in modify\r\n    x = fix_unused_and_missing_imports(\r\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 342, in fix_unused_and_missing_imports\r\n    codeblock = reformat_import_statements(codeblock, params=params)\r\n                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 274, in reformat_import_statements\r\n    return transformer.output(params=params)\r\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 49, in output\r\n    result = self.pretty_print(params=params)\r\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 99, in pretty_print\r\n    result = [block.pretty_print(params=params) for block in self.blocks]\r\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 99, in <listcomp>\r\n    result = [block.pretty_print(params=params) for block in self.blocks]\r\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_imports2s.py\", line 68, in pretty_print\r\n    return self.importset.pretty_print(params)\r\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importclns.py\", line 473, in pretty_print\r\n    return ''.join(pp(statement, import_column) for statement in statements)\r\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importclns.py\", line 473, in <genexpr>\r\n    return ''.join(pp(statement, import_column) for statement in statements)\r\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importclns.py\", line 410, in pp\r\n    return statement.pretty_print(\r\n           ^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importstmt.py\", line 524, in pretty_print\r\n    return self.run_black(res, params)\r\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importstmt.py\", line 534, in run_black\r\n    black_config = read_black_config()\r\n                   ^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/pyflyby/_importstmt.py\", line 30, in read_black_config\r\n    raw_config = parse_pyproject_toml(value)\r\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n  File \"/usr/local/python/python-3.11/std/lib64/python3.11/site-packages/black/files.py\", line 120, in parse_pyproject_toml\r\n    with open(path_config, \"rb\") as f:\r\n         ^^^^^^^^^^^^^^^^^^^^^^^\r\nTypeError: While processing /var/tmp/a.py: expected str, bytes or os.PathLike object, not NoneType\r\n\r\n/usr/local/bin/tidy-imports: encountered the following problems:\r\n    /var/tmp/a.py: TypeError: expected str, bytes or os.PathLike object, not NoneType\r\n\r\n```",
  "source": {
    "image": "docker.io/swerebenchv2/deshaw-pyflyby:289-c25497f",
    "platform": "linux/amd64",
    "python": "python",
    "setup": [
      "python -c 'import base64; from pathlib import Path; Path('\"'\"'/tmp/receipts-deshaw__pyflyby-289-test.patch'\"'\"').write_bytes(base64.b64decode('\"'\"'ZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RfaW1wb3J0c3RtdC5weSBiL3Rlc3RzL3Rlc3RfaW1wb3J0c3RtdC5weQppbmRleCA0NDQwMDEwLi4xMWZiZTVhIDEwMDY0NAotLS0gYS90ZXN0cy90ZXN0X2ltcG9ydHN0bXQucHkKKysrIGIvdGVzdHMvdGVzdF9pbXBvcnRzdG10LnB5CkBAIC00LDEwICs0LDEzIEBACiAjIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KIAogCitmcm9tICAgcHl0ZXN0ICAgICAgICAgICAgICAgICAgIGltcG9ydCByYWlzZXMKK2Zyb20gICB1bml0dGVzdC5tb2NrICAgICAgICAgICAgaW1wb3J0IHBhdGNoCiAKIGZyb20gICBweWZseWJ5Ll9mbGFncyAgICAgICAgICAgaW1wb3J0IENvbXBpbGVyRmxhZ3MKLWZyb20gICBweWZseWJ5Ll9pbXBvcnRzdG10ICAgICAgaW1wb3J0IEltcG9ydCwgSW1wb3J0U3BsaXQsIEltcG9ydFN0YXRlbWVudAotCitmcm9tICAgcHlmbHlieS5fZm9ybWF0ICAgICAgICAgIGltcG9ydCBGb3JtYXRQYXJhbXMKK2Zyb20gICBweWZseWJ5Ll9pbXBvcnRzdG10ICAgICAgaW1wb3J0IChJbXBvcnQsIEltcG9ydFNwbGl0LCBJbXBvcnRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9ibGFja19jb25maWcpCiAKIGRlZiB0ZXN0X0ltcG9ydF9mcm9tX3BhcnRzXzEoKToKICAgICBpbXAgPSBJbXBvcnQuZnJvbV9wYXJ0cygiLmZvby5iYXIiLCAiYmFyIikKQEAgLTExOCw2ICsxMjEsMTMgQEAgZGVmIHRlc3RfSW1wb3J0X3JlcGxhY2VfMigpOgogICAgIGFzc2VydCByZXN1bHQgPT0gSW1wb3J0KCdmcm9tIHh4IGltcG9ydCB5eSBhcyBiYicpCiAKIAorQHBhdGNoKCJweWZseWJ5Ll9pbXBvcnRzdG10LnJlYWRfYmxhY2tfY29uZmlnIiwgbGFtYmRhOiB7ImxpbmVfbGVuZ3RoIjogMjB9KQorZGVmIHRlc3RfSW1wb3J0X2JsYWNrX2xpbmVfbGVuZ3RoKCk6CisgICAgc3RtdCA9IEltcG9ydCgiZnJvbSBhMTIzNDU2Nzg5IGltcG9ydCBiMTIzNDU2Nzg5IikKKyAgICByZXN1bHQgPSBzdG10LnByZXR0eV9wcmludChwYXJhbXM9Rm9ybWF0UGFyYW1zKHVzZV9ibGFjaz1UcnVlKSkKKyAgICBhc3NlcnQgcmVzdWx0ID09ICJmcm9tIGExMjM0NTY3ODkgaW1wb3J0IChcbiAgICBiMTIzNDU2Nzg5LFxuKVxuIgorCisKIGRlZiB0ZXN0X0ltcG9ydFN0YXRlbWVudF8xKCk6CiAgICAgc3RtdCA9IEltcG9ydFN0YXRlbWVudCgiaW1wb3J0ICBmb28gLiBiYXIiKQogICAgIGFzc2VydCBzdG10LmZyb21uYW1lID09IE5vbmUKQEAgLTIwNiwzICsyMTYsNTggQEAgZGVmIHRlc3RfSW1wb3J0U3RhdGVtZW50X2VxbmVfMigpOgogICAgIGFzc2VydCBub3QgKHN0bXQxYSAhPSBzdG10MWIpCiAgICAgYXNzZXJ0ICAgICAoc3RtdDFhICE9IHN0bXQyICkKICAgICBhc3NlcnQgbm90IChzdG10MWEgPT0gc3RtdDIgKQorCisKK0BwYXRjaCgicHlmbHlieS5faW1wb3J0c3RtdC5maW5kX3B5cHJvamVjdF90b21sIiwgbGFtYmRhIHJvb3Q6IE5vbmUpCitkZWYgdGVzdF9JbXBvcnRTdGF0ZW1lbnRfcHJldHR5X3ByaW50X2JsYWNrX25vX2NvbmZpZygpOgorICAgICMgcnVubmluZyBzaG91bGQgbm90IGVycm9yIG91dCB3aGVuIG5vIHB5cHJvamVjdC50b21sIGZpbGUgaXMgZm91bmQKKyAgICBzdG10ID0gSW1wb3J0U3RhdGVtZW50KCJmcm9tIGEgaW1wb3J0IGIiKQorICAgIHJlc3VsdCA9IHN0bXQucHJldHR5X3ByaW50KHBhcmFtcz1Gb3JtYXRQYXJhbXModXNlX2JsYWNrPVRydWUpKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdCwgc3RyKQorCisKK0BwYXRjaCgicHlmbHlieS5faW1wb3J0c3RtdC5maW5kX3B5cHJvamVjdF90b21sIiwgbGFtYmRhIHJvb3Q6IE5vbmUpCitkZWYgdGVzdF9yZWFkX2JsYWNrX2NvbmZpZ19ub19jb25maWcoKToKKyAgICAjIHJlYWRpbmcgYmxhY2sgY29uZmlnIHNob3VsZCB3b3JrIHdoZW4gbm8gcHlwcm9qZWN0LnRvbWwgZmlsZSBpcyBmb3VuZAorICAgIGNvbmZpZyA9IHJlYWRfYmxhY2tfY29uZmlnKCkKKyAgICBhc3NlcnQgY29uZmlnID09IHt9CisKKworQHBhdGNoKCJweWZseWJ5Ll9pbXBvcnRzdG10LmZpbmRfcHlwcm9qZWN0X3RvbWwiLCBsYW1iZGEgcm9vdDogInB5cHJvamVjdC50b21sIikKK0BwYXRjaCgKKyAgICAicHlmbHlieS5faW1wb3J0c3RtdC5wYXJzZV9weXByb2plY3RfdG9tbCIsCisgICAgbGFtYmRhIHBhdGg6IHsKKyAgICAgICAgImxpbmVfbGVuZ3RoIjogODAsCisgICAgICAgICJza2lwX21hZ2ljX3RyYWlsaW5nX2NvbW1hIjogVHJ1ZSwKKyAgICAgICAgInNraXBfc3RyaW5nX25vcm1hbGl6YXRpb24iOiBGYWxzZSwKKyAgICAgICAgInNraXBfc291cmNlX2ZpcnN0X2xpbmUiOiBUcnVlCisgICAgfQorKQorZGVmIHRlc3RfcmVhZF9ibGFja19jb25maWdfZXh0cmFjdHNfY29uZmlnX3N1YnNldCgpOgorICAgIGNvbmZpZyA9IHJlYWRfYmxhY2tfY29uZmlnKCkKKyAgICAjIHNob3VsZCBjb3B5IHRoZSBkZXNpcmVkIGJsYWNrIG9wdGlvbnMKKyAgICBhc3NlcnQgY29uZmlnWyJsaW5lX2xlbmd0aCJdID09IDgwCisgICAgYXNzZXJ0IGNvbmZpZ1sic2tpcF9tYWdpY190cmFpbGluZ19jb21tYSJdID09IFRydWUKKyAgICBhc3NlcnQgY29uZmlnWyJza2lwX3N0cmluZ19ub3JtYWxpemF0aW9uIl0gPT0gRmFsc2UKKyAgICAjIHNob3VsZCBub3QgY29weSBhbnl0aGluZyBlbHNlCisgICAgYXNzZXJ0ICJza2lwX3NvdXJjZV9maXJzdF9saW5lIiBub3QgaW4gY29uZmlnCisKKworQHBhdGNoKCJweWZseWJ5Ll9pbXBvcnRzdG10LmZpbmRfcHlwcm9qZWN0X3RvbWwiLCBsYW1iZGEgcm9vdDogInB5cHJvamVjdC50b21sIikKK0BwYXRjaCgicHlmbHlieS5faW1wb3J0c3RtdC5wYXJzZV9weXByb2plY3RfdG9tbCIsIGxhbWJkYSBwYXRoOiB7InRhcmdldF92ZXJzaW9uIjogWyJweTMxMCIsICJweTMxMSJdfSkKK2RlZiB0ZXN0X3JlYWRfYmxhY2tfY29uZmlnX3RhcmdldF92ZXJzaW9uX2xpc3QoKToKKyAgICBjb25maWcgPSByZWFkX2JsYWNrX2NvbmZpZygpCisgICAgYXNzZXJ0IGNvbmZpZ1sidGFyZ2V0X3ZlcnNpb24iXSA9PSB7InB5MzEwIiwgInB5MzExIn0KKworCitAcGF0Y2goInB5Zmx5YnkuX2ltcG9ydHN0bXQuZmluZF9weXByb2plY3RfdG9tbCIsIGxhbWJkYSByb290OiAicHlwcm9qZWN0LnRvbWwiKQorQHBhdGNoKCJweWZseWJ5Ll9pbXBvcnRzdG10LnBhcnNlX3B5cHJvamVjdF90b21sIiwgbGFtYmRhIHBhdGg6IHsidGFyZ2V0X3ZlcnNpb24iOiAicHkzMTEifSkKK2RlZiB0ZXN0X3JlYWRfYmxhY2tfY29uZmlnX3RhcmdldF92ZXJzaW9uX3N0cigpOgorICAgIGNvbmZpZyA9IHJlYWRfYmxhY2tfY29uZmlnKCkKKyAgICBhc3NlcnQgY29uZmlnWyJ0YXJnZXRfdmVyc2lvbiJdID09ICJweTMxMSIKKworQHBhdGNoKCJweWZseWJ5Ll9pbXBvcnRzdG10LmZpbmRfcHlwcm9qZWN0X3RvbWwiLCBsYW1iZGEgcm9vdDogInB5cHJvamVjdC50b21sIikKK0BwYXRjaCgicHlmbHlieS5faW1wb3J0c3RtdC5wYXJzZV9weXByb2plY3RfdG9tbCIsIGxhbWJkYSBwYXRoOiB7InRhcmdldF92ZXJzaW9uIjogb2JqZWN0KCl9KQorZGVmIHRlc3RfcmVhZF9ibGFja19jb25maWdfdGFyZ2V0X3ZlcnNpb25fb3RoZXIoKToKKyAgICB3aXRoIHJhaXNlcyhWYWx1ZUVycm9yLCBtYXRjaD0iSW52YWxpZCBjb25maWcgZm9yIGJsYWNrIik6CisgICAgICAgIHJlYWRfYmxhY2tfY29uZmlnKCkK'\"'\"'))'",
      "git apply /tmp/receipts-deshaw__pyflyby-289-test.patch"
    ],
    "workdir": "/pyflyby"
  },
  "spec_paths": [
    "tests/test_importstmt.py"
  ],
  "spec_tests": [
    "tests/test_importstmt.py::test_ImportStatement_pretty_print_black_no_config",
    "tests/test_importstmt.py::test_read_black_config_no_config"
  ],
  "suite_scope": "--no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/test_importstmt.py"
}
