Ejemplo n.º 1
0
    def test_page_components_nested_import(self, project_session, test_utils):
        """Elements and functions from imported modules are not returned
        as components of a page
        """
        testdir, project = project_session.activate()
        sys.path.append(testdir)
        page_one = test_utils.create_random_page(project)
        code = 'elem1 = ("id", "test")\n'
        page.edit_page_code(project, page_one, code)

        # page_two imports page_one
        page_two = test_utils.create_random_page(project)
        code = ('from projects.{}.pages import {}\n'
                '\n'
                'elem2 = ("id", "test")\n'.format(project, page_one))
        page.edit_page_code(project, page_two, code)

        # page_three imports page_two
        page_three = test_utils.create_random_page(project)
        code = ('from projects.{}.pages import {}\n'
                '\n'
                'elem3 = ("id", "test")\n'.format(project, page_two))
        page.edit_page_code(project, page_three, code)
        components = Page(project, page_three).components
        assert len(components['elements']) == 1
        assert components['elements'][0]['name'] == 'elem3'

        # import *
        code = ('from projects.{}.pages.{} import *\n'
                '\n'
                'elem3 = ("id", "test")\n'.format(project, page_two))
        page.edit_page_code(project, page_three, code)
        components = Page(project, page_three).components
        assert len(components['elements']) == 1
        assert components['elements'][0]['name'] == 'elem3'
Ejemplo n.º 2
0
 def test_page_path(self, project_session, test_utils):
     testdir, project = project_session.activate()
     page_one = test_utils.random_string()
     random_dir = test_utils.random_string()
     random_name = test_utils.random_string()
     page_two = '{}.{}'.format(random_dir, random_name)
     test_utils.create_page(project, page_one)
     test_utils.create_page(project, page_two)
     path_one = os.path.join(Project(project).page_directory_path, page_one + '.py')
     path_two = os.path.join(Project(project).page_directory_path,
                             random_dir, random_name + '.py')
     assert Page(project, page_one).path == path_one
     assert Page(project, page_two).path == path_two
