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' }, }, })
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>