/* * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #pragma once #include #include #include #include #include #include #include #include #include namespace O3DE::ProjectManager { //! Interface used to interact with the o3de cli python functions class IPythonBindings { public: AZ_RTTI(O3DE::ProjectManager::IPythonBindings, "{C2B72CA4-56A9-4601-A584-3B40E83AA17C}"); AZ_DISABLE_COPY_MOVE(IPythonBindings); IPythonBindings() = default; virtual ~IPythonBindings() = default; /** * Get whether Python was started or not. All Python functionality will fail if Python * failed to start. * @return true if Python was started successfully, false on failure */ virtual bool PythonStarted() = 0; // Engine /** * Get info about the engine * @return an outcome with EngineInfo on success */ virtual AZ::Outcome GetEngineInfo() = 0; /** * Set info about the engine * @param engineInfo an EngineInfo object */ virtual bool SetEngineInfo(const EngineInfo& engineInfo) = 0; // Gems /** * Get info about a Gem * @param path the absolute path to the Gem * @return an outcome with GemInfo on success */ virtual AZ::Outcome GetGemInfo(const QString& path, const QString& projectPath = {}) = 0; /** * Get all available gem infos. This concatenates gems registered by the engine and the project. * @param path The absolute path to the project. * @return A list of gem infos. */ virtual AZ::Outcome, AZStd::string> GetAllGemInfos(const QString& projectPath) = 0; /** * Get engine gem infos. * @return A list of all registered gem infos. */ virtual AZ::Outcome, AZStd::string> GetEngineGemInfos() = 0; /** * Get a list of all enabled gem names for a given project. * @param[in] projectPath Absolute file path to the project. * @return A list of gem names of all the enabled gems for a given project or a error message on failure. */ virtual AZ::Outcome, AZStd::string> GetEnabledGemNames(const QString& projectPath) = 0; // Projects /** * Create a project * @param projectTemplatePath the path to the project template to use * @param projectInfo the project info to use * @return an outcome with ProjectInfo on success */ virtual AZ::Outcome CreateProject(const QString& projectTemplatePath, const ProjectInfo& projectInfo) = 0; /** * Get info about a project * @param path the absolute path to the project * @return an outcome with ProjectInfo on success */ virtual AZ::Outcome GetProject(const QString& path) = 0; /** * Get info about all known projects * @return an outcome with ProjectInfos on success */ virtual AZ::Outcome> GetProjects() = 0; /** * Adds existing project on disk * @param path the absolute path to the project * @return true on success, false on failure */ virtual bool AddProject(const QString& path) = 0; /** * Adds existing project on disk * @param path the absolute path to the project * @return true on success, false on failure */ virtual bool RemoveProject(const QString& path) = 0; /** * Update a project * @param projectInfo the info to use to update the project * @return true on success, false on failure */ virtual AZ::Outcome UpdateProject(const ProjectInfo& projectInfo) = 0; /** * Add a gem to a project * @param gemPath the absolute path to the gem * @param projectPath the absolute path to the project * @return An outcome with the success flag as well as an error message in case of a failure. */ virtual AZ::Outcome AddGemToProject(const QString& gemPath, const QString& projectPath) = 0; /** * Remove gem to a project * @param gemPath the absolute path to the gem * @param projectPath the absolute path to the project * @return An outcome with the success flag as well as an error message in case of a failure. */ virtual AZ::Outcome RemoveGemFromProject(const QString& gemPath, const QString& projectPath) = 0; /** * Removes invalid projects from the manifest */ virtual bool RemoveInvalidProjects() = 0; // Project Templates /** * Get info about all known project templates * @return an outcome with ProjectTemplateInfos on success */ virtual AZ::Outcome> GetProjectTemplates(const QString& projectPath = {}) = 0; }; using PythonBindingsInterface = AZ::Interface; } // namespace O3DE::ProjectManager