class test_Check_Main_Commands(TestCase):
    def setUp(self):
        self.osbot = Lambda('osbot.lambdas.osbot')
        self.api_gw_payload = {
            'token': 'abc',
            'team_id': 'T7F3AUXGV',
            'api_app_id': 'ADKLUAF3M',
            'event': {
                'client_msg_id': '9a85fa78-24be-4701-8ff0-5b50dd12738f',
                'type': 'message',
                'text': 'help',
                'user': '******',
                'ts': '1554811005.000200',
                'channel': 'DDKUZTK6X',
                'event_ts': '1554811005.000200',
                'channel_type': 'im'
            },
            'type': 'event_callback',
            'event_id': 'EvHT1YNVU5',
            'event_time': 1554811005,
            'authed_users': ['UDK5W7W3T']
        }

    def test_invoke(self):
        assert self.osbot.invoke(
        ) == '500 Error'  # todo: find out the why the error

    def test_send_API_GW_command(self):
        Dev.pprint(self.osbot.invoke(Test_Data.api_gw_payload_help))
class test_lambda_wardley_maps(Test_Helper):
    def setUp(self):
        self.lambda_name = 'osbot_browser.lambdas.lambda_browser'
        self.lambda_browser = Lambda(
            self.lambda_name)  #lambdas.browser.lambda_browser')
        self.result = None
        self.png_data = None

    def tearDown(self):
        if self.result is not None:
            Dev.pprint(self.result)
        if self.png_data:
            png_file = '/tmp/lambda_png_file.png'
            with open(png_file, "wb") as fh:
                fh.write(base64.decodebytes(self.png_data.encode()))

    def test_update_lambda(self):
        Deploy().setup().deploy_lambda__browser()

    def test_render__simple(self):
        payload = {"params": ['render', 'examples/wardley_map/simple.html']}
        self.png_data = self.lambda_browser.invoke(payload)

    def test_render__cup_of_tea(self):
        payload = {
            "params": ['render', 'examples/wardley_map/cup-of-tea.html']
        }
        #self.png_data = self.lambda_browser.invoke(payload)
        self.result = self.lambda_browser.invoke(payload)
示例#3
0
 def add_processing_lambda_set_lambda_permission(self, lambda_arn):
     statement_id = 'allow_firehose_to_invoke_lambda_function'
     action       = 'lambda:InvokeFunction'
     principal    = 'firehose.amazonaws.com'
     aws_lambda   = Lambda()
     aws_lambda.permission_delete(lambda_arn, statement_id)
     return aws_lambda.permission_add(lambda_arn, statement_id, action, principal, )
示例#4
0
 def policy_add_sqs_permissions_to_lambda_role(self, lambda_name):
     aws_lambda = Lambda(lambda_name)
     iam_role_name = aws_lambda.configuration().get('Role').split(
         ':role/').pop()
     IAM(role_name=iam_role_name).role_policy_attach(
         self.arn_aws_policy_service_sqs_lambda)
     return iam_role_name
    def create(*event):
        aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
        params = ["maps", "exec_js"]
        params.extend(event[2])

        payload = {"params": params, 'data': {'channel': event[1]}}
        aws_lambda.invoke_async(payload)
示例#6
0
    def handle_dialog_submission(self, data):
        callback_id = data['callback_id']
        channel     = data['channel']['id']
        user_id     = data['user']['id']

        if callback_id =='jira-graph-chooser':
            graph_name = data['submission'].get('graph_name')
            Lambda('pbx_gs_python_utils.lambdas.gs.elastic_jira').invoke_async({"params": ["graph", graph_name], "user": user_id, "channel": channel})

        elif callback_id == 'jira-view-issue-links':
            self.handle_callback_jira_view_issue_links(data)

        elif callback_id == 'jira-view-issue-dialogue':
            slack_message('jira-view-issue-dialogue: {0}'.format(data),[], channel)
            key     = data.get('submission').get('key')
            result  = Lambda('pbx_gs_python_utils.lambdas.gs.elastic_jira').invoke({"params": ["issue", key], "user": user_id, "channel": channel})
            slack_message(result.get('text'), result.get('attachments'), channel)

        # elif callback_id == 'issue-search-dialog':
        #     self.(data)

        else:
            error_message = ":red_circle: Dialog callback_id not supported: {0}".format(callback_id)
            slack_message(error_message, [], channel)
            #self.api_slack.send_message(error_message, channel=channel)

        return None
 def setUp(self) -> None:
     self.handler = run  # link to the run method in exec_commands.py
     self.deploy_lambda = Deploy_Lambda(
         self.handler)  # use OSBot_AWS helper class for deploying lambdas
     self.aws_lambda = Lambda(self.deploy_lambda.lambda_name(
     ))  # use OSBot_Lambda helper class to invoke lambdas
     print()
