Esempio n. 1
0
    async def switch_commit(self, commit):

        sources = self.application.sources
        builds = self.application.builds

        try:
            project_settings = await sources.get_server_project(self.gamespace)
        except NoSuchProjectError as e:
            raise a.Redirect("server_settings",
                             message="Please define project settings first")

        try:
            project = builds.get_server_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            raise a.ActionError("Repository has not updated itself yet.")

        try:
            commit_exists = await project.check_commit(commit)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if not commit_exists:
            raise a.ActionError("No such commit")

        try:
            await sources.update_server_commit(self.gamespace, commit)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        raise a.Redirect("server",
                         message="Server code commit has been updated")
Esempio n. 2
0
    async def detach_version(self):

        app_id = self.context.get("app_id")
        app_version = self.context.get("app_version")

        environment_client = EnvironmentClient(self.application.cache)
        sources = self.application.sources
        builds = self.application.builds

        try:
            await environment_client.get_app_info(app_id)
        except AppNotFound:
            raise a.ActionError("App was not found.")

        try:
            deleted = await sources.delete_commit(self.gamespace, app_id,
                                                  app_version)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if deleted:
            raise a.Redirect("app_version",
                             message="Version has been disabled",
                             app_id=app_id,
                             app_version=app_version)

        raise a.Redirect("app_version",
                         message="Version was already disabled",
                         app_id=app_id,
                         app_version=app_version)
Esempio n. 3
0
    async def pull_updates(self):

        sources = self.application.sources
        builds = self.application.builds

        try:
            project_settings = await sources.get_server_project(self.gamespace)
        except NoSuchProjectError:
            raise a.Redirect("server_settings",
                             message="Please define project settings first")

        try:
            project = builds.get_server_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            raise a.ActionError("Repository has not updated itself yet.")

        try:
            pulled = await project.pull()
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if not pulled:
            raise a.ActionError("Failed to pull updates")

        raise a.Redirect("server", message="Updates has been pulled.")
Esempio n. 4
0
    async def switch_to_latest_commit(self):

        app_id = self.context.get("app_id")
        app_version = self.context.get("app_version")

        environment_client = EnvironmentClient(self.application.cache)
        sources = self.application.sources
        builds = self.application.builds

        try:
            await environment_client.get_app_info(app_id)
        except AppNotFound:
            raise a.ActionError("App was not found.")

        try:
            project_settings = await sources.get_project(
                self.gamespace, app_id)
        except NoSuchProjectError as e:
            raise a.Redirect("app_settings",
                             message="Please define project settings first",
                             app_id=app_id)

        try:
            project = builds.get_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            raise a.ActionError("Repository has not updated itself yet.")

        try:
            latest_commit = await project.pull_and_get_latest_commit()
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if not latest_commit:
            raise a.ActionError("Failed to check the latest commit")

        try:
            updated = await sources.update_commit(self.gamespace, app_id,
                                                  app_version, latest_commit)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if updated:
            raise a.Redirect("app_version",
                             message="Version has been updated",
                             app_id=app_id,
                             app_version=app_version)

        raise a.Redirect("app_version",
                         message="Already up-to-date.",
                         app_id=app_id,
                         app_version=app_version)
Esempio n. 5
0
    async def detach_version(self):

        sources = self.application.sources

        try:
            deleted = await sources.delete_server_commit(self.gamespace)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if deleted:
            raise a.Redirect("server", message="Server code has been disabled")

        raise a.Redirect("server", message="Server code was already disabled")
Esempio n. 6
0
    async def update_settings(self, repository_url, repository_branch,
                              ssh_private_key, *ignored):

        app_id = self.context.get("app_id")

        environment_client = EnvironmentClient(self.application.cache)
        sources = self.application.sources
        builds = self.application.builds

        try:
            await environment_client.get_app_info(app_id)
        except AppNotFound as e:
            raise a.ActionError("App was not found.")

        if not (await builds.validate_repository_url(repository_url,
                                                     ssh_private_key)):
            raise a.ActionError(
                "Error: \"{0}\" is not a valid Git repository URL, or "
                "the repository does not exist, or the ssh key is wrong.".
                format(repository_url))

        await sources.update_project(self.gamespace, app_id, repository_url,
                                     repository_branch, ssh_private_key)
        raise a.Redirect("app_settings",
                         message="Application settings have been updated.",
                         app_id=app_id)
