12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python
- from __future__ import annotations
- from sentry.runner import configure
- configure()
- import click
- from sentry.backup.dependencies import (
- DependenciesJSONEncoder,
- dependencies,
- get_model_name,
- sorted_dependencies,
- )
- from sentry.testutils.factories import get_fixture_path # noqa
- encoder = DependenciesJSONEncoder(
- sort_keys=True,
- ensure_ascii=True,
- check_circular=True,
- allow_nan=True,
- indent=2,
- encoding="utf-8",
- )
- @click.command()
- def main():
- """Used for generating fixtures for the model dependency map."""
- click.echo("\nThis script can take up to 30 seconds, please be patient...\n")
- # Do all of the calculation before any file writes, so that we don't end up with partial
- # overwrites.
- detailed = {str(k): v for k, v in dependencies().items()}
- flat = {k: v.flatten() for k, v in detailed.items()}
- sorted = sorted_dependencies()
- truncate = [dependencies()[get_model_name(m)].table_name for m in sorted_dependencies()]
- det_path = get_fixture_path("backup", "model_dependencies", "detailed.json")
- with open(det_path, "w+") as fixture:
- fixture.write(encoder.encode(detailed))
- flat_path = get_fixture_path("backup", "model_dependencies", "flat.json")
- with open(flat_path, "w+") as fixture:
- fixture.write(encoder.encode(flat))
- det_path = get_fixture_path("backup", "model_dependencies", "sorted.json")
- with open(det_path, "w+") as fixture:
- fixture.write(encoder.encode(sorted))
- # Print tables in the order one would need to list them for a TRUNCATE statement.
- det_path = get_fixture_path("backup", "model_dependencies", "truncate.json")
- with open(det_path, "w+") as fixture:
- fixture.write(encoder.encode(truncate))
- click.echo(
- f"\nSuccess! The dependency mapping fixtures at {[det_path, flat_path]} were updated.\n"
- )
- if __name__ == "__main__":
- main()
|