def test_using_lambda(self):
     payload = {"params": ['sow', 'default']}
     self.lambda_name = 'osbot_browser.lambdas.lambda_browser'
     self.lambda_browser = Lambda(self.lambda_name)
     self.result = self.lambda_browser.invoke(payload)
 def setUp(self):
     self.simple_test = Lambda('api_gateway.simple_test')
    def expand(team_id=None,
               channel=None,
               params=None,
               data=None,
               only_create=False,
               save_graph=True):

        if len(params) < 3:
            text = ':red_circle: Hi, for the `expand` command, you need to provide the following parameters: '
            attachment_text =  '- *graph_name*: the graph to expand\n'  \
                               '- *depth* : how many cycles to expand\n'  \
                               '- *links to expand*: as a comma-delimited list '
            slack_message(text, [{'text': attachment_text}], channel, team_id)
            return
        create_params = ["expand"] + list(
            params
        )  # create copy of array so that we don't lose data with the pops below
        graph_or_key = params.pop(0)
        depth = int(params.pop(0))
        link_types_to_add = ' '.join(params).split(',')

        graph = Lambda_Graph().get_gs_graph___by_name(graph_or_key)
        if graph is None:
            graph = GS_Graph()  # if it wasn't a graph
            graph.add_node(graph_or_key)  # use it as key

        (graph.set_puml_link_types_to_add(
            link_types_to_add).add_all_linked_issues(
                [], depth).set_create_params(create_params))
        if save_graph:
            new_graph_name = graph.reset_puml().render_and_save_to_elk()
        else:
            return graph

        if only_create:
            return graph, new_graph_name, graph_or_key, depth, link_types_to_add

        if channel:  # if the channel value is provided render the new graph and send it to slack, if not, just return the new graph data
            text = "Rendering new graph called `{0}`,\n Which was created by expanding the graph/key `{1}` with depth `{2}`, for link types `{3}` (`{4}` nodes, `{5}` edges)"\
                        .format(new_graph_name, graph_or_key, depth, link_types_to_add,
                                len(graph.nodes), len(graph.edges))
            slack_message(text, [], channel, team_id)

            Lambda('gw_bot.lambdas.puml_to_slack').invoke({
                "puml":
                graph.get_puml(),
                "channel":
                channel,
                "team_id":
                team_id
            })
        else:
            data = {
                "graph_or_key": graph_or_key,
                "depth": depth,
                "nodes": graph.nodes,
                "edges": graph.edges,
                "puml": graph.puml.puml,
                "graph_name": new_graph_name
            }
            return json.dumps(data, indent=4)
Exemple #4
0
def mindmap(graph_name):
    print('creating mindmap graph for: {0}'.format(graph_name))
    payload = {"params": ['go_js', graph_name, 'mindmap']}
    png_data = Lambda('osbot_browser.lambdas.lambda_browser').invoke(payload)
    show_png(png_data)
Exemple #5
0
 def callback_jira_dialog_action(self, data):
     return Lambda('gs.jira_dialog').invoke({
         "type": "jira_dialog_action",
         "data": data
     })
 def test_exec__via_lambda_version(self):
     payload = {'params': ['version']}
     self.result = Lambda('osbot_jupyter.lambdas.jupyter_web').invoke(
         payload)
Exemple #7
0
 def puml_to_slack(self, puml):
     payload = {"puml": puml, "channel": self.channel}
     return Lambda('utils.puml_to_slack').invoke(payload)
Exemple #8
0
 def setUp(self):
     self.lambda_name = 'osbot.lambdas.slack_callback'
     self.aws_lambda = Lambda(self.lambda_name)
     self.response = None
Exemple #9
0
 def setUp(self):
     super().setUp()
     self.png_data = None
     self.result = None
     self.aws_lambda = Lambda('osbot_browser.lambdas.jira_web')
Exemple #10
0
 def test__update_lambda(self):
     Lambda('gsbot.gsbot_slack').update()
Exemple #11
0
def search(query, columns=None):
    params = {'params': ['search'] + query.split(' ')}
    results = Lambda("osbot_jira.lambdas.elk_to_slack").invoke(
        params)  #{'params': ['search', 'people', 'd*']})
    return data_frame(results, columns)
Exemple #12
0
def screenshot(url):
    print('taking screenshot of: {0}'.format(url))
    payload = {"params": ['screenshot', url]}
    png_data = Lambda('osbot_browser.lambdas.lambda_browser').invoke(payload)
    show_png(png_data)
Exemple #13
0
def viva_graph(graph_name):
    print('creating viva graph for: {0}'.format(graph_name))
    payload = {"params": ['viva_graph', graph_name, 'default']}
    png_data = Lambda('osbot_browser.lambdas.lambda_browser').invoke(payload)
    show_png(png_data)
Exemple #14
0
def send_png_to_slack(png_data, channel, team_id):
    Lambda('gw_bot.lambdas.png_to_slack').invoke({
        'png_data': png_data,
        'team_id': team_id,
        'channel': channel
    })
Exemple #15
0
 def dot_to_slack(self, dot):
     payload = {"dot": dot, "channel": self.channel}
     return Lambda('utils.dot_to_slack').invoke(payload)
Exemple #16
0
def graph_render(graph, height=200):
    puml = graph.render_puml().puml
    png_data = Lambda('gw_bot.lambdas.puml_to_png').invoke({
        "puml": puml
    }).get('png_base64')
    show_png(png_data, height)
 def setUp(self):
     self.simple_test = Lambda('api_gateway.trigger_sync_jira_sheets')
 def setUp(self):
     super().setUp()
     self.jira_issues = Lambda('osbot_jira.lambdas.elk_to_slack')
