{
  "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": "`nest_joins` only works if `join_prefix` is set\n**Describe the bug or question**\r\nAttributes from a joined model are not nested if no `join_prefix` is set\r\n\r\n**To Reproduce**\r\n\r\nConsider two simple models, `Hero` and `Ability`\r\n```python\r\nclass Ability(Base, UUIDMixin, TimestampMixin, SoftDeleteMixin):\r\n    __tablename__ = \"abilities\"\r\n\r\n    name: Mapped[str] = mapped_column(nullable=False)\r\n    strength: Mapped[int] = mapped_column(nullable=False)\r\n    heroes: Mapped[list[\"Hero\"]] = relationship(back_populates=\"ability\")\r\n\r\nclass Hero(Base, UUIDMixin, TimestampMixin, SoftDeleteMixin):\r\n    __tablename__ = \"heroes\"\r\n\r\n    name: Mapped[str] = mapped_column(nullable=False)\r\n    ability_id: Mapped[int] = mapped_column(ForeignKey(\"abilities.id\"))\r\n    ability: Mapped[\"Ability\"] = relationship(back_populates=\"heroes\")\r\n```\r\n\r\nThen, this code does not work as expected:\r\n\r\n```python\r\nheroes = await crud_hero.get_multi_joined(db, join_model=Ability, nest_joins=True)\r\n```\r\n\r\nReturns this (unrelated columns are removed):\r\n\r\n```python\r\n{\r\n    \"data\": [\r\n        {\r\n            \"name\": \"Diana\",\r\n            \"ability_id\": UUID(\"6e52176e-8a92-4a8d-b0b3-1fcd55acc666\"),\r\n            \"id\": UUID(\"8212bccb-ce20-489a-a675-45772ad60eb8\"),\r\n            \"name_1\": \"Superstrength\",\r\n            \"strength\": 10,\r\n            \"id_1\": UUID(\"6e52176e-8a92-4a8d-b0b3-1fcd55acc666\"),\r\n        },\r\n    ],\r\n    \"total_count\": 2,\r\n}\r\n```\r\n\r\nWhen adding a prefix, it (kinda) works:\r\n\r\n```python\r\nheroes = await crud_hero.get_multi_joined(db, join_model=Ability, join_prefix=\"ability_\", nest_joins=True)\r\n```\r\n\r\nResult is looking better\r\n\r\n```python\r\n{\r\n    \"data\": [\r\n        {\r\n            \"name\": \"Diana\",\r\n            \"ability\": {\r\n                \"id\": UUID(\"6e52176e-8a92-4a8d-b0b3-1fcd55acc666\"),\r\n                \"name\": \"Superstrength\",\r\n                \"strength\": 10,\r\n                \"id_1\": UUID(\"6e52176e-8a92-4a8d-b0b3-1fcd55acc666\"),\r\n            },\r\n            \"id\": UUID(\"8212bccb-ce20-489a-a675-45772ad60eb8\"),\r\n        },\r\n    ],\r\n    \"total_count\": 2,\r\n}\r\n```\r\n\r\n",
  "source": {
    "image": "docker.io/swerebenchv2/igorbenav-fastcrud:69-ea8ab1a",
    "platform": "linux/amd64",
    "python": "python",
    "setup": [
      "python -c 'import base64; from pathlib import Path; Path('\"'\"'/tmp/receipts-igorbenav__fastcrud-69-test.patch'\"'\"').write_bytes(base64.b64decode('\"'\"'ZGlmZiAtLWdpdCBhL3Rlc3RzL3NxbGFsY2hlbXkvY3J1ZC90ZXN0X2dldF9qb2luZWQucHkgYi90ZXN0cy9zcWxhbGNoZW15L2NydWQvdGVzdF9nZXRfam9pbmVkLnB5CmluZGV4IGNiMzU5MGIuLjdlNjczMzUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NxbGFsY2hlbXkvY3J1ZC90ZXN0X2dldF9qb2luZWQucHkKKysrIGIvdGVzdHMvc3FsYWxjaGVteS9jcnVkL3Rlc3RfZ2V0X2pvaW5lZC5weQpAQCAtNDY1LDMgKzQ2NSw2MiBAQCBhc3luYyBkZWYgdGVzdF9nZXRfam9pbmVkX25lc3Rfam9pbnMoYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcik6CiAgICAgYXNzZXJ0ICgKICAgICAgICAgInRpZXJfbmFtZSIgbm90IGluIHJlc3VsdAogICAgICksICIndGllcl9uYW1lJyBzaG91bGQgbm90IGJlIGF0IHRoZSB0b3AgbGV2ZWwgaW4gdGhlIHJlc3VsdC4iCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9qb2luZWRfbmVzdGVkX25vX3ByZWZpeF9wcm92aWRlZCgKKyAgICBhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyCispOgorICAgIGZvciB0aWVyX2l0ZW0gaW4gdGVzdF9kYXRhX3RpZXI6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKFRpZXJNb2RlbCgqKnRpZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgZm9yIHVzZXJfaXRlbSBpbiB0ZXN0X2RhdGE6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKE1vZGVsVGVzdCgqKnVzZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgY3J1ZCA9IEZhc3RDUlVEKE1vZGVsVGVzdCkKKyAgICByZXN1bHQgPSBhd2FpdCBjcnVkLmdldF9qb2luZWQoCisgICAgICAgIGRiPWFzeW5jX3Nlc3Npb24sCisgICAgICAgIGpvaW5fbW9kZWw9VGllck1vZGVsLAorICAgICAgICBzY2hlbWFfdG9fc2VsZWN0PUNyZWF0ZVNjaGVtYVRlc3QsCisgICAgICAgIGpvaW5fc2NoZW1hX3RvX3NlbGVjdD1UaWVyU2NoZW1hVGVzdCwKKyAgICAgICAgbmVzdF9qb2lucz1UcnVlLAorICAgICkKKworICAgIGFzc2VydCByZXN1bHQgaXMgbm90IE5vbmUsICJObyByZXN1bHQgcmV0dXJuZWQsIGV4cGVjdGVkIGEgbmVzdGVkIGpvaW4gcmVzdWx0LiIKKyAgICBhc3NlcnQgIm5hbWUiIGluIHJlc3VsdCwgIkV4cGVjdGVkIHByaW1hcnkgbW9kZWwgZmllbGQgJ25hbWUnIGluIHJlc3VsdC4iCisgICAgYXNzZXJ0ICgKKyAgICAgICAgIm5hbWUiIGluIHJlc3VsdFtUaWVyTW9kZWwuX190YWJsZW5hbWVfX10KKyAgICApLCBmIkV4cGVjdGVkICduYW1lJyBmaWVsZCBpbnNpZGUgbmVzdGVkICd7VGllck1vZGVsLl9fdGFibGVuYW1lX199JyBkaWN0aW9uYXJ5LiIKKworCitAcHl0ZXN0Lm1hcmsuYXN5bmNpbworYXN5bmMgZGVmIHRlc3RfZ2V0X2pvaW5lZF9ub19wcmVmaXhfbm9fbmVzdGluZygKKyAgICBhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyCispOgorICAgIGZvciB0aWVyX2l0ZW0gaW4gdGVzdF9kYXRhX3RpZXI6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKFRpZXJNb2RlbCgqKnRpZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgZm9yIHVzZXJfaXRlbSBpbiB0ZXN0X2RhdGE6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKE1vZGVsVGVzdCgqKnVzZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgY3J1ZCA9IEZhc3RDUlVEKE1vZGVsVGVzdCkKKworICAgIHJlc3VsdCA9IGF3YWl0IGNydWQuZ2V0X2pvaW5lZCgKKyAgICAgICAgZGI9YXN5bmNfc2Vzc2lvbiwKKyAgICAgICAgam9pbl9tb2RlbD1UaWVyTW9kZWwsCisgICAgICAgIHNjaGVtYV90b19zZWxlY3Q9Q3JlYXRlU2NoZW1hVGVzdCwKKyAgICAgICAgam9pbl9zY2hlbWFfdG9fc2VsZWN0PVRpZXJTY2hlbWFUZXN0LAorICAgICkKKworICAgIGFzc2VydCByZXN1bHQgaXMgbm90IE5vbmUsICJFeHBlY3RlZCB0byByZXRyaWV2ZSBhIHJlc3VsdCBmcm9tIGpvaW5lZCBxdWVyeS4iCisgICAgYXNzZXJ0ICgKKyAgICAgICAgIm5hbWUiIGluIHJlc3VsdAorICAgICksICJFeHBlY3RlZCAnbmFtZScgZmllbGQgZnJvbSB0aGUgcHJpbWFyeSBtb2RlbCBpbiB0aGUgcmVzdWx0LiIKKyAgICBhc3NlcnQgInRpZXJfaWQiIGluIHJlc3VsdCwgIkV4cGVjdGVkICd0aWVyX2lkJyAoZm9yZWlnbiBrZXkpIGluIHRoZSByZXN1bHQuIgorICAgIGFzc2VydCAoCisgICAgICAgICJ0aWVyX25hbWUiIG5vdCBpbiByZXN1bHQKKyAgICApLCAiRmllbGQgJ3RpZXJfbmFtZScgc2hvdWxkIG5vdCBleGlzdCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHByZWZpeGVkIG9yIG5lc3RlZC4iCmRpZmYgLS1naXQgYS90ZXN0cy9zcWxhbGNoZW15L2NydWQvdGVzdF9nZXRfbXVsdGkucHkgYi90ZXN0cy9zcWxhbGNoZW15L2NydWQvdGVzdF9nZXRfbXVsdGkucHkKaW5kZXggOWI1YTgzNy4uNDMzNDc2MyAxMDA2NDQKLS0tIGEvdGVzdHMvc3FsYWxjaGVteS9jcnVkL3Rlc3RfZ2V0X211bHRpLnB5CisrKyBiL3Rlc3RzL3NxbGFsY2hlbXkvY3J1ZC90ZXN0X2dldF9tdWx0aS5weQpAQCAtNDgsMjQgKzQ4LDYgQEAgYXN5bmMgZGVmIHRlc3RfZ2V0X211bHRpX3BhZ2luYXRpb24oYXN5bmNfc2Vzc2lvbiwgdGVzdF9tb2RlbCwgdGVzdF9kYXRhKToKICAgICBhc3NlcnQgbGVuKHJlc3VsdF9wYWdlXzJbImRhdGEiXSkgPT0gbWluKDUsIG1heCgwLCB0b3RhbF9jb3VudCAtIDUpKQogCiAKLUBweXRlc3QubWFyay5hc3luY2lvCi1hc3luYyBkZWYgdGVzdF9nZXRfbXVsdGlfdW5wYWdpbmF0ZWQoYXN5bmNfc2Vzc2lvbiwgdGVzdF9tb2RlbCwgdGVzdF9kYXRhKToKLSAgICBmb3IgaXRlbSBpbiB0ZXN0X2RhdGE6Ci0gICAgICAgIHJlY29yZCA9IHRlc3RfbW9kZWwoKippdGVtKQotICAgICAgICBhc3luY19zZXNzaW9uLmFkZChyZWNvcmQpCi0gICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQotCi0gICAgdG90YWxfY291bnRfcXVlcnkgPSBhd2FpdCBhc3luY19zZXNzaW9uLmV4ZWN1dGUoCi0gICAgICAgIHNlbGVjdChmdW5jLmNvdW50KCkpLnNlbGVjdF9mcm9tKHRlc3RfbW9kZWwpCi0gICAgKQotICAgIHRvdGFsX2NvdW50ID0gdG90YWxfY291bnRfcXVlcnkuc2NhbGFyKCkKLQotICAgIGNydWQgPSBGYXN0Q1JVRCh0ZXN0X21vZGVsKQotICAgIHJlc3VsdHMgPSBhd2FpdCBjcnVkLmdldF9tdWx0aShhc3luY19zZXNzaW9uLCBvZmZzZXQ9MCwgbGltaXQ9Tm9uZSkKLQotICAgIGFzc2VydCBsZW4ocmVzdWx0c1siZGF0YSJdKSA9PSB0b3RhbF9jb3VudAotCi0KIEBweXRlc3QubWFyay5hc3luY2lvCiBhc3luYyBkZWYgdGVzdF9nZXRfbXVsdGlfc29ydGluZyhhc3luY19zZXNzaW9uLCB0ZXN0X21vZGVsLCB0ZXN0X2RhdGEpOgogICAgIGZvciBpdGVtIGluIHRlc3RfZGF0YToKZGlmZiAtLWdpdCBhL3Rlc3RzL3NxbGFsY2hlbXkvY3J1ZC90ZXN0X2dldF9tdWx0aV9qb2luZWQucHkgYi90ZXN0cy9zcWxhbGNoZW15L2NydWQvdGVzdF9nZXRfbXVsdGlfam9pbmVkLnB5CmluZGV4IDNkZmU3MjkuLmQyNmI1N2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NxbGFsY2hlbXkvY3J1ZC90ZXN0X2dldF9tdWx0aV9qb2luZWQucHkKKysrIGIvdGVzdHMvc3FsYWxjaGVteS9jcnVkL3Rlc3RfZ2V0X211bHRpX2pvaW5lZC5weQpAQCAtNTUsMzIgKzU1LDYgQEAgYXN5bmMgZGVmIHRlc3RfZ2V0X211bHRpX2pvaW5lZF9iYXNpYyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyKToKICAgICBhc3NlcnQgYWxsKCJ0aWVyX25hbWUiIGluIGl0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0WyJkYXRhIl0pCiAKIAotQHB5dGVzdC5tYXJrLmFzeW5jaW8KLWFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfdW5wYWdpbmF0ZWQoYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcik6Ci0gICAgZm9yIHRpZXJfaXRlbSBpbiB0ZXN0X2RhdGFfdGllcjoKLSAgICAgICAgYXN5bmNfc2Vzc2lvbi5hZGQoVGllck1vZGVsKCoqdGllcl9pdGVtKSkKLSAgICBhd2FpdCBhc3luY19zZXNzaW9uLmNvbW1pdCgpCi0KLSAgICBmb3IgdXNlcl9pdGVtIGluIHRlc3RfZGF0YToKLSAgICAgICAgYXN5bmNfc2Vzc2lvbi5hZGQoTW9kZWxUZXN0KCoqdXNlcl9pdGVtKSkKLSAgICBhd2FpdCBhc3luY19zZXNzaW9uLmNvbW1pdCgpCi0KLSAgICBjcnVkID0gRmFzdENSVUQoTW9kZWxUZXN0KQotICAgIHJlc3VsdCA9IGF3YWl0IGNydWQuZ2V0X211bHRpX2pvaW5lZCgKLSAgICAgICAgZGI9YXN5bmNfc2Vzc2lvbiwKLSAgICAgICAgam9pbl9tb2RlbD1UaWVyTW9kZWwsCi0gICAgICAgIGpvaW5fcHJlZml4PSJ0aWVyXyIsCi0gICAgICAgIHNjaGVtYV90b19zZWxlY3Q9Q3JlYXRlU2NoZW1hVGVzdCwKLSAgICAgICAgam9pbl9zY2hlbWFfdG9fc2VsZWN0PVRpZXJTY2hlbWFUZXN0LAotICAgICAgICBvZmZzZXQ9MCwKLSAgICAgICAgbGltaXQ9Tm9uZSwKLSAgICApCi0KLSAgICBhc3NlcnQgbGVuKHJlc3VsdFsiZGF0YSJdKSA9PSBsZW4odGVzdF9kYXRhKQotICAgIGFzc2VydCByZXN1bHRbInRvdGFsX2NvdW50Il0gPT0gbGVuKHRlc3RfZGF0YSkKLSAgICBhc3NlcnQgYWxsKCJ0aWVyX25hbWUiIGluIGl0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0WyJkYXRhIl0pCi0KLQogQHB5dGVzdC5tYXJrLmFzeW5jaW8KIGFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfc29ydGluZyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyKToKICAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgpAQCAtNzU2LDMgKzczMCw2NiBAQCBhc3luYyBkZWYgdGVzdF9nZXRfbXVsdGlfam9pbmVkX3dpdGhfbmVzdGluZyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YQogICAgICAgICAgICAgYXNzZXJ0ICgKICAgICAgICAgICAgICAgICAiY2F0ZWdvcnlfIiBub3QgaW4gaXRlbVsiY2F0ZWdvcnkiXQogICAgICAgICAgICAgKSwgIk5vIHByZWZpeCBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgbmVzdGVkIGNhdGVnb3J5IGtleXMiCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfbm9fcHJlZml4X3JlZ3VsYXIoCisgICAgYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcgorKToKKyAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChUaWVyTW9kZWwoKip0aWVyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGZvciB1c2VyX2l0ZW0gaW4gdGVzdF9kYXRhOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChNb2RlbFRlc3QoKip1c2VyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGNydWQgPSBGYXN0Q1JVRChNb2RlbFRlc3QpCisKKyAgICByZXN1bHQgPSBhd2FpdCBjcnVkLmdldF9tdWx0aV9qb2luZWQoCisgICAgICAgIGRiPWFzeW5jX3Nlc3Npb24sCisgICAgICAgIGpvaW5fbW9kZWw9VGllck1vZGVsLAorICAgICAgICBzY2hlbWFfdG9fc2VsZWN0PUNyZWF0ZVNjaGVtYVRlc3QsCisgICAgICAgIGpvaW5fc2NoZW1hX3RvX3NlbGVjdD1UaWVyU2NoZW1hVGVzdCwKKyAgICAgICAgbGltaXQ9MTAsCisgICAgKQorCisgICAgcHJpbnQocmVzdWx0KQorICAgIGFzc2VydCByZXN1bHQgYW5kIHJlc3VsdFsiZGF0YSJdLCAiRXhwZWN0ZWQgZGF0YSBpbiB0aGUgcmVzdWx0LiIKKyAgICBmb3IgaXRlbSBpbiByZXN1bHRbImRhdGEiXToKKyAgICAgICAgYXNzZXJ0ICJuYW1lIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdXNlciBuYW1lIGluIGVhY2ggaXRlbS4iCisgICAgICAgIGFzc2VydCAibmFtZV8xIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdGllciBuYW1lIGluIGVhY2ggaXRlbSB3aXRob3V0IHByZWZpeC4iCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfbm9fcHJlZml4X25lc3RlZCgKKyAgICBhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyCispOgorICAgIGZvciB0aWVyX2l0ZW0gaW4gdGVzdF9kYXRhX3RpZXI6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKFRpZXJNb2RlbCgqKnRpZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgZm9yIHVzZXJfaXRlbSBpbiB0ZXN0X2RhdGE6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKE1vZGVsVGVzdCgqKnVzZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgY3J1ZCA9IEZhc3RDUlVEKE1vZGVsVGVzdCkKKworICAgIHJlc3VsdCA9IGF3YWl0IGNydWQuZ2V0X211bHRpX2pvaW5lZCgKKyAgICAgICAgZGI9YXN5bmNfc2Vzc2lvbiwKKyAgICAgICAgam9pbl9tb2RlbD1UaWVyTW9kZWwsCisgICAgICAgIHNjaGVtYV90b19zZWxlY3Q9Q3JlYXRlU2NoZW1hVGVzdCwKKyAgICAgICAgam9pbl9zY2hlbWFfdG9fc2VsZWN0PVRpZXJTY2hlbWFUZXN0LAorICAgICAgICBuZXN0X2pvaW5zPVRydWUsCisgICAgICAgIGxpbWl0PTEwLAorICAgICkKKworICAgIGFzc2VydCByZXN1bHQgYW5kIHJlc3VsdFsiZGF0YSJdLCAiRXhwZWN0ZWQgZGF0YSBpbiB0aGUgcmVzdWx0LiIKKyAgICBmb3IgaXRlbSBpbiByZXN1bHRbImRhdGEiXToKKyAgICAgICAgYXNzZXJ0ICJuYW1lIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdXNlciBuYW1lIGluIGVhY2ggaXRlbS4iCisgICAgICAgIGFzc2VydCAoCisgICAgICAgICAgICBUaWVyTW9kZWwuX190YWJsZW5hbWVfXyBpbiBpdGVtCisgICAgICAgICksIGYiRXhwZWN0ZWQgbmVzdGVkICd7VGllck1vZGVsLl9fdGFibGVuYW1lX199JyBrZXkgaW4gZWFjaCBpdGVtLiIKKyAgICAgICAgYXNzZXJ0ICgKKyAgICAgICAgICAgICJuYW1lIiBpbiBpdGVtW1RpZXJNb2RlbC5fX3RhYmxlbmFtZV9fXQorICAgICAgICApLCBmIkV4cGVjdGVkICduYW1lJyBmaWVsZCBpbnNpZGUgbmVzdGVkICd7VGllck1vZGVsLl9fdGFibGVuYW1lX199JyBkaWN0aW9uYXJ5LiIKZGlmZiAtLWdpdCBhL3Rlc3RzL3NxbG1vZGVsL2NydWQvdGVzdF9nZXRfam9pbmVkLnB5IGIvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9qb2luZWQucHkKaW5kZXggNjM4NWYyYi4uNWJhYjYxNiAxMDA2NDQKLS0tIGEvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9qb2luZWQucHkKKysrIGIvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9qb2luZWQucHkKQEAgLTQ2NSwzICs0NjUsNjMgQEAgYXN5bmMgZGVmIHRlc3RfZ2V0X2pvaW5lZF9uZXN0X2pvaW5zKGFzeW5jX3Nlc3Npb24sIHRlc3RfZGF0YSwgdGVzdF9kYXRhX3RpZXIpOgogICAgIGFzc2VydCAoCiAgICAgICAgICJ0aWVyX25hbWUiIG5vdCBpbiByZXN1bHQKICAgICApLCAiJ3RpZXJfbmFtZScgc2hvdWxkIG5vdCBiZSBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSByZXN1bHQuIgorCisKK0BweXRlc3QubWFyay5hc3luY2lvCithc3luYyBkZWYgdGVzdF9nZXRfam9pbmVkX25lc3RlZF9ub19wcmVmaXhfcHJvdmlkZWQoCisgICAgYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcgorKToKKyAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChUaWVyTW9kZWwoKip0aWVyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGZvciB1c2VyX2l0ZW0gaW4gdGVzdF9kYXRhOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChNb2RlbFRlc3QoKip1c2VyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGNydWQgPSBGYXN0Q1JVRChNb2RlbFRlc3QpCisgICAgcmVzdWx0ID0gYXdhaXQgY3J1ZC5nZXRfam9pbmVkKAorICAgICAgICBkYj1hc3luY19zZXNzaW9uLAorICAgICAgICBqb2luX21vZGVsPVRpZXJNb2RlbCwKKyAgICAgICAgc2NoZW1hX3RvX3NlbGVjdD1DcmVhdGVTY2hlbWFUZXN0LAorICAgICAgICBqb2luX3NjaGVtYV90b19zZWxlY3Q9VGllclNjaGVtYVRlc3QsCisgICAgICAgIGpvaW5fcHJlZml4PSJ0aWVyXyIsCisgICAgICAgIG5lc3Rfam9pbnM9VHJ1ZSwKKyAgICApCisKKyAgICBhc3NlcnQgcmVzdWx0IGlzIG5vdCBOb25lLCAiTm8gcmVzdWx0IHJldHVybmVkLCBleHBlY3RlZCBhIG5lc3RlZCBqb2luIHJlc3VsdC4iCisgICAgYXNzZXJ0ICJuYW1lIiBpbiByZXN1bHQsICJFeHBlY3RlZCBwcmltYXJ5IG1vZGVsIGZpZWxkICduYW1lJyBpbiByZXN1bHQuIgorICAgIGFzc2VydCAoCisgICAgICAgICJuYW1lIiBpbiByZXN1bHRbInRpZXIiXQorICAgICksICJFeHBlY3RlZCAnbmFtZScgZmllbGQgaW5zaWRlIG5lc3RlZCAndGllcicgZGljdGlvbmFyeS4iCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9qb2luZWRfbm9fcHJlZml4X25vX25lc3RpbmcoCisgICAgYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcgorKToKKyAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChUaWVyTW9kZWwoKip0aWVyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGZvciB1c2VyX2l0ZW0gaW4gdGVzdF9kYXRhOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChNb2RlbFRlc3QoKip1c2VyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGNydWQgPSBGYXN0Q1JVRChNb2RlbFRlc3QpCisKKyAgICByZXN1bHQgPSBhd2FpdCBjcnVkLmdldF9qb2luZWQoCisgICAgICAgIGRiPWFzeW5jX3Nlc3Npb24sCisgICAgICAgIGpvaW5fbW9kZWw9VGllck1vZGVsLAorICAgICAgICBzY2hlbWFfdG9fc2VsZWN0PUNyZWF0ZVNjaGVtYVRlc3QsCisgICAgICAgIGpvaW5fc2NoZW1hX3RvX3NlbGVjdD1UaWVyU2NoZW1hVGVzdCwKKyAgICApCisKKyAgICBhc3NlcnQgcmVzdWx0IGlzIG5vdCBOb25lLCAiRXhwZWN0ZWQgdG8gcmV0cmlldmUgYSByZXN1bHQgZnJvbSBqb2luZWQgcXVlcnkuIgorICAgIGFzc2VydCAoCisgICAgICAgICJuYW1lIiBpbiByZXN1bHQKKyAgICApLCAiRXhwZWN0ZWQgJ25hbWUnIGZpZWxkIGZyb20gdGhlIHByaW1hcnkgbW9kZWwgaW4gdGhlIHJlc3VsdC4iCisgICAgYXNzZXJ0ICJ0aWVyX2lkIiBpbiByZXN1bHQsICJFeHBlY3RlZCAndGllcl9pZCcgKGZvcmVpZ24ga2V5KSBpbiB0aGUgcmVzdWx0LiIKKyAgICBhc3NlcnQgKAorICAgICAgICAidGllcl9uYW1lIiBub3QgaW4gcmVzdWx0CisgICAgKSwgIkZpZWxkICd0aWVyX25hbWUnIHNob3VsZCBub3QgZXhpc3QgdW5sZXNzIHNwZWNpZmljYWxseSBwcmVmaXhlZCBvciBuZXN0ZWQuIgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9tdWx0aS5weSBiL3Rlc3RzL3NxbG1vZGVsL2NydWQvdGVzdF9nZXRfbXVsdGkucHkKaW5kZXggOWI1YTgzNy4uNDMzNDc2MyAxMDA2NDQKLS0tIGEvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9tdWx0aS5weQorKysgYi90ZXN0cy9zcWxtb2RlbC9jcnVkL3Rlc3RfZ2V0X211bHRpLnB5CkBAIC00OCwyNCArNDgsNiBAQCBhc3luYyBkZWYgdGVzdF9nZXRfbXVsdGlfcGFnaW5hdGlvbihhc3luY19zZXNzaW9uLCB0ZXN0X21vZGVsLCB0ZXN0X2RhdGEpOgogICAgIGFzc2VydCBsZW4ocmVzdWx0X3BhZ2VfMlsiZGF0YSJdKSA9PSBtaW4oNSwgbWF4KDAsIHRvdGFsX2NvdW50IC0gNSkpCiAKIAotQHB5dGVzdC5tYXJrLmFzeW5jaW8KLWFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV91bnBhZ2luYXRlZChhc3luY19zZXNzaW9uLCB0ZXN0X21vZGVsLCB0ZXN0X2RhdGEpOgotICAgIGZvciBpdGVtIGluIHRlc3RfZGF0YToKLSAgICAgICAgcmVjb3JkID0gdGVzdF9tb2RlbCgqKml0ZW0pCi0gICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKHJlY29yZCkKLSAgICBhd2FpdCBhc3luY19zZXNzaW9uLmNvbW1pdCgpCi0KLSAgICB0b3RhbF9jb3VudF9xdWVyeSA9IGF3YWl0IGFzeW5jX3Nlc3Npb24uZXhlY3V0ZSgKLSAgICAgICAgc2VsZWN0KGZ1bmMuY291bnQoKSkuc2VsZWN0X2Zyb20odGVzdF9tb2RlbCkKLSAgICApCi0gICAgdG90YWxfY291bnQgPSB0b3RhbF9jb3VudF9xdWVyeS5zY2FsYXIoKQotCi0gICAgY3J1ZCA9IEZhc3RDUlVEKHRlc3RfbW9kZWwpCi0gICAgcmVzdWx0cyA9IGF3YWl0IGNydWQuZ2V0X211bHRpKGFzeW5jX3Nlc3Npb24sIG9mZnNldD0wLCBsaW1pdD1Ob25lKQotCi0gICAgYXNzZXJ0IGxlbihyZXN1bHRzWyJkYXRhIl0pID09IHRvdGFsX2NvdW50Ci0KLQogQHB5dGVzdC5tYXJrLmFzeW5jaW8KIGFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9zb3J0aW5nKGFzeW5jX3Nlc3Npb24sIHRlc3RfbW9kZWwsIHRlc3RfZGF0YSk6CiAgICAgZm9yIGl0ZW0gaW4gdGVzdF9kYXRhOgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3FsbW9kZWwvY3J1ZC90ZXN0X2dldF9tdWx0aV9qb2luZWQucHkgYi90ZXN0cy9zcWxtb2RlbC9jcnVkL3Rlc3RfZ2V0X211bHRpX2pvaW5lZC5weQppbmRleCBkNDgwNzIxLi5hODBkZjE3IDEwMDY0NAotLS0gYS90ZXN0cy9zcWxtb2RlbC9jcnVkL3Rlc3RfZ2V0X211bHRpX2pvaW5lZC5weQorKysgYi90ZXN0cy9zcWxtb2RlbC9jcnVkL3Rlc3RfZ2V0X211bHRpX2pvaW5lZC5weQpAQCAtNTUsMzIgKzU1LDYgQEAgYXN5bmMgZGVmIHRlc3RfZ2V0X211bHRpX2pvaW5lZF9iYXNpYyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyKToKICAgICBhc3NlcnQgYWxsKCJ0aWVyX25hbWUiIGluIGl0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0WyJkYXRhIl0pCiAKIAotQHB5dGVzdC5tYXJrLmFzeW5jaW8KLWFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfdW5wYWdpbmF0ZWQoYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcik6Ci0gICAgZm9yIHRpZXJfaXRlbSBpbiB0ZXN0X2RhdGFfdGllcjoKLSAgICAgICAgYXN5bmNfc2Vzc2lvbi5hZGQoVGllck1vZGVsKCoqdGllcl9pdGVtKSkKLSAgICBhd2FpdCBhc3luY19zZXNzaW9uLmNvbW1pdCgpCi0KLSAgICBmb3IgdXNlcl9pdGVtIGluIHRlc3RfZGF0YToKLSAgICAgICAgYXN5bmNfc2Vzc2lvbi5hZGQoTW9kZWxUZXN0KCoqdXNlcl9pdGVtKSkKLSAgICBhd2FpdCBhc3luY19zZXNzaW9uLmNvbW1pdCgpCi0KLSAgICBjcnVkID0gRmFzdENSVUQoTW9kZWxUZXN0KQotICAgIHJlc3VsdCA9IGF3YWl0IGNydWQuZ2V0X211bHRpX2pvaW5lZCgKLSAgICAgICAgZGI9YXN5bmNfc2Vzc2lvbiwKLSAgICAgICAgam9pbl9tb2RlbD1UaWVyTW9kZWwsCi0gICAgICAgIGpvaW5fcHJlZml4PSJ0aWVyXyIsCi0gICAgICAgIHNjaGVtYV90b19zZWxlY3Q9Q3JlYXRlU2NoZW1hVGVzdCwKLSAgICAgICAgam9pbl9zY2hlbWFfdG9fc2VsZWN0PVRpZXJTY2hlbWFUZXN0LAotICAgICAgICBvZmZzZXQ9MCwKLSAgICAgICAgbGltaXQ9Tm9uZSwKLSAgICApCi0KLSAgICBhc3NlcnQgbGVuKHJlc3VsdFsiZGF0YSJdKSA9PSBsZW4odGVzdF9kYXRhKQotICAgIGFzc2VydCByZXN1bHRbInRvdGFsX2NvdW50Il0gPT0gbGVuKHRlc3RfZGF0YSkKLSAgICBhc3NlcnQgYWxsKCJ0aWVyX25hbWUiIGluIGl0ZW0gZm9yIGl0ZW0gaW4gcmVzdWx0WyJkYXRhIl0pCi0KLQogQHB5dGVzdC5tYXJrLmFzeW5jaW8KIGFzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfc29ydGluZyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyKToKICAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgpAQCAtNzU2LDMgKzczMCw2NiBAQCBhc3luYyBkZWYgdGVzdF9nZXRfbXVsdGlfam9pbmVkX3dpdGhfbmVzdGluZyhhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YQogICAgICAgICAgICAgYXNzZXJ0ICgKICAgICAgICAgICAgICAgICAiY2F0ZWdvcnlfIiBub3QgaW4gaXRlbVsiY2F0ZWdvcnkiXQogICAgICAgICAgICAgKSwgIk5vIHByZWZpeCBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgbmVzdGVkIGNhdGVnb3J5IGtleXMiCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfbm9fcHJlZml4X3JlZ3VsYXIoCisgICAgYXN5bmNfc2Vzc2lvbiwgdGVzdF9kYXRhLCB0ZXN0X2RhdGFfdGllcgorKToKKyAgICBmb3IgdGllcl9pdGVtIGluIHRlc3RfZGF0YV90aWVyOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChUaWVyTW9kZWwoKip0aWVyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGZvciB1c2VyX2l0ZW0gaW4gdGVzdF9kYXRhOgorICAgICAgICBhc3luY19zZXNzaW9uLmFkZChNb2RlbFRlc3QoKip1c2VyX2l0ZW0pKQorICAgIGF3YWl0IGFzeW5jX3Nlc3Npb24uY29tbWl0KCkKKworICAgIGNydWQgPSBGYXN0Q1JVRChNb2RlbFRlc3QpCisKKyAgICByZXN1bHQgPSBhd2FpdCBjcnVkLmdldF9tdWx0aV9qb2luZWQoCisgICAgICAgIGRiPWFzeW5jX3Nlc3Npb24sCisgICAgICAgIGpvaW5fbW9kZWw9VGllck1vZGVsLAorICAgICAgICBzY2hlbWFfdG9fc2VsZWN0PUNyZWF0ZVNjaGVtYVRlc3QsCisgICAgICAgIGpvaW5fc2NoZW1hX3RvX3NlbGVjdD1UaWVyU2NoZW1hVGVzdCwKKyAgICAgICAgbGltaXQ9MTAsCisgICAgKQorCisgICAgcHJpbnQocmVzdWx0KQorICAgIGFzc2VydCByZXN1bHQgYW5kIHJlc3VsdFsiZGF0YSJdLCAiRXhwZWN0ZWQgZGF0YSBpbiB0aGUgcmVzdWx0LiIKKyAgICBmb3IgaXRlbSBpbiByZXN1bHRbImRhdGEiXToKKyAgICAgICAgYXNzZXJ0ICJuYW1lIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdXNlciBuYW1lIGluIGVhY2ggaXRlbS4iCisgICAgICAgIGFzc2VydCAibmFtZV8xIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdGllciBuYW1lIGluIGVhY2ggaXRlbSB3aXRob3V0IHByZWZpeC4iCisKKworQHB5dGVzdC5tYXJrLmFzeW5jaW8KK2FzeW5jIGRlZiB0ZXN0X2dldF9tdWx0aV9qb2luZWRfbm9fcHJlZml4X25lc3RlZCgKKyAgICBhc3luY19zZXNzaW9uLCB0ZXN0X2RhdGEsIHRlc3RfZGF0YV90aWVyCispOgorICAgIGZvciB0aWVyX2l0ZW0gaW4gdGVzdF9kYXRhX3RpZXI6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKFRpZXJNb2RlbCgqKnRpZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgZm9yIHVzZXJfaXRlbSBpbiB0ZXN0X2RhdGE6CisgICAgICAgIGFzeW5jX3Nlc3Npb24uYWRkKE1vZGVsVGVzdCgqKnVzZXJfaXRlbSkpCisgICAgYXdhaXQgYXN5bmNfc2Vzc2lvbi5jb21taXQoKQorCisgICAgY3J1ZCA9IEZhc3RDUlVEKE1vZGVsVGVzdCkKKworICAgIHJlc3VsdCA9IGF3YWl0IGNydWQuZ2V0X211bHRpX2pvaW5lZCgKKyAgICAgICAgZGI9YXN5bmNfc2Vzc2lvbiwKKyAgICAgICAgam9pbl9tb2RlbD1UaWVyTW9kZWwsCisgICAgICAgIHNjaGVtYV90b19zZWxlY3Q9Q3JlYXRlU2NoZW1hVGVzdCwKKyAgICAgICAgam9pbl9zY2hlbWFfdG9fc2VsZWN0PVRpZXJTY2hlbWFUZXN0LAorICAgICAgICBuZXN0X2pvaW5zPVRydWUsCisgICAgICAgIGxpbWl0PTEwLAorICAgICkKKworICAgIGFzc2VydCByZXN1bHQgYW5kIHJlc3VsdFsiZGF0YSJdLCAiRXhwZWN0ZWQgZGF0YSBpbiB0aGUgcmVzdWx0LiIKKyAgICBmb3IgaXRlbSBpbiByZXN1bHRbImRhdGEiXToKKyAgICAgICAgYXNzZXJ0ICJuYW1lIiBpbiBpdGVtLCAiRXhwZWN0ZWQgdXNlciBuYW1lIGluIGVhY2ggaXRlbS4iCisgICAgICAgIGFzc2VydCAoCisgICAgICAgICAgICBUaWVyTW9kZWwuX190YWJsZW5hbWVfXyBpbiBpdGVtCisgICAgICAgICksIGYiRXhwZWN0ZWQgbmVzdGVkICd7VGllck1vZGVsLl9fdGFibGVuYW1lX199JyBrZXkgaW4gZWFjaCBpdGVtLiIKKyAgICAgICAgYXNzZXJ0ICgKKyAgICAgICAgICAgICJuYW1lIiBpbiBpdGVtW1RpZXJNb2RlbC5fX3RhYmxlbmFtZV9fXQorICAgICAgICApLCBmIkV4cGVjdGVkICduYW1lJyBmaWVsZCBpbnNpZGUgbmVzdGVkICd7VGllck1vZGVsLl9fdGFibGVuYW1lX199JyBkaWN0aW9uYXJ5LiIK'\"'\"'))'",
      "git apply /tmp/receipts-igorbenav__fastcrud-69-test.patch"
    ],
    "workdir": "/fastcrud"
  },
  "spec_paths": [
    "tests/sqlalchemy/crud/test_get_joined.py",
    "tests/sqlalchemy/crud/test_get_multi.py",
    "tests/sqlalchemy/crud/test_get_multi_joined.py",
    "tests/sqlmodel/crud/test_get_joined.py",
    "tests/sqlmodel/crud/test_get_multi.py",
    "tests/sqlmodel/crud/test_get_multi_joined.py"
  ],
  "spec_tests": [
    "tests/sqlalchemy/crud/test_get_joined.py::test_get_joined_nested_no_prefix_provided",
    "tests/sqlalchemy/crud/test_get_multi_joined.py::test_get_multi_joined_no_prefix_nested",
    "tests/sqlmodel/crud/test_get_multi_joined.py::test_get_multi_joined_no_prefix_nested"
  ],
  "suite_scope": "--no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/sqlalchemy/crud/test_get_joined.py tests/sqlalchemy/crud/test_get_multi.py tests/sqlalchemy/crud/test_get_multi_joined.py tests/sqlmodel/crud/test_get_joined.py tests/sqlmodel/crud/test_get_multi.py tests/sqlmodel/crud/test_get_multi_joined.py"
}
