given a sqlite url + desired driver + ident, make a canonical URL out of it
(url, driver, ident)
| 36 | |
| 37 | |
| 38 | def _format_url(url, driver, ident): |
| 39 | """given a sqlite url + desired driver + ident, make a canonical |
| 40 | URL out of it |
| 41 | |
| 42 | """ |
| 43 | url = sa_url.make_url(url) |
| 44 | |
| 45 | if driver is None: |
| 46 | driver = url.get_driver_name() |
| 47 | |
| 48 | filename = url.database |
| 49 | |
| 50 | needs_enc = driver == "pysqlcipher" |
| 51 | name_token = None |
| 52 | |
| 53 | if filename and filename != ":memory:": |
| 54 | assert "test_schema" not in filename |
| 55 | tokens = re.split(r"[_\.]", filename) |
| 56 | |
| 57 | for token in tokens: |
| 58 | if token in _drivernames: |
| 59 | if driver is None: |
| 60 | driver = token |
| 61 | continue |
| 62 | elif token in ("db", "enc"): |
| 63 | continue |
| 64 | elif name_token is None: |
| 65 | name_token = token.strip("_") |
| 66 | |
| 67 | assert name_token, f"sqlite filename has no name token: {url.database}" |
| 68 | |
| 69 | new_filename = f"{name_token}_{driver}" |
| 70 | if ident: |
| 71 | new_filename += f"_{ident}" |
| 72 | new_filename += ".db" |
| 73 | if needs_enc: |
| 74 | new_filename += ".enc" |
| 75 | url = url.set(database=new_filename) |
| 76 | |
| 77 | if needs_enc: |
| 78 | url = url.set(password="test") |
| 79 | |
| 80 | url = url.set(drivername="sqlite+%s" % (driver,)) |
| 81 | |
| 82 | return url |
| 83 | |
| 84 | |
| 85 | @generate_driver_url.for_db("sqlite") |
no test coverage detected