def test_base_model_initialize(self):
        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir)
        self.assertEqual(len(model.active_keys), 4)

        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir,
                           active_keys=['size'])
        self.assertEqual(len(model.active_keys), 1)
        self.assertIsNone(model.anchor_key)

        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir,
                           anchor_key='name')
        self.assertEqual(model.anchor_key, 'name')
    def test_get_struct_file(self):
        model = fsnav.Base(
            Definition('fsnav', '/script.py?{+path}'),
            self.tmpdir,
            active_keys=['alternativeType', 'name', 'size'],
        )

        self.assertEqual(
            _dict_clone_filtered(
                model._get_struct_file(self.test_file)['mainEntity']), {
                    'alternativeType': 'file',
                    '@type': 'CreativeWork',
                    'size': 22,
                    '@id': 'test_file.txt',
                    'name': 'test_file.txt',
                    'url': '/script.py?/test_file.txt',
                    'rownames': ['alternativeType', 'name', 'size'],
                    'rows': [['file'], ['test_file.txt'], [22]],
                })

        self.assertEqual(
            _dict_clone_filtered(
                model._get_struct_file(self.dummydirfile1)['mainEntity']), {
                    'alternativeType': 'file',
                    '@type': 'CreativeWork',
                    'size': 13,
                    '@id': 'file1',
                    'name': 'file1',
                    'url': '/script.py?/dummydir2/file1',
                    'rownames': ['alternativeType', 'name', 'size'],
                    'rows': [['file'], ['file1'], [13]],
                })
 def test_get_struct_dir_success_limited_columns_no_data(self):
     model = fsnav.Base(
         Definition('fsnav', '/script.py?{+path}'),
         self.tmpdir,
         active_keys=['name', 'alternativeType', 'size'],
     )
     results = model.get_struct('/dummydir2')
     self.assertDataEqual('standard dir rendering', results)
    def test_get_struct_errors(self):
        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir)

        errored = model.get_struct('readme.txt')
        self.assertEqual(errored['error'], 'path "/readme.txt" not found')
        errored = model.get_struct('/readme.txt')
        self.assertEqual(errored['error'], 'path "/readme.txt" not found')
    def test_get_struct_dir(self):
        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir,
                           anchor_key='name')

        result = model._get_struct_dir(self.dummydir1, lambda x: True)
        self.assertEqual(
            _dict_clone_filtered(result['mainEntity'], [
                'created',
                'size',
                'itemListElement',
            ]), {
                'alternativeType': 'folder',
                '@type': 'ItemList',
                '@id': 'dummydir1',
                'name': 'dummydir1',
                'url': '/script.py?/dummydir1/',
                'key_label_map': {
                    'alternativeType': 'type',
                    'created': 'created',
                    'name': 'name',
                    'size': 'size',
                },
                'active_keys': ['alternativeType', 'name', 'size', 'created'],
                'anchor_key': 'name',
            })
        self.assertEqual(len(result['mainEntity']['itemListElement']), 1)
        self.assertEqual(result['nunja_model_config'], {
            'mold_id': 'nunja.stock.molds/navgrid',
        })

        # TODO should test out the other conditions here, but this is
        # covered later with the specialized methods
        result = model._get_struct_dir(self.dummydir2, lambda x: True)
        self.assertEqual(
            _dict_clone_filtered(result['mainEntity'], [
                'created',
                'size',
                'itemListElement',
            ]), {
                'alternativeType': 'folder',
                '@type': 'ItemList',
                '@id': 'dummydir2',
                'name': 'dummydir2',
                'url': '/script.py?/dummydir2/',
                'key_label_map': {
                    'alternativeType': 'type',
                    'created': 'created',
                    'name': 'name',
                    'size': 'size',
                },
                'active_keys': ['alternativeType', 'name', 'size', 'created'],
                'anchor_key': 'name',
            })
        self.assertEqual(result['nunja_model_config'], {
            'mold_id': 'nunja.stock.molds/navgrid',
        })
        self.assertEqual(len(result['mainEntity']['itemListElement']), 4)
    def test_get_struct_dir_success(self):
        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir)
        results = model.get_struct('/dummydir2')
        self.assertEqual(len(results['mainEntity']['itemListElement']), 4)

        # also one where leading '/' is omitted.
        results = model.get_struct('dummydir2')
        self.assertEqual(len(results['mainEntity']['itemListElement']), 4)
 def test_get_struct_dir_success_limited_columns_with_data(self):
     model = fsnav.Base(
         Definition(
             'fsnav',
             '/script.py?{+path}',
             uri_template_json='/json.py?{+path}',
         ),
         self.tmpdir,
         active_keys=['name', 'alternativeType', 'size'],
     )
     results = model.get_struct('/dummydir2')
     self.assertDataEqual('configured dir rendering', results)
    def test_get_struct_dir_dirs(self):
        model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                           self.tmpdir)
        results = model.get_struct_dirs_only('/dummydir2')
        self.assertEqual(len(results['mainEntity']['itemListElement']), 2)

        # also for an item underneath
        results = model.get_struct_dirs_only('/dummydir2/something')
        self.assertEqual(len(results['mainEntity']['itemListElement']), 2)

        # also with the '/' omitted
        results = model.get_struct_dirs_only('dummydir2/something')
        self.assertEqual(len(results['mainEntity']['itemListElement']), 2)
    def test_finalize_value_result(self):
        model = fsnav.Base(Definition('static', '/script.py?{+path}'),
                           self.tmpdir)

        value = {'mainEntity': {}}
        self.assertEqual(
            model.finalize(value), {
                '@context': 'https://schema.org/',
                'nunja_model_id': 'static',
                'nunja_model_config': {},
                'meta': {
                    'css_class': {},
                },
                'mainEntity': {},
            })

        value = {'mainEntity': {}, '@context': 'https://example.com/custom/'}
        self.assertEqual(
            model.finalize(value), {
                '@context': 'https://example.com/custom/',
                'nunja_model_id': 'static',
                'nunja_model_config': {},
                'mainEntity': {},
                'meta': {
                    'css_class': {},
                },
            })

        value = {'mainEntity': {'data_href': '/json.py?/somewhere'}}
        self.assertEqual(
            model.finalize(value), {
                '@context': 'https://schema.org/',
                'nunja_model_id': 'static',
                'nunja_model_config': {
                    'data_href': '/json.py?/somewhere',
                },
                'mainEntity': {
                    'data_href': '/json.py?/somewhere',
                },
                'meta': {
                    'css_class': {},
                },
            })
 def test_finalize(self):
     model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                        self.tmpdir)
     self.assertEqual(
         model.finalize({}), {
             '@context': 'https://schema.org/',
             'nunja_model_id': 'fsnav',
             'nunja_model_config': {},
             'meta': {
                 'css_class': {},
             },
         })
     value = {'meta': {'css_class': {'test': 'class'}}}
     self.assertEqual(
         model.finalize(value), {
             '@context': 'https://schema.org/',
             'nunja_model_id': 'fsnav',
             'nunja_model_config': {},
             'meta': {
                 'css_class': {
                     'test': 'class'
                 },
             },
         })
                            'partOf',
                            {
                                '@type': 'ItemList'
                            },
                        ]
                    ],
                    ['nunja.stock.molds/navgrid/filter', 'identity', []],
                ]]
            ]
        ]
    },
)

