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")
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)
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.")
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)
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")
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)
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)
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")
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)
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)
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)
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)
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
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.")
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)
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
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.")
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)
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")
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")