class Test_lambda_api_gateway_simple_test(unittest.TestCase):
    def setUp(self):
        self.simple_test = Lambda('api_gateway.trigger_sync_jira_sheets')

    def test_update_and_invoke(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.invoke(
            {'queryStringParameters': {
                'file_id': file_id
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)
        #assert result == 'API Gateway test'

    def test_update_and_invoke__action_diff(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.invoke(
            {'queryStringParameters': {
                'file_id': file_id,
                'action': 'diff'
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)

    def test_update_and_invoke__action_sync(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.invoke(
            {'queryStringParameters': {
                'file_id': file_id,
                'action': 'sync'
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)
示例#9
0
 def show(params, height=200):
     browser = Lambda('osbot_browser.lambdas.lambda_browser')
     payload = {"params": params, 'data': {}}
     #browser.invoke(payload)
     png_data = browser.invoke(payload)
     # print(png_data)
     show_png(png_data, height)
    def screenshot(team_id=None, channel=None, params=None):
        event = params.pop()                                # needed due to injection of event param
        try:
            if len(params) < 2:
                return send_message(":red_circle: missing `short id` and `path`. The syntax for this method is `screenshot {short_id} {path}`",channel, team_id)
            max_screenshot_delay = 15
            short_id = params.pop(0)
            path     = params.pop(0).replace('<', '').replace('>', '')  # fix extra chars added by Slack
            width    = Misc.to_int(Misc.array_pop(params, 0))
            height   = Misc.to_int(Misc.array_pop(params, 0))
            delay    = Misc.to_int(Misc.array_pop(params, 0))
            if not width : width = 1200
            if not height: height = 800
            if not delay : delay = 0
            if delay > max_screenshot_delay : delay = max_screenshot_delay

            send_message(":point_right: taking screenshot of notebook `{0}` in server `{1}` with width `{2}`, (min) height `{3}` and delay `{4}`".format(path,short_id,width,height,delay),channel,team_id)
            payload = {'short_id': short_id, 'path': path,'width': width,'height': height, 'delay' : delay}
            png_data = Lambda('osbot_jupyter.lambdas.screenshot').invoke(payload)
            if len(png_data) == 3:
                send_message(":red_circle: error taking screenshot :{0} ".format(png_data),channel,team_id)
            else:
                send_message(":point_right: got screenshot with size `{0}` (sending it to slack) ".format(len(png_data)),channel,team_id)
                Lambda('gw_bot.lambdas..png_to_slack').invoke({'png_data': png_data, 'team_id': team_id, 'channel': channel})
        except Exception as error:
            send_message(":red_circle: error in screenshot: {0}".format(error),channel,team_id)
示例#11
0
 def setUp(self):
     super().setUp()
     self.lambda_name = 'osbot_browser.lambdas.lambda_browser'
     self.lambda_browser = Lambda(self.lambda_name)
     self.sow_views = Sow_Views()
     self.png_data = None
     self.result = None
示例#12
0
class GSBot_Execution:
    def __init__(self):
        self.osbot_lambda = Lambda('osbot.lambdas.osbot')
        self.jira_lambda = Lambda('osbot_jira.lambdas.jira')

    def invoke(self, command):
        params = command.split(' ')
        if len(params) > 0:
            if params[0] == 'jira':
                return self.invoke_jira(params[1:])
        return self.invoke_osbot(command)

    def invoke_osbot(self, command):
        payload = {
            'event': {
                'type': 'message',
                'text': command,
                'user': '******'
            }
        }

        result = self.osbot_lambda.invoke(payload)
        text = result.get('text')
        attachments = result.get('attachments')
        return text, attachments

    def invoke_jira(self, params):
        payload = {'params': params}
        return "[*]: {0}".format(self.jira_lambda.invoke(payload)), []
示例#13
0
    def test_fixed__bug_cache_issue_in_lambdas(self):
        payload = {"params": ["go_js", "graph_MKF", "default"]}
        self.png_data = Lambda('browser.lambda_browser').invoke(payload)
        Dev.pprint(self.png_data)

        self.png_data = Lambda('browser.lambda_browser').invoke(payload)
        Dev.pprint(self.png_data)
    def slack(team_id=None, channel=None, params=None):
        target = Misc.array_pop(params, 0)
        height = Misc.to_int(Misc.array_pop(params, 0))
        width = Misc.to_int(Misc.array_pop(params, 0))
        scroll_by = Misc.to_int(Misc.array_pop(params, 0))
        delay = Misc.to_int(Misc.array_pop(params, 0))

        if target is None: target = 'general'
        if width is None: width = 800
        if height is None: height = 1000
        if scroll_by is None: scroll_by = 0
        if delay is None: delay = 0

        target_url = '/messages/{0}'.format(target)

        slack_message(
            ":point_right: Taking screenshot of slack channel: `{0}` with height `{1}`, width `{2}`, scroll_by `{3}` and delay `{4}`"
            .format(target, height, width, scroll_by,
                    delay), [], channel, team_id)

        payload = {
            'target': target_url,
            'channel': channel,
            'team_id': team_id,
            'width': width,
            'height': height,
            'scroll_by': scroll_by,
            'delay': delay
        }
        aws_lambda = Lambda('osbot_browser.lambdas.slack_web')
        aws_lambda.invoke_async(payload)
示例#15
0
 def setUp(self, region, account_id):
     super().setUp()
     self.lambda_name = 'tmp_lambda_dev_test'
     self.setup       = super().setUp()
     self.s3_bucket   = self.setup.s3_bucket_lambdas
     self.s3_key      = f'{Globals.lambda_s3_key_prefix}/{self.lambda_name}.zip' #'lambdas/{0}.zip'.format(self.lambda_name)
     self.aws_lambda  = Lambda(self.lambda_name)
示例#16
0
    def slack(team_id=None, channel=None, params=None):


        target = Misc.array_pop(params,0)
        height = Misc.to_int(Misc.array_pop(params, 0))
        width  = Misc.to_int(Misc.array_pop(params, 0))

        if target is None: target = 'general'
        if width  is None: width = 800
        if height is None: height = 1000

        target_url = '/messages/{0}'.format(target)

        slack_message(":point_right: taking screenshot of slack channel: `{0}` with height `{1}` and width `{2}`".format(target, height,width), [], channel, team_id)

        payload = {'target' : target_url,
                   'channel': channel,
                   'team_id': team_id,
                   'width'  : width,
                   'height' : height}
        aws_lambda      = Lambda('osbot_browser.lambdas.slack_web')
        png_data        = aws_lambda.invoke(payload)

        browser_helper  = Browser_Lamdba_Helper()
        return browser_helper.send_png_data_to_slack(team_id, channel, target, png_data)
 def setUp(self):
     self.oss_setup = super().setUp()
     # self.aws_lambda = Lambda_Package('oss_bot.lambdas.git_lambda')
     # self.aws_lambda._lambda.set_s3_bucket(self.oss_setup.s3_bucket_lambdas)         \
     #                        .set_role     (self.oss_setup.role_lambdas)
     self.aws_lambda = Lambda('oss_bot.lambdas.git_lambda')
     self.result = None
示例#18
0
def jira_links(start, direction, depth):
    view = None
    lambda_graph = Lambda('osbot_jira.lambdas.jira')

    payload = {"params": ['links', start, direction, depth, view]}
    result = lambda_graph.invoke(payload)
    return json.loads(result.get('text'))
 def info(team_id=None, channel=None, params=None):
     name = " ".join(params)
     aws_lambda = Lambda('oss_bot.lambdas.git_lambda')
     payload = {'action' : 'participant_info' ,
                'name'   : name               ,
                'channel': channel            ,
                'commit' : False              }
     aws_lambda.invoke_async(payload)
示例#20
0
文件: S3.py 项目: artem7902/OSBot-AWS
 def bucket_notification_set_lambda_permission(self, s3_bucket, lambda_arn):
     from osbot_aws.apis.Lambda import Lambda
     statement_id = 'allow_s3_notifications_to_invoke_function'
     action       = 'lambda:InvokeFunction'
     principal    = 's3.amazonaws.com'
     aws_lambda   = Lambda()
     aws_lambda.permission_delete(lambda_arn, statement_id)
     return aws_lambda.permission_add(lambda_arn, statement_id, action, principal, )
示例#21
0
 def setUp(self):
     super().setUp()
     self.lambda_name = 'osbot_jupyter.lambdas.screenshot'
     self.short_id = 'ec6a1'
     self.aws_lambda = Lambda(self.lambda_name)
     #Deploy(self.lambda_name).deploy_screenshot()                                    # use when wanting to update lambda function
     self.result = None
     self.png_data = None
示例#22
0
    def maps_create(self, code, height=300):
        aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
        params = ["maps", "exec_js"]
        params.extend(code.split(' '))

        payload = {"params": params, 'data': {}}
        png_data = aws_lambda.invoke(payload)
        self.show_png(png_data, height)
示例#23
0
class test_jira_web(unittest.TestCase):
    def setUp(self):
        self.png_data = None
        self.result = None
        self._lambda = Lambda('osbot_browser.lambdas.slack_web')

    def tearDown(self):
        if self.png_data:
            if type(self.png_data) is str:
                png_file = '/tmp/tmp-jira-screenshot.png'
                with open(png_file, "wb") as fh:
                    fh.write(base64.decodebytes(self.png_data.encode()))
                Dev.pprint("Png data with size {0} saved to {1}".format(
                    len(self.png_data), png_file))
            else:
                Dev.print(self.result)
        if self.result:
            Dev.print(self.result)

    #def test_invoke_directly(self):
    #    result = run({},{})
    #    assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_invoke(self):
        self.test_update_lambda()
        target = '/messages/random/'

        payload = {
            'target': target,
            'channel': 'DDKUZTK6X',  # gsbot
            'team_id': 'T7F3AUXGV',  # GS-CST
            'width': 800,
            'height': 1000
        }
        self.result = self._lambda.invoke(payload)
        #self.png_data = self.result# self._lambda.invoke(payload)
        self.png_data = self.result

    def test_invoke_oss(self):
        self.test_update_lambda()
        #target = '/messages/oss-helpdesk'
        #target = '/messages/oss-general'
        target = '/messages/t-wardley-maps'

        payload = {
            'target': target,
            'channel': 'DJ8UA0RFT',  # OSS - gsbot
            'team_id': 'TAULHPATC',  # OSS
            'width': 1000,
            'height': 6000,
            'delay': 3,
            'scroll_by': 15000
        }
        self.result = self._lambda.invoke(payload)
        #self.png_data = self._lambda.invoke(payload)

    def test_update_lambda(self):
        Deploy().setup().deploy_lambda__slack_web()
示例#24
0
 def template(*event):
     aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
     payload = {
         "params": ["maps", "default"],
         'data': {
             'channel': event[1]
         }
     }
     aws_lambda.invoke_async(payload)
示例#25
0
 def cup_of_tea(*event):
     aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
     payload = {
         "params": ["maps", "render", "cup-of-tea"],
         'data': {
             'channel': event[1]
         }
     }
     aws_lambda.invoke_async(payload)
def maps_create(code):
    display(Javascript("$('.container').width('95%')"))
    aws_lambda = Lambda('osbot_browser.lambdas.lambda_browser')
    params = ["maps", "exec_js"]
    params.extend(code.split(' '))

    payload = {"params": params, 'data': {}}
    png_data = aws_lambda.invoke(payload)
    show_png(png_data, 600)
示例#27
0
    def test_invoke(self):
        self.deploy.update()

        assert self.deploy.invoke({"name": "world"}) == "hello world"

        #invoke directly
        aws_lambda = Lambda(name=self.deploy.lambda_name())
        assert aws_lambda.invoke() == 'hello None'
        assert aws_lambda.invoke({'name': 'world'}) == 'hello world'
示例#28
0
    def test_create_dot_then_svg_then_png(self):
        dot_to_svg = Lambda('utils.dot_to_svg').invoke
        svg_to_png = Lambda('utils.svg_to_png').invoke

        dot     = 'digraph { abc -> edfAAAAA \n abc [shape=box] } '
        svg     = dot_to_svg({"dot" : dot})
        result  = svg_to_png({"svg": svg })
        png     = result['image']

        Show_Img.from_svg_string(png)
示例#29
0
    def issue(self,issue_id):
        #print('getting screenshot of issue {0} from jira'.format(issue_id))

        from IPython.display import display_html

        jira_web = Lambda('osbot_browser.lambdas.jira_web')
        payload = {'issue_id': issue_id}
        png_data = jira_web.invoke(payload)
        html = '<img style="border:1px solid black" align="left" src="data:image/png;base64,{}"/>'.format(png_data)
        display_html(html, raw=True)
示例#30
0
 def __init__(self, lambda_name=None, delete_on_exit=True):
     self.lambda_name    = lambda_name or "temp_lambda_{0}".format(random_string_and_numbers())
     self.aws_lambda     = Lambda(self.lambda_name)
     self.tmp_folder     = Temp_Folder_With_Lambda_File(self.lambda_name).create_temp_file()
     self.role_arn       = Temp_Aws_Roles().for_lambda_invocation__role_arn() # todo: refactor to have option to create the role programatically (needs feature to wait for role to be available)
     self.create_log     = None
     self.delete_on_exit = delete_on_exit
     self.s3_bucket      = AWS_Config().lambda_s3_bucket()
     self.s3_key         = 'unit_tests/lambdas/{0}.zip'.format(self.lambda_name)
     self.s3             = self.aws_lambda.s3()