Esempio n. 7
0
    async def clear_filters(self, **args):

        app_name = self.context.get("app_name")
        app_version = self.context.get("app_version")

        raise a.Redirect("app_version",
                         app_name=app_name,
                         app_version=app_version)
Esempio n. 8
0
    async def delete(self):
        blog_id = self.context.get("blog_id")

        try:
            await self.application.blogs.delete_blog(self.gamespace, blog_id)
        except BlogError:
            raise a.ActionError("Failed to delete blog")

        raise a.Redirect("index", message="Blog has been deleted")
Esempio n. 9
0
    async def pull_updates(self):

        app_id = self.context.get("app_id")
        app_version = self.context.get("app_version")

        environment_client = EnvironmentClient(self.application.cache)
        sources = self.application.sources
        builds = self.application.builds

        try:
            await environment_client.get_app_info(app_id)
        except AppNotFound:
            raise a.ActionError("App was not found.")

        try:
            project_settings = await sources.get_project(
                self.gamespace, app_id)
        except NoSuchProjectError as e:
            raise a.Redirect("app_settings",
                             message="Please define project settings first",
                             app_id=app_id)

        try:
            project = builds.get_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            raise a.ActionError("Repository has not updated itself yet.")

        try:
            pulled = await project.pull()
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if not pulled:
            raise a.ActionError("Failed to pull updates")

        raise a.Redirect("app_version",
                         message="Updates has been pulled.",
                         app_id=app_id,
                         app_version=app_version)
Esempio n. 10
0
    async def create(self, name, schema, enabled):
        try:
            blog_id = await self.application.blogs.create_blog(
                self.gamespace, name, schema, enabled)
        except BlogError as e:
            raise a.ActionError(e.args[0])

        raise a.Redirect("blog",
                         message="New blog has been created",
                         blog_id=blog_id)
Esempio n. 11
0
    async def create(self, data, enabled=False, **ignored):
        blog_id = self.context.get("blog_id")
        try:
            entry_id = await self.application.blogs.create_blog_entry(
                self.gamespace, blog_id, data, enabled)
        except BlogError as e:
            raise a.ActionError(e.args[0])

        raise a.Redirect("blog",
                         message="New blog entry has been created",
                         blog_id=blog_id)
Esempio n. 12
0
    async def update(self, name, schema, enabled=False, **ignored):
        blog_id = self.context.get("blog_id")

        try:
            await self.application.blogs.update_blog(self.gamespace, blog_id,
                                                     name, schema, enabled)
        except BlogError:
            raise a.ActionError("Failed to update blog")

        raise a.Redirect("blog_settings",
                         message="Blog has been updated",
                         blog_id=blog_id)
Esempio n. 13
0
    async def get(self, app_id, app_version):

        environment_client = EnvironmentClient(self.application.cache)
        sources = self.application.sources
        builds = self.application.builds

        try:
            app = await environment_client.get_app_info(app_id)
        except AppNotFound:
            raise a.ActionError("App was not found.")

        try:
            project_settings = await sources.get_project(
                self.gamespace, app_id)
        except NoSuchProjectError as e:
            raise a.Redirect("app_settings",
                             message="Please define project settings first",
                             app_id=app_id)

        try:
            commit = await sources.get_version_commit(self.gamespace, app_id,
                                                      app_version)
        except NoSuchSourceError:
            current_commit = None
        else:
            current_commit = commit.repository_commit

        try:
            project = builds.get_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError as e:
            commits_history = None
        else:
            try:
                commits_history = await project.get_commits_history(50)
            except SourceCodeError as e:
                raise a.ActionError(e.message)

        result = {
            "app_id": app_id,
            "app_record_id": app.id,
            "app_name": app.title,
            "versions": app.versions,
            "current_commit": current_commit,
            "commits_history": commits_history
        }

        return result
Esempio n. 14
0
    async def switch_to_latest_commit(self):

        sources = self.application.sources
        builds = self.application.builds

        try:
            project_settings = await sources.get_server_project(self.gamespace)
        except NoSuchProjectError:
            raise a.Redirect("server_settings",
                             message="Please define project settings first")

        try:
            project = builds.get_server_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            raise a.ActionError("Repository has not updated itself yet.")

        try:
            latest_commit = await project.pull_and_get_latest_commit()
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if not latest_commit:
            raise a.ActionError("Failed to check the latest commit")

        try:
            updated = await sources.update_server_commit(
                self.gamespace, latest_commit)
        except SourceCodeError as e:
            raise a.ActionError(e.message)

        if updated:
            raise a.Redirect("server", message="Server Code has been updated")

        raise a.Redirect("server", message="Already up-to-date.")