dirnav = fsnav.Base(file_definition,
                    getcwd(),
                    anchor_key='name',
                    type_definitions={
                        'folder': dir_definition,
                    })

# need this one as this will use the file_definition for rendering, and
# will not switch to the folder version for the initial render.
# i.e. this is for server side only.
filenav = fsnav.Base(
    file_definition,
    getcwd(),
    anchor_key='name',
)

# Supposed this can be done using a jinja template...
body_tmpl = """
<div id="layout">
 def test_get_struct_dir_files(self):
     model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                        self.tmpdir)
     results = model.get_struct_files_only('/dummydir2')
     self.assertEqual(len(results['mainEntity']['itemListElement']), 2)
 def test_get_struct_file_parent_traversal_failure(self):
     model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                        self.tmpdir)
     target = '/'.join(['..', basename(self.tmpdir), 'test_file.txt'])
     results = model.get_struct(target)
     self.assertEqual(results['error'], 'path "/%s" not found' % target)
 def test_get_struct_file_success(self):
     model = fsnav.Base(Definition('fsnav', '/script.py?{+path}'),
                        self.tmpdir)
     results = model.get_struct('/test_file.txt')
     self.assertEqual(results['mainEntity']['size'], 22)
    def test_finalize_config(self):
        model = fsnav.Base(
            Definition('static',
                       '/script.py?{+path}',
                       config={'key1': 'value1'}),
            self.tmpdir,
        )
        self.assertEqual(
            model.finalize({}), {
                '@context': 'https://schema.org/',
                'nunja_model_id': 'static',
                'nunja_model_config': {
                    "key1": "value1"
                },
                'meta': {
                    'css_class': {},
                },
            })

        value = {
            'nunja_model_id': 'replaced',
            'nunja_model_config': {
                'key2': 'value2'
            },
            'meta': {
                'css_class': {
                    'test': 'class'
                },
            },
        }
        finalized = model.finalize(value)
        self.assertEqual(finalized['nunja_model_id'], 'static')
        self.assertEqual(finalized['meta']['css_class'], {'test': 'class'})
        self.assertEqual(finalized['nunja_model_config'], {
            "key1": "value1",
            "key2": "value2"
        })

        value = {
            'meta': {
                'css_class': {
                    'test': 'class'
                }
            },
            'nunja_model_config': {
                'key1': 'alternative'
            },
        }
        self.assertEqual(
            model.finalize(value), {
                '@context': 'https://schema.org/',
                'nunja_model_id': 'static',
                'nunja_model_config': {
                    "key1": "alternative"
                },
                'meta': {
                    'css_class': {
                        'test': 'class'
                    },
                },
            })
Exemple #16
0
from os import getcwd
from os.path import basename
from os import environ

import json

from nunja.core import engine
from nunja.stock.model import fsnav
from nunja.stock.model.base import Definition

nav = fsnav.Base(
    Definition(
        'baseid',
        basename(__file__) + '?{+path}',
        uri_template_json=basename(__file__) + '?{+path}',
        css_class={
            'table': 'pure-table',
        },
    ),
    getcwd(),
    anchor_key='name',
)

target = environ.get('QUERY_STRING') or '/'

body_tmpl = """
<div id="layout">
    <div id="main">
        <div class="content">
        <h1>Directory Listing</h1>
        %s
        </div>