Exemplo n.º 1
0
def perform_search(docker, image_store, requester, keyword, tty_mode):
    username = requester.get_username()
    if not username:
        return None  # client already disconnected, give up
    if keyword:

        def validate(image_name, user, location):
            return keyword in clonable_link(location, user, image_name)
    else:
        validate = None
    # search
    search = Search(docker, image_store, requester, validate)
    it = search.search()
    it = discard_images_in_ws(it, username)
    it = format_result(it)

    found = False
    if tty_mode:
        # allow escape-codes to reprint lines, if a new row has columns
        # with a size larger than previous ones.
        for s in columnate_iterate_tty(it, SEARCH_HEADER):
            found = True
            requester.stdout.write(s)
    else:
        # wait for all results to be available, in order to compute
        # the appropriate column formatting.
        s = columnate(it, SEARCH_HEADER)
        if len(s) > 0:
            found = True
            requester.stdout.write(s + '\n')
    if not found:
        requester.stderr.write(MSG_SEARCH_NO_MATCH)
Exemplo n.º 2
0
def perform_search(docker, image_store, requester, keyword, tty_mode):
    username = requester.get_username()
    if not username:
        return None    # client already disconnected, give up
    if keyword:
        def validate(image_name, user, location):
            return keyword in clonable_link(location, user, image_name)
    else:
        validate = None
    # search
    search = Search(docker, image_store, requester, validate)
    it = search.search()
    it = discard_images_in_ws(it, username)
    it = format_result(it)

    found = False
    if tty_mode:
        # allow escape-codes to reprint lines, if a new row has columns
        # with a size larger than previous ones.
        for s in columnate_iterate_tty(it, SEARCH_HEADER):
            found = True
            requester.stdout.write(s)
    else:
        # wait for all results to be available, in order to compute
        # the appropriate column formatting.
        s = columnate(it, SEARCH_HEADER)
        if len(s) > 0:
            found = True
            requester.stdout.write(s + '\n')
    if not found:
        requester.stderr.write(MSG_SEARCH_NO_MATCH)
Exemplo n.º 3
0
def show(db, docker, images, requester, refresh):
    username = requester.get_username()
    if not username:
        return None  # client already disconnected, give up
    if refresh:
        images.refresh()
    tabular_data = []
    for image in images.values():
        if image.user != username:
            continue
        created_at = image.created_at
        node_models = image.get_node_models()
        tabular_data.append([
            image.name,
            str(image.in_use), created_at if created_at else 'N/A',
            str(image.ready),
            format_node_models_list(node_models) if node_models else 'N/A'
        ])
    if len(tabular_data) == 0:
        # new user, try to make his life easier by cloning
        # default images of node models present on the platform.
        node_models = set(n.model for n in db.select('nodes'))
        if len(node_models) == 0:  # no nodes
            return MSG_WS_IS_EMPTY
        requester.set_busy_label('Cloning default images')
        for model in node_models:
            default_image = images.get_default_image_fullname(model)
            ws_image = username + '/' + default_image.split('/')[1]
            docker.local.tag(default_image, ws_image)
            images.register_image(ws_image, True)
        requester.set_default_busy_label()
        # restart the process
        return show(db, docker, images, requester, refresh)
    header = ['Name', 'In-use', 'Created', 'Ready', 'Compatibility']
    return columnate(tabular_data, header)
Exemplo n.º 4
0
def show(db, docker, images, requester, refresh):
    username = requester.get_username()
    if not username:
        return None     # client already disconnected, give up
    if refresh:
        images.refresh()
    tabular_data = []
    for image in images.itervalues():
        if image.user != username:
            continue
        created_at = image.get_created_at()
        node_models = image.get_node_models()
        tabular_data.append([
                    image.name,
                    str(image.mounted),
                    created_at if created_at else 'N/A',
                    str(image.ready),
                    format_node_models_list(node_models)])
    if len(tabular_data) == 0:
        # new user, try to make his life easier by cloning
        # default images of node models present on the platform.
        node_models = set(n.model for n in db.select('nodes'))
        if len(node_models) == 0:   # no nodes
            return MSG_WS_IS_EMPTY
        requester.stdout.write('Cloning default images... ')
        requester.stdout.flush()
        for model in node_models:
            default_image = images.get_default_image_fullname(model)
            ws_image = username + '/' + default_image.split('/')[1]
            docker.local.tag(default_image, ws_image)
            images.register_image(ws_image, True)
        requester.stdout.write('Done.\n')
        # restart the process
        return show(db, docker, images, requester, refresh)
    header = [ 'Name', 'Mounted', 'Created', 'Ready', 'Compatibility' ]
    return columnate(tabular_data, header)
