Esempio n. 1
0
class test_run_command(Test_Helper):
    def setUp(self):
        super().setUp()
        self.lambda_name = 'osbot_aws.lambdas.dev.lambda_layer'
        self.aws_lambda = Lambda(self.lambda_name)

    ## helpers
    def layer_version_arn(self):
        package_name = 'requests'
        layer_name = package_name
        layer = Lambda_Layer(layer_name)
        if layer.exists() is False:
            self.result = layer.create_from_pip(package_name)
        return layer.latest().get('LayerVersionArn')

    ## tests
    def test_update(self):
        Deploy().deploy_lambda__gw_bot(self.lambda_name)

    def test_update_and_invoke(self):
        self.test_update()
        self.result = self.aws_lambda.invoke()

    def test_set_layers(self):
        layer_version_arn = self.layer_version_arn()
        self.aws_lambda.set_layers([layer_version_arn])
        self.result = self.aws_lambda.update_lambda_configuration()
        #self.result = self.aws_lambda.info()

    def test_install_layer(self):
        self.aws_lambda.delete()
        self.test_update()
        self.test_set_layers()
        shell = self.aws_lambda.shell()
        self.result = shell.ls('/opt')

    def test_execute_command(self):
        code = """
import sys
#sys.path.append('/opt')        
import requests        
result = requests.get('https://www.google.com/404').text      
"""
        shell = self.aws_lambda.shell()
        self.result = shell.python_exec(code)
