Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
__init__.py259 linesDownload Raw Back to cloud
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8##########################################################################9 10"""Implements Cloud Deployment"""11 12import json13from flask import Response, url_for14from flask import render_template, request15from flask_babel import gettext16from flask_security import current_user17from pgadmin.user_login_check import pga_login_required18 19from pgadmin.utils import PgAdminModule, html20from pgadmin.utils.ajax import make_json_response,\21    internal_server_error, bad_request, success_return22 23from pgadmin.utils.constants import MIMETYPE_APP_JS24from pgadmin.model import db, Server, Process25from pgadmin.misc.cloud.utils import get_my_ip26 27from pgadmin.misc.cloud.biganimal import deploy_on_biganimal,\28    clear_biganimal_session29from pgadmin.misc.cloud.rds import deploy_on_rds, clear_aws_session30from pgadmin.misc.cloud.azure import deploy_on_azure, clear_azure_session31from pgadmin.misc.cloud.google import clear_google_session, deploy_on_google32import config33 34# set template path for sql scripts35MODULE_NAME = 'cloud'36 37 38class CloudModule(PgAdminModule):39    """40    class CloudModule():41 42        It is a wizard which inherits PgAdminModule43        class and define methods to load its own44        javascript file.45 46    """47 48    def get_exposed_url_endpoints(self):49        """50        Returns:51            list: URL endpoints for cloud module52        """53        return ['cloud.deploy_on_cloud',54                'cloud.update_cloud_server',55                'cloud.update_cloud_process',56                'cloud.get_host_ip',57                'cloud.clear_cloud_session']58 59    def register(self, app, options):60        """61        Override the default register function to automagically register62        sub-modules at once.63        """64        super().register(app, options)65 66        from .azure import blueprint as module67        app.register_blueprint(module)68 69        from .biganimal import blueprint as module70        app.register_blueprint(module)71 72        from .rds import blueprint as module73        app.register_blueprint(module)74 75        from .google import blueprint as module76        app.register_blueprint(module)77 78 79# Create blueprint for CloudModule class80blueprint = CloudModule(81    MODULE_NAME, __name__, static_url_path='/misc/cloud')82 83 84@blueprint.route("/")85@pga_login_required86def index():87    return bad_request(88        errormsg=gettext("This URL cannot be called directly.")89    )90 91 92@blueprint.route("/cloud.js")93@pga_login_required94def script():95    """render own javascript"""96    res = Response(response=render_template(97        "cloud/js/cloud.js", _=gettext),98        status=200,99        mimetype=MIMETYPE_APP_JS)100    return res101 102 103@blueprint.route('/clear_cloud_session/',104                 methods=['POST'], endpoint='clear_cloud_session')105@pga_login_required106def clear_session():107    """Get host IP Address"""108    clear_cloud_session()109    return make_json_response(success=1)110 111 112@blueprint.route('/get_host_ip/',113                 methods=['GET'], endpoint='get_host_ip')114@pga_login_required115def get_host_ip():116    """Get host IP Address"""117    ip = get_my_ip()118    return make_json_response(data=ip)119 120 121@blueprint.route(122    '/deploy', methods=['POST'], endpoint='deploy_on_cloud'123)124@pga_login_required125def deploy_on_cloud():126    """Deploy on Cloud."""127 128    data = json.loads(request.data)129    if data['cloud'] == 'aws':130        status, p, resp = deploy_on_rds(data)131    elif data['cloud'] == 'biganimal':132        status, p, resp = deploy_on_biganimal(data)133    elif data['cloud'] == 'azure':134        status, p, resp = deploy_on_azure(data)135    elif data['cloud'] == 'google':136        status, p, resp = deploy_on_google(data)137    else:138        status = False139        resp = gettext('No cloud implementation.')140 141    if not status:142        return make_json_response(143            status=410,144            success=0,145            errormsg=resp146        )147 148    # Return response149    return make_json_response(150        success=1,151        data={152            'job_id': p.id,153            'desc': p.desc.message,154            'node': {155                '_id': resp['sid'],156                '_pid': data['db_details']['gid'],157                'connected': False,158                '_type': 'server',159                'icon': 'icon-server-cloud-deploy',160                'id': 'server_{}'.format(resp['sid']),161                'inode': True,162                'label': resp['label'],163                'server_type': 'pg',164                'module': 'pgadmin.node.server',165                'cloud_status': -1166            }}167    )168 169 170def update_server(data):171    """Update Server."""172    server_data = data173    pid = data['instance']['pid']174    server = Server.query.filter_by(175        user_id=current_user.id,176        id=server_data['instance']['sid']177    ).first()178 179    if server is None:180        return False, gettext("Could not find the server.")181 182    if server_data['instance'] == '' or\183            not server_data['instance']['status']:184        db.session.delete(server)185    else:186        server.host = server_data['instance']['Hostname']187        server.port = server_data['instance']['Port']188        server.cloud_status = 1189 190    try:191        db.session.commit()192    except Exception as e:193        db.session.rollback()194        return False, e.message195 196    _server = {197        'id': server.id,198        'servergroup_id': server.servergroup_id,199        'name': server.name,200        'cloud_status': server.cloud_status201    }202    if not server_data['instance']['status']:203        _server['status'] = False204    else:205        _server['status'] = True206    clear_cloud_session(pid)207 208    return True, _server209 210 211def clear_cloud_session(pid=None):212    """Clear cloud sessions."""213    clear_aws_session()214    clear_biganimal_session()215    clear_azure_session(pid)216    clear_google_session()217 218 219@blueprint.route(220    '/update_cloud_process/<sid>', methods=['GET'],221    endpoint='update_cloud_process'222)223@pga_login_required224def update_cloud_process(sid):225    """Update Cloud Server Process"""226    _process = Process.query.filter_by(user_id=current_user.id,227                                       server_id=sid).first()228    _process.acknowledge = None229    db.session.commit()230    return success_return()231 232 233@blueprint.route(234    '/update_cloud_server', methods=['POST'],235    endpoint='update_cloud_server'236)237@pga_login_required238def update_cloud_server():239    """Update Cloud Server."""240    server_data = json.loads(request.data)241    status, server = update_server(server_data)242 243    if not status:244        return make_json_response(245            status=410, success=0, errormsg=server246        )247 248    return make_json_response(249        success=1,250        data={'node': {251            'sid': server.id,252            'gid': server.servergroup_id,253            '_type': 'server',254            'icon': 'icon-server-not-connected',255            'id': 'server_{}'.format(server.id),256            'label': server.name257        }}258    )259 
codekingpro/portable-devtools · Team Ai