Esempio n. 15
0
    async def filter(self, **args):

        app_name = self.context.get("app_name")
        app_version = self.context.get("app_version")

        page = self.context.get("page", 1)

        filters = {
            "app_name": app_name,
            "app_version": app_version,
            "page": page
        }

        filters.update(args)
        raise a.Redirect("app_version", **filters)
Esempio n. 16
0
    async def get(self):

        sources = self.application.sources
        builds = self.application.builds

        try:
            project_settings = await sources.get_server_project(self.gamespace)
        except NoSuchProjectError:
            raise a.Redirect("server_settings",
                             message="Please define project settings first")

        try:
            commit = await sources.get_server_commit(self.gamespace)
        except NoSuchSourceError:
            current_commit = None
        else:
            current_commit = commit.repository_commit

        server_fetch_error = None

        try:
            project = builds.get_server_project(project_settings)
            await with_timeout(timedelta(seconds=10), project.init())

        except JavascriptBuildError as e:
            raise a.ActionError(e.message)
        except TimeoutError:
            commits_history = None
        except SourceCodeError as e:
            commits_history = None
            server_fetch_error = str(e.message)
        except Exception as e:
            commits_history = None
            server_fetch_error = str(e)
        else:
            try:
                commits_history = await project.get_commits_history(50)
            except SourceCodeError as e:
                raise a.ActionError(e.message)

        result = {
            "current_commit": current_commit,
            "commits_history": commits_history,
            "server_fetch_error": server_fetch_error,
        }

        return result
Esempio n. 17
0
    async def update_settings(self, repository_url, repository_branch,
                              ssh_private_key, *ignored):

        sources = self.application.sources
        builds = self.application.builds

        if not (await builds.validate_repository_url(repository_url,
                                                     ssh_private_key)):
            raise a.ActionError(
                "Error: \"{0}\" is not a valid Git repository URL, or "
                "the repository does not exist, or the ssh key is wrong.".
                format(repository_url))

        await sources.update_server_project(self.gamespace, repository_url,
                                            repository_branch, ssh_private_key)

        raise a.Redirect("server",
                         message="Server Code settings have been updated.")
Esempio n. 18
0
    async def update(self, data, enabled=False, **ignored):
        blog_id = self.context.get("blog_id")
        entry_id = self.context.get("entry_id")

        try:
            await self.application.blogs.get_blog(self.gamespace, blog_id)
        except BlogNotFound:
            raise a.ActionError("No such blog")

        try:
            await self.application.blogs.update_blog_entry(
                self.gamespace, blog_id, entry_id, data, enabled)
        except BlogError as e:
            raise a.ActionError(e.args[0])

        raise a.Redirect("blog",
                         message="Blog entry has been updated",
                         blog_id=blog_id)
Esempio n. 19
0
    async def update_deployment_method(self, deployment_method):

        if not DeploymentMethods.valid(deployment_method):
            raise a.ActionError("Not a valid deployment method")

        try:
            stt = await self.application.deployment_settings.get_settings(self.gamespace)
        except NoSuchSettingsError:
            deployment_data = {}
        else:
            deployment_data = stt.deployment_data

        try:
            await self.application.deployment_settings.update_settings(
                self.gamespace, deployment_method, deployment_data)
        except SettingsError as e:
            raise a.ActionError(e.message)

        raise a.Redirect("settings", message="Deployment method has been updated")
Esempio n. 20
0
    async def update_deployment(self, **kwargs):

        try:
            settings = await self.application.deployment_settings.get_settings(self.gamespace)
        except NoSuchSettingsError:
            raise a.ActionError("Please select deployment method first")
        except SettingsError as e:
            raise a.ActionError(e.message)
        else:
            deployment_method = settings.deployment_method
            deployment_data = settings.deployment_data

        m = DeploymentMethods.get(deployment_method)()

        m.load(deployment_data)
        await m.update(**kwargs)

        try:
            await self.application.deployment_settings.update_settings(
                self.gamespace, deployment_method, m.dump())
        except SettingsError as e:
            raise a.ActionError(e.message)

        raise a.Redirect("settings", message="Deployment settings have been updated")