class Test_Lambda_lambda_browser(Test_Helper):
    def setUp(self):
        super().setUp()
        self.lambda_name    = 'osbot_browser.lambdas.lambda_browser'
        self.lambda_browser = Lambda(self.lambda_name)
        self.png_data       = None

    def tearDown(self):
        super().tearDown()

    def _save_png_file(self, png_data):
        try:
            png_file = '/tmp/lambda_png_file.png'
            if png_data:
                with open(png_file, "wb") as fh:
                    fh.write(base64.decodebytes(png_data.encode()))
                Dev.pprint("Png data with size {0} saved to {1}".format(len(png_data),png_file))
        except Exception as error:
            Dev.print("[_save_png_file][Error] {0}".format(error))
            Dev.print(png_data)

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

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

    def test_invoke_directly_version(self):
        result = run({"params": ['version']},{})
        assert result == Browser_Commands.current_version

    def test_invoke(self):
        payload ={ "params" : []}
        result = self.lambda_browser.invoke(payload)
        assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_markdown(self):
        markdown = Misc.random_string_and_numbers(prefix='# Created from Lambda ... ')
        payload  = {"params": ['markdown', markdown, " \n normal text"]}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_screenshot(self):
        self.test_update_lambda()
        channel = None #'DRE51D4EM'
        url = 'https://www.google.co.uk'
        #url = 'https://news.bbc.co.uk/aaa'
        #url = 'https://www.whatismybrowser.com/'
        payload = {"params": ['screenshot','_'], 'data': {'channel':channel}}
        self.result = self.lambda_browser.invoke(payload)
        #print(self.lambda_browser.shell().reset())
        print(self.lambda_browser.shell().list_processes())
        #Dev.pprint(result)

    def test_invoke_shell_get_processes(self):
        shell = self.lambda_browser.shell()
        print()
        print(shell.list_processes())

    def test_invoke_shell_get_event_logs(self):
        log_folder= '/tmp/event_logs'
        log_file = '2020-04-12__02-41-15__142417.json'
        shell = self.lambda_browser.shell()
        print()
        print(shell.ls(log_folder))
        for log_file in shell.ls(log_folder).split('\n'):
            print()
            print(f'*****{log_file}*****')
            print(shell.file_contents(f'{log_folder}/{log_file}'))
            print()
        #print(shell.ls('/tmp/lambdas-dependencies'))
        #print(shell.ls('/tmp/lambdas-dependencies'))
        #"browser screenshot <https://www.google.com>",

    def test_invoke_shell_code(self):
        #self.test_update_lambda()
        code = """
from osbot_browser.browser.Browser_Lamdba_Helper   import Browser_Lamdba_Helper
from osbot_aws.Dependencies import load_dependencies
from osbot_utils.utils.Files import Files        

browser_helper = Browser_Lamdba_Helper().setup()
browser_helper.api_browser.sync__browser_width(1500)
result =  browser_helper.get_screenshot_png()
              """
        shell = self.lambda_browser.shell()
        self.png_data = shell.python_exec(code)
        #print(shell.ls('/tmp'))
        #print(shell.file_contents('/tmp/browser-last_chrome_session.json'))
        #print(shell.list_processes())

    def test_list(self):
        payload = {"params": ['list']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current examples files:'

    def test_lambda_status(self):
        payload = {"params": ['lambda_status']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current status of the `graph` lambda function'

    def test_render__bootstrap_cdn(self):
        payload = {"params": ['render','/examples/bootstrap-cdn.html',0,0,600,50]}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_render__cup_of_tea(self):
        payload = {"params": ['render','examples/wardley_map/cup-of-tea.html']}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    # def test_invoke_directly_render(self):
    #     png_data = run({"params": ['render','/']},{})
    #     self._save_png_file(png_data)

    def test_elk(self):
        payload = {"params": ['elk','dashboards']}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    @unittest.skip('hangs on request')
    def test_elk__dashboard_project(self):
        payload = {"params": ['elk', 'dashboard_project','GSSP-126']}
        png_data = self.lambda_browser.invoke(payload)
        # Dev.pprint(png_data)
        self._save_png_file(png_data)



    def test_risks(self):
        #payload = {"params": ['render','gs/risk/risks-dashboard.html']}
        payload = { "params" : ['risks' , 'GSSP-115']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_go_js(self):
        #self.test_update_lambda()
        payload = {"params": ['go_js', 'graph_J2O', 'default']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)

    def test_sow_view(self):
        #self.test_update_lambda()
        payload = {"params": ['sow', 'view', 'SOW-135']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)


    @unittest.skip('needs fixing (api has moved since this test)')
    def test_graph(self):
        graph_name = 'graph_XKW'        # 7 nodes
        graph_name = 'graph_MKF'        # 20 nodes

        view_name  = 'default'
        payload = {"params": ['graph', graph_name, view_name]}
        png_data = self.lambda_browser.update_with_src().invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_graph__view__node_label(self):
        graph_name = 'graph_XKW'        # 7 nodes
        #graph_name = 'graph_VKN'        # 20 nodes
        #graph_name = 'graph_YT4'   # (199 nodes, 236 edges)
        #graph_name = 'graph_VZ5'   # (367 nodes, 653 edges)

        view_name  = 'node_label'
        label_key  = 'Status'
        payload = {"params": ['graph', graph_name, view_name,label_key]}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)



    def test_graph__graph_default(self):
        self.test_deploy()
        graph_name = 'graph_J2O'        # 7 nodes
        view_name = 'default'
        payload = {"params": ['graph', graph_name, view_name]}
        #png_data = run(payload, {})
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self.result = png_data
        #self._save_png_file(png_data)

    # todo: fix: it is throwing '_AttributeError("\'NoneType\' object has no attribute \'get\'",)_')
    def test_table(self):
        payload = {"params": ['table','graph_MKF', 'graph']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_issue(self):
        payload = {"params": ['table','graph_MKF', 'issue']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)


    def test_am_chars_time_line_via_lambda(self):
        data = [{"x": "1", "y": 1,
                 "text": "[bold]2018 Q1[/]\nThere seems to be some furry animal living in the neighborhood.",
                 "center": "bottom"}, {
                    "x": "2",
                    "y": 1,
                    "text": "[bold]2018 Q2[/]\nWe're now mostly certain it's a fox.",
                    "center": "top"
                }, {
                    "x": "3",
                    "y": 1,
                    "text": "[bold]2018 Q3[/]\nOur dog does not seem to mind the newcomer at all.",
                    "center": "bottom"
                }, {
                    "x": "4",
                    "y": 1,
                    "text": "[bold]2018 Q4[/]\nThe quick brown fox jumps over the lazy dog.",
                    "center": "top"
                }];
        data = json.dumps(data).split(' ')
        payload = {'params': ['am_charts','aaa', 'timeline'] }
        payload.get('params').extend(data)

        #Deploy(self.lambda_name).deploy()

        self.png_data = self.lambda_browser.invoke(payload)

    def test_screenshot__settings_help(self):
        #self.test_update_lambda()
        #url = 'https://www.google.co.uk/aaaa'
        url = 'https://www.whatismybrowser.com/'
        url = 'http://glasswall.atlassian.net/'
        #url = 'chrome://settings/help'
        payload = {"params": ['screenshot', url,], 'data': {}}
        self.png_data = self.lambda_browser.invoke(payload)

    def test_viva_graph(self):
        self.test_update_lambda()
        payload = {"params": ['viva_graph','graph_5QQ', 'default']}
        self.result = self.lambda_browser.invoke(payload)

    def test_invoke_directly__screenshot___settings_help(self):

        url = 'https://www.whatismybrowser.com/'
        url = 'https://glasswall.atlassian.net'
        payload = {"params": ['screenshot', url, ], 'data': {}}
        self.png_data = run(payload, {})



#def use_upgraded_chromium_version(self):
    # updating this programatically didn't work, using the code below
    # # original version is 575458
    # new_revision = '664010'
    # new_revision = '77812'
    # import pyppeteer
    # import pyppeteer.chromium_downloader
    # import os
    # original_version = pyppeteer.__chromium_revision__
    #
    # os.environ['PYPPETEER_CHROMIUM_REVISION']  = new_revision
    # pyppeteer.__chromium_revision__            = new_revision
    # pyppeteer.chromium_downloader.REVISION     = new_revision
    # #pyppeteer.chromium_downloader.downloadURLs = {
    # #                                                'linux': f'{downloads_folder}/{new_revision}/chrome-linux/chrome',
    # #                                                'mac'  : f'{downloads_folder}/{new_revision}/chrome-mac/Chromium.app/Contents/MacOS/Chromium',
    # #                                                'win32': f'{downloads_folder}/{new_revision}/chrome-win32/chrome.exe',
    # #                                                'win64': f'{downloads_folder}/{new_revision}/chrome-win32/chrome.exe',
    # #                                            }
    # from pathlib import Path
    # pyppeteer.chromium_downloader.chromiumExecutable["mac"] = Path(str(pyppeteer.chromium_downloader.chromiumExecutable["mac"]).replace(original_version, new_revision))
    # pyppeteer.chromium_downloader.downloadURLs["mac"]       = Path(str(pyppeteer.chromium_downloader.downloadURLs["mac"]).replace(original_version, new_revision))
    #
    # so ended up changing these values directly on the source code
    # __chromium_revision__ = '575458'       # v69 original one
    # __chromium_revision__ = '628590'       # v74
    # __chromium_revision__ = '664010'       # v76
    # __chromium_revision__ = '701274'       # 79.0.3929
    #__chromium_revision__ = '737645'  # v82  latest

    def test_update_dependency(self):
        from osbot_aws.Dependencies import upload_dependency
        #pip_install_dependency('pyppeteer2')
        upload_dependency('pyppeteer2')
Esempio n. 3
0
class test_browser_test(Test_Helper):
    def setUp(self):
        super().setUp()
        self.headless = True
        self.lambda_name = 'osbot_browser.lambdas.dev.browser_test'
        self.handler = run
        self.aws_lambda = Lambda(self.lambda_name)

    def test_invoke_directly(self):
        # confirm 'lambda_sheel is working ok
        assert run({
            'lambda_shell': {
                'method_name': 'ping',
                'auth_key': Lambda_Shell().get_lambda_shell_auth()
            }
        }) == 'pong'

    def test_lambda_invoke(self):
        params = {
            'lambda_shell': {
                'method_name': 'ping',
                'auth_key': Lambda_Shell().get_lambda_shell_auth()
            }
        }
        self.result = self.aws_lambda.invoke(params)

    def test_update_lambda(self):
        # note this lambda needs python 3.7 , with 3.8 it fails with error: "while loading shared libraries: libnss3.so"
        self.result = Deploy(self.handler).deploy_lambda__browser_dev()

    def test_update_and_invoke(self):
        self.test_update_lambda()
        self.result = self.aws_lambda.invoke(
            {'url': 'https://www.google.com/'})
        #self.png_data = self._lambda.invoke({})

    def test_just_invoke(self):
        #payload = {'url': 'http://localhost:42195'}
        #payload = {'url': 'https://news.bbc.co.uk'}
        #payload = {}
        payload = {'url': 'https://www.google.com'}
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke_shell_get_event_logs(self):
        print()
        print(self.aws_lambda.shell().ls('/tmp/event_log'))
        print(self.aws_lambda.shell().file_contents(
            '/tmp/event_log/2020-04-12__00-20-34__258152.json'))

    def test_invoke_shell_list_processes(self):
        print(self.aws_lambda.shell().list_processes())
        print(self.aws_lambda.shell().disk_space())
        print(self.aws_lambda.shell().ls('/tmp -la'))

    #    for this to work run this command on the tests folder
    #         pip3 install -t _lambda_dependencies/websocket websocket
    #    GW-Bot/modules/OSBot-browser/_lambda_dependencies
    def test_upload_dependency(self):
        from osbot_aws.Dependencies import upload_dependency
        from osbot_aws.Dependencies import pip_install_dependency
        dependencies = ['websocket-client', 'syncer']
        for dependency in dependencies:
            pip_install_dependency(dependency)
            result = upload_dependency(dependency)
            pprint(result)
class test_browser_test(Test_Helper):
    def setUp(self):
        super().setUp()
        self.headless = True
        self.lambda_name = 'osbot_browser.lambdas.dev.browser_test'
        self.handler = run
        self.aws_lambda = Lambda(self.lambda_name)

    def test_invoke_directly__lambda_shell(self):
        # confirm 'lambda_sheel is working ok
        assert run({
            'lambda_shell': {
                'method_name': 'ping',
                'auth_key': Lambda_Shell().get_lambda_shell_auth()
            }
        }) == 'pong'

    def test_invoke_directly__open_page(self):
        payload = {
            'url':
            'https://news.bbc.co.uk',
            'headless':
            False,
            'delay':
            0,
            'js_code':
            "document.querySelectorAll('a')                       "
            "        .forEach((a)=>                               "
            "           {                                         "
            "               a.outerHTML = '<h2>CHANGED via JS<h2>'"
            "           })"
        }

        #payload = {'url': 'https://www.google.com/', 'headless' : False }
        self.png_data = run(payload)

    def test_lambda_invoke(self):
        params = {
            'lambda_shell': {
                'method_name': 'ping',
                'auth_key': Lambda_Shell().get_lambda_shell_auth()
            }
        }
        self.result = self.aws_lambda.invoke(params)

    def test_update_lambda(self):
        # note this lambda needs python 3.7 , with 3.8 it fails with error: "while loading shared libraries: libnss3.so"
        self.result = Deploy(self.handler).deploy_lambda__browser_dev()

    def test_update_and_invoke(self):
        self.test_update_lambda()
        self.png_data = self.aws_lambda.invoke(
            {'url': 'https://www.google.com/'})

    def test_just_invoke(self):
        payload = {'url': 'https://news.bbc.co.uk', 'delay': 2}
        #payload = {'url': 'https://www.google.com/404'}
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke_on_lambda__exec_js(self):
        payload = {
            'url':
            'https://news.bbc.co.uk',
            'headless':
            True,
            'delay':
            0,
            'js_code':
            "document.querySelectorAll('a')                       "
            "        .forEach((a)=>                               "
            "           {                                         "
            "               a.outerHTML = '<h2>CHANGED via JS<h2>'"
            "           })"
        }
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke_shell_get_event_logs(self):
        print()
        print(self.aws_lambda.shell().ls('/tmp/event_log'))
        print(self.aws_lambda.shell().file_contents(
            '/tmp/event_log/2020-04-12__00-20-34__258152.json'))

    def test_invoke_shell_list_processes(self):
        print(self.aws_lambda.shell().list_processes())
        print(self.aws_lambda.shell().disk_space())
        print(self.aws_lambda.shell().ls('/tmp -la'))

    #    for this to work run this command on the tests folder
    #         pip3 install -t _lambda_dependencies/websocket websocket
    #    GW-Bot/modules/OSBot-browser/_lambda_dependencies
    def test_upload_dependency(self):
        from osbot_aws.Dependencies import upload_dependency
        from osbot_aws.Dependencies import pip_install_dependency
        dependencies = ['websocket-client', 'syncer']
        for dependency in dependencies:
            pip_install_dependency(dependency)
            result = upload_dependency(dependency)
            pprint(result)
Esempio n. 5
0
class test_Chrome_in_Lambda(Test_Helper):
    def setUp(self):
        super().setUp()
        self.lambda_name = 'osbot_browser.lambdas.dev.lambda_shell'
        self._lambda = Lambda(self.lambda_name)

    def test_update_lambda(self):
        self.result = Deploy().deploy_lambda__browser_dev(self.lambda_name)

    #@trace(include=['osbot*', 'boto*'])
    def test_reset_lambda(self):
        self.result = self._lambda.shell().reset()

    def test_update_and_invoke(self):
        code = """
from osbot_aws.Dependencies import load_dependencies
load_dependencies('pyppeteer2')
from osbot_browser.chrome.Chrome_Sync import Chrome_Sync

chrome = Chrome_Sync().keep_open()
chrome.browser()
#result = chrome.open('https://news.google.com').url()

#from osbot_utils.utils.Misc import bytes_to_base64
#result = bytes_to_base64(chrome.screenshot()) 

result = chrome.chrome.chrome_setup.connect_method()      
"""

        self.test_update_lambda()
        #self.test_reset_lambda()

        self.result = self._lambda.shell().python_exec(code)

    def test_update_and_invoke__test(self):

        code = """
from osbot_aws.Dependencies import load_dependencies
        
load_dependencies('pyppeteer2,websocket-client')

from osbot_browser.chrome.Chrome import Chrome       

#chrome = Chrome().keep_open()
#from osbot_utils.utils.Http import GET
#result = GET('http://127.0.0.1:54433')
#result = chrome.get_last_chrome_session()     
#browser = chrome.sync_browser()                     # launch it 

#browser = Chrome().keep_open().sync_browser()       # attach 
#result = chrome.connect_method()

from osbot_utils.decorators.Sync    import sync
@sync
async def local_chrome():
    from osbot_browser.chrome.Chrome import Chrome
    from pyppeteer import connect, launch
    from osbot_utils.utils.Http import GET
    chrome = Chrome().keep_open()
    url_chrome =  chrome.get_last_chrome_session().get('url_chrome')
    
    #"ws://127.0.0.1:51059/devtools/browser/b2f81e97-78e6-417d-9487-4678b9b94121"
    # "ws://127.0.0.1:51059/devtools/browser/b2f81e97-78e6-417d-9487-4678b9b94121"
    #return url_chrome
    url = "http://127.0.0.1:51059/json/version"
        
    #return GET(url)
    await connect({'browserWSEndpoint': url_chrome})     
    return port_is_open(url_chrome)
    await chrome.browser_connect()
    return chrome.connect_method() 

chrome = Chrome()#.keep_open()
chrome.sync_browser()
result = chrome.connect_method()

# Chrome().keep_open().sync__setup_browser()
# Chrome().keep_open().sync__setup_browser() #.sync_browser()
#result = local_chrome()

# @sync
# async def version():
#     from osbot_browser.chrome.Chrome import Chrome
#     return await Chrome().keep_open().version()
#     chrome = Chrome()
#     await chrome.browser()
#     return chrome.chrome_executable()
#     #'HeadlessChrome/67.0.3361.0'
#     
# result = version()
        
"""
        #self.test_update_lambda()
        self.result = self._lambda.shell().python_exec(code)

    #def test_get_browser_version(self):
    #'https://www.whatismybrowser.com/'

# test running webserver in Lambda

    def test_run_webserver_in_lambda(self):
        #self._lambda.shell().reset()
        #self.test_update_lambda()
        code = """
from osbot_aws.Dependencies import load_dependencies        
load_dependencies('pyppeteer,websocket-client')        
from osbot_browser.chrome.Chrome import Chrome       

chrome = Chrome()

load_dependencies('requests')   
from osbot_browser.browser.Web_Server import Web_Server
from osbot_utils.utils.Misc import bytes_to_base64
        
chrome.sync__setup_browser()
#page = chrome.sync_page()
#web_server = Web_Server()
#web_server.port = 1234
#web_server.start()
#with Web_Server() as web_server:    
#chrome.sync_open(web_server.url())
chrome.sync_open('http://localhost:1234/')
result = bytes_to_base64(chrome.sync_screenshot())
# 
# chrome.sync_open('https://www.google.com')
# bytes = chrome.sync_screenshot()
# import base64
# result =  base64.b64encode(bytes).decode()
# #result = chrome.sync_url()
"""

        self.png_data = self._lambda.shell().python_exec(code)

    def test_invoke_shell_commands(self):
        shell = self.result = self._lambda.shell()
        #self.result = shell.ls('/tmp')
        print('-----')
        print(shell.ps())
        #self.result = shell.memory_usage()
        print(shell.list_processes())
Esempio n. 6
0
class test_jira_web(Test_Helper):
    def setUp(self):
        super().setUp()
        self.png_data = None
        self.result = None
        self.aws_lambda = Lambda('osbot_browser.lambdas.jira_web')

    def test_update_lambda(self):
        Deploy().setup().deploy_lambda__browser(
            'osbot_browser.lambdas.jira_web')

    # def test_update_lambda_code(self):
    #     from gw_bot.setup.OSBot_Setup import OSBot_Setup
    #     OSBot_Setup().lambda_package('osbot_browser.lambdas.jira_web').aws_lambda.reset()

    def test_invoke_directly(self):
        issue_id = 'VP-2'
        payload = {
            'issue_id': issue_id,
            'headless': False
        }  #'channel': 'DRE51D4EM' , 'delay': 0}
        self.result = run(payload, {})

    def test_invoke_lambda(self):
        self.test_update_lambda()
        payload = {}
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke_lambda__screenshot(self):
        self.test_update_lambda()
        issue_id = 'VP-1'
        #payload = {'issue_id': issue_id, 'channel': 'DRE51D4EM', 'delay': 6}
        payload = {
            'issue_id': issue_id,
        }
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke(self):
        #self.test_update_lambda()
        issue_id = 'PERSON-42'

        payload = {
            'issue_id': issue_id,
            #'channel': 'DRE51D4EM' ,            # gwbot
            'width': 1200,
            'height': 300,
            'wait': 2
        }
        self.png_data = self.aws_lambda.invoke(payload)

    def test_invoke_shell(self):
        self.test_update_lambda()
        shell = self.aws_lambda.shell()
        print(shell.list_processes())
        print(shell.disk_space())
        print(shell.ls('/tmp -la'))

    def test_invoke_shell_code(self):
        #self.test_update_lambda()
        shell = self.aws_lambda.shell()
        code = """
from osbot_browser.browser.sites.Web_Jira import Web_Jira
web_jira = Web_Jira().setup()        
#path="/rest/helptips/1.0/tips"
path = '/login.jsp?os_destination=/rest/helptips/1.0/tips'
#web_jira.open(path)
#web_jira.open("/")
#web_jira.login()

#web_jira.page.open('https://www.google.com')
#web_jira.page.open('https://glasswall.atlassian.net/secure/Dashboard.jspa')
#result=web_jira.screenshot()
result=web_jira.page.url()

#from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper
#Browser_Lamdba_Helper(headless=True).setup()

#from osbot_utils.utils.Files import file_contents             

# Browser_Lamdba_Helper().load_browser_dependencies()
# 
# from osbot_browser.browser.API_Browser import API_Browser        
# api_browser = API_Browser()
# api_browser.sync__setup_browser()
# api_browser.sync__open('https://www.google.com/')
# 
# result = api_browser.sync__screenshot_base64()

#result='here'         
        """

        #self.png_data = shell.python_exec(code)
        self.result = shell.python_exec(code)
        print(shell.disk_space())
        print(shell.ls('/tmp -la'))

    def test_send_to_slack(self):
        team_id = None
        channel = 'DRE51D4EM'
        issue_id = 'Person-42'
        png_data = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8" \
                   "/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
        from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper
        title = "Issue: {0}".format(issue_id)
        Browser_Lamdba_Helper().send_png_data_to_slack(team_id, channel, title,
                                                       png_data)