Obtenga la ruta raíz de la aplicación Flask

Estoy trabajando en una extensión Flask desde la que quiero crear un directorio en la ruta raíz del proyecto en el sistema de archivos.

Supongamos que tenemos esta estructura de directorio

/project
    /app
    /tests
    /my_folder
    manage.py

my_folder debe ser creado dinámicamente por la extensión, que es una utilidad de prueba y envuelve la aplicación bajo prueba en el directorio / tests. Sin embargo, estoy luchando por determinar la ruta raíz del proyecto dentro de mi extensión.

Por ahora, estoy tratando de adivinar la ruta del archivo de ejecución:

def root_path(self):
    # Infer the root path from the run file in the project root (e.g. manage.py)
    fn = getattr(sys.modules['__main__'], '__file__')
    root_path = os.path.abspath(os.path.dirname(fn))
    return root_path

Obviamente, esto se rompe tan pronto como las pruebas se ejecutan desde el IDE en lugar de manage.py. Simplemente podría inferir la raíz del proyecto en relación con la aplicación o el directorio de pruebas, pero no quiero hacer ninguna suposición con respecto al nombre o la estructura de estos directorios (ya que varias aplicaciones pueden estar alojadas como subpaquetes en un solo paquete).

Me preguntaba si hay una mejor práctica para este tipo de problema o un método no documentado que proporciona el objeto Flask (como get_root_path).

Respuestas a la pregunta(2)

Su respuesta a la pregunta