Exemplo n.º 5
0
def show(db, username, show_all):
    res_user, res_free, res_other, res_not_ready = [], [], [], []
    res = db.execute(NODE_SHOW_QUERY)
    for record in res:
        if not record.image_ready:
            res_not_ready.append(record)
        else:
            if record.image_owner == username:
                res_user.append(record)
            elif record.image_owner == 'waltplatform':
                res_free.append(record)
            else:
                res_other.append(record)
    result_msg = ''
    if len(res_user) == 0 and not show_all:
        return MSG_USING_NO_NODES + '\n' + MSG_RERUN_WITH_ALL
    if len(res_user) > 0:
        # display nodes of requester
        footnote = None
        if not show_all:
            footnote = MSG_RERUN_WITH_ALL
        table = [(record.name, record.model,
                  short_image_name(record.image_name), record.ip,
                  NetSetup(record.netsetup).readable_string(), record.booted)
                 for record in res_user]
        header = ['name', 'model', 'image', 'ip', 'netsetup', 'booted']
        result_msg += format_paragraph(TITLE_NODE_SHOW_USER_NODES_PART,
                                       columnate(table, header=header),
                                       footnote)
    if not show_all:
        return result_msg
    if len(res_free) > 0:
        # display free nodes
        footnote = None
        table = [(record.name, record.model, record.ip,
                  NetSetup(record.netsetup).readable_string(), record.booted)
                 for record in res_free]
        header = ['name', 'model', 'ip', 'netsetup', 'booted']
        result_msg += format_paragraph(TITLE_NODE_SHOW_FREE_NODES_PART,
                                       columnate(table, header=header),
                                       footnote)
    if len(res_other) + len(res_user) + len(res_free) + len(
            res_not_ready) == 0:
        return MSG_NO_NODES + '\n'
    if len(res_free) + len(res_other) + len(res_not_ready) == 0:
        result_msg += MSG_NO_OTHER_NODES + '\n'
    else:
        if len(res_other) > 0:
            # display nodes of other users
            table = [(record.name, record.model, record.image_owner,
                      'server:%s/%s' % \
                        (record.image_owner, short_image_name(record.image_name)),
                      record.ip, NetSetup(record.netsetup).readable_string(),
                      record.booted)
                     for record in res_other]
            header = [
                'name', 'model', 'image_owner', 'clonable_image_link', 'ip',
                'netsetup', 'booted'
            ]
            result_msg += format_paragraph(TITLE_NODE_SHOW_OTHER_NODES_PART,
                                           columnate(table, header=header))
        if len(res_not_ready) > 0:
            # display nodes whose image is currently being downloaded
            table = [(record.name, record.model, record.ip,
                      NetSetup(record.netsetup).readable_string())
                     for record in res_not_ready]
            header = ['name', 'model', 'ip', 'netsetup']
            result_msg += format_paragraph(
                TITLE_NODE_SHOW_NOT_READY_NODES_PART,
                columnate(table, header=header))
    return result_msg
Exemplo n.º 6
0
def show(db, username, show_all):
    res_user, res_free, res_other, res_not_ready = [], [], [], []
    res = db.execute(NODE_SHOW_QUERY)
    for record in res:
        if not record.image_ready:
            res_not_ready.append(record)
        else:
            if record.image_owner == username:
                res_user.append(record)
            elif record.image_owner == 'waltplatform':
                res_free.append(record)
            else:
                res_other.append(record)
    result_msg = ''
    if len(res_user) == 0 and not show_all:
        return MSG_USING_NO_NODES + '\n' + MSG_RERUN_WITH_ALL
    if len(res_user) > 0:
        # display nodes of requester
        footnote = None
        if not show_all:
            footnote = MSG_RERUN_WITH_ALL
        table = [(record.name, record.model,
                  short_image_name(record.image_name), record.ip,
                  NetSetup(record.netsetup).readable_string(), record.booted)
                 for record in res_user]
        header = ['name', 'model', 'image', 'ip', 'netsetup', 'booted']
        result_msg += format_paragraph(
                        TITLE_NODE_SHOW_USER_NODES_PART,
                        columnate(table, header=header),
                        footnote)
    if not show_all:
        return result_msg
    if len(res_free) > 0:
        # display free nodes
        footnote = None
        table = [(record.name, record.model, record.ip,
                  NetSetup(record.netsetup).readable_string(), record.booted)
                 for record in res_free]
        header = ['name', 'model', 'ip', 'netsetup', 'booted']
        result_msg += format_paragraph(
                        TITLE_NODE_SHOW_FREE_NODES_PART,
                        columnate(table, header=header),
                        footnote)
    if len(res_other) + len(res_user) + len(res_free) + len(res_not_ready) == 0:
        return MSG_NO_NODES + '\n'
    if len(res_free) + len(res_other) + len(res_not_ready) == 0:
        result_msg += MSG_NO_OTHER_NODES + '\n'
    else:
        if len(res_other) > 0:
            # display nodes of other users
            table = [(record.name, record.model, record.image_owner,
                      'server:%s/%s' % \
                        (record.image_owner, short_image_name(record.image_name)),
                      record.ip, NetSetup(record.netsetup).readable_string(),
                      record.booted)
                     for record in res_other]
            header = ['name', 'model', 'image_owner', 'clonable_image_link', 'ip', 'netsetup', 'booted']
            result_msg += format_paragraph(
                        TITLE_NODE_SHOW_OTHER_NODES_PART,
                        columnate(table, header=header))
        if len(res_not_ready) > 0:
            # display nodes whose image is currently being downloaded
            table = [(record.name, record.model, record.ip,
                      NetSetup(record.netsetup).readable_string())
                     for record in res_not_ready]
            header = ['name', 'model', 'ip', 'netsetup']
            result_msg += format_paragraph(
                        TITLE_NODE_SHOW_NOT_READY_NODES_PART,
                        columnate(table, header=header))
    return result_msg
Exemplo n.º 7
0
 def pretty_printed_resultset(self, res):
     if len(res) == 0:
         raise Exception(
             'pretty_printed_resultset() does not work if resultset is empty!'
         )
     return columnate(res, header=res[0]._fields)
Exemplo n.º 8
0
 def pretty_printed_select(self, *args):
     self.execute(*args)
     col_names = [col_desc[0] for col_desc in self.c.description]
     return columnate(self.c.fetchall(), header=col_names)
Exemplo n.º 9
0
def generate_table(title, footnote, records, *col_titles):
    table = [ tuple(get_table_value(record, col_title) for col_title in col_titles) \
              for record in records ]
    header = list(col_titles)
    return format_paragraph(title, columnate(table, header=header), footnote)