Exemple #19
0
 def test_via_lambda_execution__version(self):
     self.test_update_lambda()
     aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
     payload = {"params": ["maps", "version"], 'data': {}}
     self.result = aws_lambda.invoke(payload)
Exemple #20
0
 def callback_button_dialog_test(self, data):
     return Lambda('gs.jira_dialog').invoke({
         "type": "button_dialog_test",
         "data": data
     })
Exemple #21
0
    def cmd_links(self,
                  params,
                  team_id=None,
                  channel=None,
                  user=None,
                  only_create=False,
                  save_graph=True):

        if len(params) < 2:
            text = ':point_right: Hi, here are the valid parameters for the `jira links` command: ' \
                   '\n\t\t - `jira key` '                                                           \
                   '\n\t\t - `depth` (default to 1)'                                                \
                   '\n\t\t - `view engine`: viva_graph (default), or plantuml'                      \
                   '\n\t\t - `width` (of graph)'                                                    \
                   '\n\t\t - `delay` (before screenshot)'
            return {"text": text, "attachments": []}

        target = array_get(params, 1)
        depth = to_int(array_get(params, 2), 1)  # default to depth 1
        view_engine = array_get(params, 3, 'viva_graph')
        width = to_int(array_get(params, 4), None)
        delay = to_int(array_get(params, 5), None)

        if depth > 5:
            text = f':red_circle: sorry depths bigger than 5 are not supported (since 5 will already give you the only graph)'
            return {"text": text, "attachments": []}

        #direction = 'all'       # change behaviour to only show all

        graph = Lambda_Graph().graph_links(target, depth)
        if graph is None:
            text = f':red_circle: graph not created for target `{target}`'
            return {"text": text, "attachments": []}

        if len(graph.edges) == 0:
            text = f':red_circle: no graph created from `{target}` (please double check that the issue ID exists)'
            return {"text": text, "attachments": []}

        graph_type = f"{target}___depth_{depth}"

        if save_graph is False:
            return graph

        graph_name = graph.render_and_save_to_elk(None, graph_type, channel,
                                                  user)

        if only_create:
            return graph, graph_name, depth, target

        if channel:
            message = f':point_right: Created graph with *name* `{graph_name}` *from* `{target}` *depth* `{depth}`'
            slack_message(message, [], channel)

            if view_engine == 'plantuml':
                params = ['show', graph_name, view_engine]
                Lambda('osbot_jira.lambdas.graph').invoke_async({
                    "params": params,
                    'data': {
                        'team_id': team_id,
                        'channel': channel
                    }
                })
            else:
                params = [view_engine, graph_name, 'default', width, delay]
                Lambda('osbot_browser.lambdas.lambda_browser').invoke_async({
                    "params":
                    params,
                    'data': {
                        'team_id': team_id,
                        'channel': channel
                    }
                })
        else:
            return graph, graph_name, depth, target
    def show(team_id, channel, params, data=None):

        if len(params) < 1:
            text = ':red_circle: Hi, for the `show` command, you need to provide an `graph_name`'
            slack_message(text, [], channel, team_id)
            return

        graph_name = Misc.array_pop(params, 0)
        graph = Lambda_Graph().get_gs_graph___by_name(graph_name)
        if graph is None:
            text = ':red_circle: Graph with name `{0}` not found'.format(
                graph_name)
            slack_message(text, [], channel, team_id)
        else:
            default_engine = 'viva_graph'
            engines = Misc.array_pop(params, 0)
            if engines is None: engines = default_engine

            if engines != default_engine:  # only show in case there is more than one engine
                text = f":point_right: Showing graph with name `{graph_name}`, with `{len(graph.nodes)}` nodes and `{len(graph.edges)}` edges)"
                slack_message(text, [], channel, team_id)

            if 'plantuml' in engines:
                slack_message('...using `plantuml`', [], channel, team_id)
                Lambda('gw_bot.lambdas.puml_to_slack').invoke_async({
                    "puml":
                    graph.get_puml(),
                    "channel":
                    channel,
                    "team_id":
                    team_id
                })

            if 'vis_js' in engines:
                slack_message('...using `vis_js`', [], channel, team_id)
                params = ['graph', graph_name, 'default']
                Lambda('osbot_browser.lambdas.lambda_browser').invoke_async({
                    "params":
                    params,
                    'data': {
                        'team_id': team_id,
                        'channel': channel
                    }
                })

            if 'viva_graph' in engines:
                if engines != default_engine:  # only show in case there is more than one engine
                    slack_message('...using `viva_graph`', [], channel,
                                  team_id)
                params = ['viva_graph', graph_name, 'default']
                Lambda('osbot_browser.lambdas.lambda_browser').invoke_async({
                    "params":
                    params,
                    'data': {
                        'team_id': team_id,
                        'channel': channel
                    }
                })

            if 'go_js' in engines:
                slack_message('...using `go_js`', [], channel, team_id)
                params = ['go_js', graph_name, 'circular']
                Lambda('osbot_browser.lambdas.lambda_browser').invoke_async({
                    "params":
                    params,
                    'data': {
                        'team_id': team_id,
                        'channel': channel
                    }
                })
Exemple #23
0
 def cmd_search(self, event):
     Lambda('osbot_jira.lambdas.elk_to_slack').invoke_async(event)
     return None
 def setUp(self):
     self.lambda_name = 'osbot_browser.lambdas.lambda_browser'
     self.lambda_browser = Lambda(self.lambda_name) #lambdas.browser.lambda_browser')
 def setUp(self):
     self.slack_dialog = Lambda('utils.slack_dialog',
                                path_libs='../_lambda_dependencies/slack')