Ejemplo n.º 3
0
 def test_edit_page(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     elements = [
         {'name': 'a', 'selector': 'id', 'value': 'b', 'display_name': 'a'},
         {'name': 'c', 'selector': 'id', 'value': 'd', 'display_name': ''}
     ]
     functions = ["def func1(a, b):\n    print(a, b)\n"]
     import_lines = [
         'import time',
         'from golem import browser'
     ]
     page.edit_page(project, page_name, elements, functions, import_lines)
     expected_contents = ('import time\n'
                          'from golem import browser\n'
                          '\n'
                          '\n'
                          'a = (\'id\', \'b\', \'a\')\n'
                          '\n'
                          'c = (\'id\', \'d\', \'c\')\n'
                          '\n'
                          'def func1(a, b):\n'
                          '    print(a, b)\n')
     with open(Page(project, page_name).path) as f:
         assert f.read() == expected_contents
Ejemplo n.º 4
0
 def test_delete_page(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     errors = page.delete_page(project, page_name)
     assert errors == []
     assert page_name not in Project(project).pages()
     assert not os.path.isfile(Page(project, page_name).path)
Ejemplo n.º 5
0
def page_view(project, page_name, no_sidebar=False):
    page = Page(project, page_name)
    if not page.exists:
        abort(404, 'The page {} does not exist'.format(page_name))
    _, error = utils.import_module(page.path)
    if error:
        if no_sidebar:
            url = url_for('webapp.page_code_view_no_sidebar',
                          project=project,
                          page_name=page_name)
        else:
            url = url_for('webapp.page_code_view',
                          project=project,
                          page_name=page_name)
        content = ('<h4>There are errors in the page</h4>'
                   '<p>There are errors and the page cannot be displayed, '
                   'open the page code editor to solve them.</p>'
                   '<a class="btn btn-default" href="{}">Open Page Code</a>'.
                   format(url))
        return render_template('common_element_error.html',
                               project=project,
                               item_name=page_name,
                               content=content,
                               no_sidebar=no_sidebar)
    else:
        return render_template('page_builder/page_object.html',
                               project=project,
                               page_object_data=page.components,
                               page_name=page_name,
                               no_sidebar=no_sidebar)
Ejemplo n.º 6
0
def page_code_view(project, page_name, no_sidebar=False):
    page = Page(project, page_name)
    if not page.exists:
        abort(404, f'The page {page_name} does not exist')
    _, error = utils.import_module(page.path)
    return render_template('page_builder/page_code.html', project=project,
                           page_object_code=page.code, page_name=page_name,
                           error=error, no_sidebar=no_sidebar)
Ejemplo n.º 7
0
def page_code_save():
    project = request.json['project']
    page_name = request.json['pageName']
    content = request.json['content']
    _verify_permissions(Permissions.STANDARD, project)
    path = Page(project, page_name).path
    page_module.edit_page_code(project, page_name, content)
    _, error = utils.import_module(path)
    return jsonify({'error': error})
Ejemplo n.º 8
0
 def test_edit_page_selector_value_format(self, value, expected_value,
                                          project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     elements = [
         {'name': 'foo', 'selector': 'id', 'value': value, 'display_name': 'foo'},
     ]
     page.edit_page(project, page_name, elements, [], [])
     elements = Page(project, page_name).components['elements']
     assert elements[0]['value'] == expected_value
Ejemplo n.º 9
0
 def test_edit_page_code(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     page_code = ("elem1 = ('id', 'x')\n"
                  "elem2 = ('id', 'y')\n"
                  "def func1():\n"
                  "   pass")
     page.edit_page_code(project, page_name, page_code)
     with open(Page(project, page_name).path) as f:
         assert f.read() == page_code
Ejemplo n.º 10
0
def page_components():
    project = request.args['project']
    page_name = request.args['page']
    _verify_permissions(Permissions.READ_ONLY, project)
    result = {'error': '', 'contents': []}
    page = Page(project, page_name)
    if not page.exists:
        result['error'] = 'page does not exist'
    else:
        result['components'] = page.components
    return jsonify(result)
Ejemplo n.º 11
0
    def test_page_components_imported_names(self, project_session, test_utils):
        """Elements and functions from imported modules are not returned
        as components of a page
        """
        testdir, project = project_session.activate()
        sys.path.append(testdir)
        page_one = test_utils.create_random_page(project)
        code = ('elem1 = ("id", "test")\n' '\n' 'def func1():\n' '    pass\n')
        page.edit_page_code(project, page_one, code)

        # page_two imports page_one
        page_two = test_utils.create_random_page(project)
        code = (f'from projects.{project}.pages import {page_one}\n'
                '\n'
                'elem2 = ("id", "test")\n'
                '\n'
                'def func2():\n'
                '    pass\n')
        page.edit_page_code(project, page_two, code)
        components = Page(project, page_two).components
        assert len(components['elements']) == 1
        assert components['elements'][0]['name'] == 'elem2'
        assert len(components['functions']) == 1
        assert components['functions'][0]['name'] == 'func2'

        # import *
        code = (f'from projects.{project}.pages.{page_one} import *\n'
                '\n'
                'elem3 = ("id", "test")\n'
                '\n'
                'def func3():\n'
                '    pass\n')
        page.edit_page_code(project, page_two, code)
        components = Page(project, page_two).components
        assert len(components['elements']) == 1
        assert components['elements'][0]['name'] == 'elem3'
        assert len(components['functions']) == 1
        assert components['functions'][0]['name'] == 'func3'
Ejemplo n.º 12
0
 def test_page_components(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     page_obj = Page(project, page_name)
     with open(page_obj.path, 'w') as f:
         f.write('elem1 = (\'id\', \'someId\', \'Elem1\')\n')
         f.write('def func1(c, b, a):\n')
         f.write('    pass\n')
     components = page_obj.components
     expected = {
         'functions': [
             {
                 'name': 'func1',
                 'full_name': '{}.func1'.format(page_name),
                 'partial_name': '{}.func1'.format(page_name),
                 'description': None,
                 'arguments': ['c', 'b', 'a'],
                 'code': 'def func1(c, b, a):\n    pass\n'
             }
         ],
         'elements': [
             {
                 'name': 'elem1',
                 'selector': 'id',
                 'value': 'someId',
                 'display_name': 'Elem1',
                 'partial_name': '{}.elem1'.format(page_name),
                 'full_name': '{}.elem1'.format(page_name)
             }
         ],
         'import_lines': [],
         'code_lines': ["elem1 = ('id', 'someId', 'Elem1')",
                        'def func1(c, b, a):',
                        '    pass',
                        ''],
         'source_code': ("elem1 = ('id', 'someId', 'Elem1')\ndef func1(c, b, a):\n"
                         "    pass\n")
     }
     assert components == expected
Ejemplo n.º 13
0
 def test_page_components_import_lines(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     code = (
         'import foo\n'
         'import bar\n'
         'from bar import baz\n'
         'from golem.browser import InvalidBrowserIdError, open_browser\n'
         'from module import (func1,\n'
         '                    func2)\n'
         '\n'
         'element_one = ("id", "idX", "Element One")\n'
         'element_two = ("id", "idX .import", "Element Two")\n'
         'element_three = ("id", "idX .from .import", "Element Three")\n')
     page.edit_page_code(project, page_name, code)
     components = Page(project, page_name).components
     expected = [
         'import foo', 'import bar', 'from bar import baz',
         'from golem.browser import InvalidBrowserIdError, open_browser',
         'from module import (func1,\n                    func2)'
     ]
     assert sorted(components['import_lines']) == sorted(expected)
Ejemplo n.º 14
0
 def test_module_local_functions_programatically(self, project_session, test_utils):
     """module imported from path"""
     _, project = project_session.activate()
     page_code = ('import sys\n'
                  'from os import walk\n'
                  'foo = 1\n'
                  'def bar():\n'
                  '  pass\n'
                  'def _baz():\n'
                  '  pass\n'
                  'class Traz:\n'
                  '  pass')
     page_name = test_utils.create_random_page(project, page_code)
     module, _ = utils.import_module(Page(project, page_name).path)
     functions = utils.module_local_public_functions(module)
     assert len(functions) == 1
     assert 'sys' not in functions
     assert 'walk' not in functions
     assert 'foo' not in functions
     assert '_baz' not in functions
     assert 'Traz' not in functions
     assert 'bar' in functions
Ejemplo n.º 15
0
 def test_get_page_code_file_not_exist(self, project_session):
     _, project = project_session.activate()
     assert Page(project, 'does-not-exist').code is None
Ejemplo n.º 16
0
 def test_page_code(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     file_content = 'test=("id", "xyz")\ntest2=("id", "abc")\n'
     page.edit_page_code(project, page_name, file_content)
     assert Page(project, page_name).code == file_content
Ejemplo n.º 17
0
 def test_page_exists(self, project_session, test_utils):
     _, project = project_session.activate()
     page_name = test_utils.create_random_page(project)
     assert Page(project, page_name).exists
     assert not Page(project, 'not_exists_page').exists
Ejemplo n.º 18
0
def project_page_exists():
    project = request.args['project']
    page_name = request.args['page']
    _verify_permissions(Permissions.READ_ONLY, project)
    return jsonify(Page(project, page_name).exists)