def get_repeatgroup_context(self): # context['field'] is essentially a bound_field value, combining the repeat group # description with a list of entity values to be formatted. repeatgroup_context = Context( { 'field': # ----- Repeated field values, as presented by bound_field { 'field_value': [ { "annal:field_id": "Entity_id" , "annal:field_placement": "small:0,12;medium:0,6" } , { "annal:field_id": "Entity_type" , "annal:field_placement": "small:0,12;medium:6,6" } , { "annal:field_id": "Entity_label" , "annal:field_placement": "small:0,12" , "annal:property_uri": "rdfs:label" } , { "annal:field_id": "Entity_comment" , "annal:field_placement": "small:0,12" , "annal:property_uri": "rdfs:comment" } ] # ----- Field description ----- , 'field_id': 'View_fields' , 'field_name': 'View_fields' , 'field_label': 'Fields' , 'field_help': 'This resource descibes the repeated field description used when displaying and/or editing a record view description' , 'field_placeholder': '(repeat field description)' , 'field_placement': get_placement_classes("small:0,12") , 'field_property_uri': 'annal:view_fields' , 'field_value_type': 'annal:Field_group' , 'field_group_ref': 'View_field_view' , 'field_render_type': 'RepeatGroup' , 'group_id': 'View_fields' , 'group_label': 'Fields' , 'group_add_label': 'Add field' , 'group_delete_label': 'Remove selected field(s)' , 'group_field_descs': [ field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "Group_field_sel" }, {} ) , field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "Group_field_property" }, {} ) , field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "Group_field_placement" }, {} ) ] , 'context_extra_values': {} } # ----- other values ----- , 'auth_config': True }) return repeatgroup_context
def test_Field_InitialValues(self): fd = field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "_initial_values" }, {} ) expect_placement = Placement( width = make_field_width(sw=12, mw=12, lw=12), offset = make_field_offset(so=0, mo=0, lo=0), display = make_field_display(sd=True, md=True, ld=True), field = 'small-12 columns', label = 'small-12 medium-2 columns', value = 'small-12 medium-10 columns' ) expect_field_desc = ( { 'field_id': '_initial_values' , 'field_name': '_initial_values' , 'field_value_type': ANNAL.CURIE.Text , 'field_label': '' , 'field_help': '(tooltip text here)' , 'field_render_type': 'Text' , 'field_value_mode': 'Value_direct' , 'field_property_uri': '' , 'field_placeholder': '' , 'field_default_value': None , 'field_placement': expect_placement , 'field_ref_type': None , 'field_choices': None , 'field_ref_restriction': 'ALL' , 'field_group_ref': None }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def test_Field_id(self): fd = field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "Field_id" }, {} ) expect_placement = Placement( width = make_field_width(sw=12, mw=6, lw=6), offset = make_field_offset(so=0, mo=0, lo=0), display = make_field_display(sd=True, md=True, ld=True), field = 'small-12 medium-6 columns', label = 'small-12 medium-4 columns', value = 'small-12 medium-8 columns' ) expect_field_desc = ( { 'field_id': 'Field_id' , 'field_name': 'entity_id' , 'field_value_type': ANNAL.CURIE.Slug , 'field_label': 'Field Id' , 'field_render_type': 'EntityId' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.id , 'field_placeholder': '(field id)' , 'field_default_value': None , 'field_placement': expect_placement , 'field_ref_type': None , 'field_choices': None , 'field_ref_restriction': 'ALL' , 'field_group_ref': None }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def test_Field_InitialValues(self): fd = field_description_from_view_field( self.testcoll, {ANNAL.CURIE.field_id: "_initial_values"}, {}) expect_placement = Placement(field='small-12 columns', label='small-12 medium-2 columns', value='small-12 medium-10 columns') expect_field_desc = ({ 'field_id': '_initial_values', 'field_name': '_initial_values', 'field_value_type': ANNAL.CURIE.Text, 'field_label': '', 'field_help': '', 'field_property_uri': '', 'field_placeholder': '', 'field_default_value': None, 'field_placement': expect_placement, 'field_options_typeref': None, 'field_choice_links': None, 'field_restrict_values': 'ALL', 'field_group_ref': None, 'field_render_type': 'Text' }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def test_Group_field_sel(self): fd = field_description_from_view_field( self.testcoll, {ANNAL.CURIE.field_id: "Group_field_sel"}, {}) expect_placement = Placement(field='small-6 columns', label='small-12 medium-4 columns', value='small-12 medium-8 columns') expect_choice_ids = ([ 'Entity_comment', 'Entity_id', 'Entity_label', 'Entity_type' ]) expect_choice_labels = OrderedDict([(id, id) for id in expect_choice_ids]) expect_choice_links = OrderedDict([(id, entity_url("testcoll", "_field", id)) for id in expect_choice_ids]) expect_field_desc = ({ 'field_id': 'Group_field_sel', 'field_name': 'Field_id', 'field_value_type': ANNAL.CURIE.Slug, 'field_label': 'Field id', 'field_property_uri': ANNAL.CURIE.field_id, 'field_placeholder': '(field sel)', 'field_default_value': '', 'field_placement': expect_placement, 'field_options_typeref': '_field', 'field_choice_labels': expect_choice_labels, 'field_choice_links': expect_choice_links, 'field_restrict_values': '[annal:field_entity_type] in entity[annal:record_type]', 'field_group_ref': None, 'field_render_type': 'Field' }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def get_view_choices_field(self, viewinfo): """ Returns a bound_field object that displays as a view-choice selection drop-down. """ # @@TODO: Possibly create FieldValueMap and return map_entity_to_context value? # or extract this logic and share? field_description = field_description_from_view_field( viewinfo.collection, {ANNAL.CURIE.field_id: "View_choice"}, None) entityvals = { field_description.get_field_property_uri(): viewinfo.view_id } return bound_field(field_description, entityvals)
def get_list_choices_field(self, listinfo): """ Returns a bound_field object that displays as a list-choice selection drop-down. """ # @@TODO: Possibly create FieldValueMap and return map_entity_to_context value? # or extract this logic and share? See also entityedit view choices field_description = field_description_from_view_field( listinfo.collection, { ANNAL.CURIE.field_id: "List_choice" , ANNAL.CURIE.field_placement: "small:0,12;medium:0,9" }, {} ) entityvals = { field_description['field_property_uri']: listinfo.list_id } return bound_field(field_description, entityvals)
def get_list_choices_field(self, listinfo): """ Returns a bound_field object that displays as a list-choice selection drop-down. """ # @@TODO: Possibly create FieldValueMap and return map_entity_to_context value? # or extract this logic and share? See also entityedit view choices field_description = field_description_from_view_field( listinfo.collection, { ANNAL.CURIE.field_id: "List_choice", ANNAL.CURIE.field_placement: "small:0,12;medium:5,5" }, {}) entityvals = { field_description['field_property_uri']: listinfo.list_id } return bound_field(field_description, entityvals)
def test_Group_field_sel(self): fd = field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "Group_field_sel" }, {} ) expect_placement = Placement( width = make_field_width(sw=12, mw=6, lw=6), offset = make_field_offset(so=0, mo=0, lo=0), display = make_field_display(sd=True, md=True, ld=True), field='small-12 medium-6 columns', label='small-12 medium-4 columns', value='small-12 medium-8 columns' ) # expect_choice_id_labels = ( # [ ('Entity_comment', "Comment") # , ('Entity_id', "Id" ) # , ('Entity_label', "Label" ) # , ('Entity_type', "Type" ) # ]) expect_choices = OrderedDict( [ (fc.id, fc) for fc in no_selection("(field sel)") + get_site_default_entity_fields_linked("testcoll") ]) expect_field_desc = ( { 'field_id': 'Group_field_sel' , 'field_name': 'Field_id' , 'field_value_type': ANNAL.CURIE.Slug , 'field_label': 'Field id' , 'field_render_type': 'Enum_optional' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.field_id , 'field_placeholder': '(field sel)' , 'field_default_value': '' , 'field_placement': expect_placement , 'field_ref_type': '_field' , 'field_choices': expect_choices , 'field_ref_restriction': 'entity[annal:record_type] subtype [annal:field_entity_type]' , 'field_group_ref': None }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def test_Field_id(self): fd = field_description_from_view_field( self.testcoll, {ANNAL.CURIE.field_id: "Field_id"}, {}) expect_placement = Placement(field='small-6 columns', label='small-12 medium-4 columns', value='small-12 medium-8 columns') expect_field_desc = ({ 'field_id': 'Field_id', 'field_name': 'entity_id', 'field_value_type': ANNAL.CURIE.Slug, 'field_label': 'Id', 'field_property_uri': ANNAL.CURIE.id, 'field_placeholder': '(field id)', 'field_default_value': None, 'field_placement': expect_placement, 'field_options_typeref': None, 'field_choice_links': None, 'field_restrict_values': 'ALL', 'field_group_ref': None, 'field_render_type': 'EntityId' }) # print repr(fd) self.assertDictionaryMatch(fd, expect_field_desc) return
def test_View_fields(self): fd = field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "View_fields" }, {} ) expect_placement = Placement( width = make_field_width(sw=12, mw=12, lw=12), offset = make_field_offset(so=0, mo=0, lo=0), display = make_field_display(sd=True, md=True, ld=True), field = 'small-12 columns', label = 'small-12 medium-2 columns', value = 'small-12 medium-10 columns' ) expect_field_desc = ( { 'field_id': 'View_fields' , 'field_name': 'View_fields' , 'field_value_type': ANNAL.CURIE.View_field , 'field_label': 'Fields' , 'field_render_type': 'Group_Seq_Row' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.view_fields , 'field_placeholder': '(repeat field description)' , 'field_default_value': None , 'field_placement': expect_placement , 'field_ref_type': None , 'field_choices': None , 'field_ref_restriction': 'ALL' , 'field_group_ref': 'View_field_group' }) self.assertDictionaryMatch(fd, expect_field_desc) self.assertEqual(fd['field_render_type'], "Group_Seq_Row") # self.assertEqual(fd['field_render_colhead'], "field/annalist_head_any.html") # self.assertEqual(fd['field_render_colview'], "field/annalist_item_none.html") self.assertIsInstance(fd['field_render_colhead'], ModeWrapValueRenderer) self.assertIsInstance(fd['field_render_colview'], ModeWrapValueRenderer) self.assertIsInstance(fd['field_render_view'], ModeWrapValueRenderer) self.assertIsInstance(fd['field_render_edit'], ModeWrapValueRenderer) expect_group_details = ( { 'group_id': "View_fields" , 'group_label': "Fields" , 'group_add_label': "Add field" , 'group_delete_label': "Remove selected field(s)" }) self.assertDictionaryMatch(fd, expect_group_details) self.assertEqual(len(fd['group_field_descs']), 3) # Field type selector expect_field0_placement = Placement( width = make_field_width(sw=12, mw=4, lw=4), offset = make_field_offset(so=0, mo=0, lo=0), display = make_field_display(sd=True, md=True, ld=True), field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) expect_field0_desc = ( { 'field_id': 'View_field_sel' , 'field_name': 'Field_id' , 'field_value_type': ANNAL.CURIE.Slug , 'field_label': 'Field id' , 'field_render_type': 'Enum_optional' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.field_id , 'field_placement': expect_field0_placement }) self.assertDictionaryMatch(fd['group_field_descs'][0], expect_field0_desc) # Field property URI expect_field1_placement = Placement( width = make_field_width(sw=12, mw=4, lw=4), offset = make_field_offset(so=0, mo=4, lo=4), display = make_field_display(sd=True, md=True, ld=True), field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) expect_field1_desc = ( { 'field_id': 'View_field_property' , 'field_name': 'Field_property' , 'field_value_type': ANNAL.CURIE.Identifier , 'field_label': 'Property URI' , 'field_render_type': 'Identifier' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.property_uri , 'field_placement': expect_field1_placement }) self.assertDictionaryMatch(fd['group_field_descs'][1], expect_field1_desc) # Field placement (within group) expect_field2_placement = Placement( width = make_field_width(sw=12, mw=4, lw=4), offset = make_field_offset(so=0, mo=8, lo=8), display = make_field_display(sd=True, md=True, ld=True), field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) expect_field2_desc = ( { 'field_id': 'View_field_placement' , 'field_name': 'Field_placement' , 'field_value_type': ANNAL.CURIE.Placement , 'field_label': 'Position/size' , 'field_render_type': 'Placement' , 'field_value_mode': 'Value_direct' , 'field_property_uri': ANNAL.CURIE.field_placement , 'field_placement': expect_field2_placement }) self.assertDictionaryMatch(fd['group_field_descs'][2], expect_field2_desc) return
def test_View_fields(self): fd = field_description_from_view_field( self.testcoll, {ANNAL.CURIE.field_id: "View_fields"}, {}) expect_placement = Placement(field='small-12 columns', label='small-12 medium-2 columns', value='small-12 medium-10 columns') expect_field_desc = ({ 'field_id': 'View_fields', 'field_name': 'View_fields', 'field_value_type': ANNAL.CURIE.Field_group, 'field_label': 'Fields', 'field_property_uri': ANNAL.CURIE.view_fields, 'field_placeholder': '(repeat field description)', 'field_default_value': None, 'field_placement': expect_placement, 'field_options_typeref': None, 'field_choice_labels': None, 'field_choice_links': None, 'field_restrict_values': 'ALL', 'field_group_ref': 'View_field_group' }) self.assertDictionaryMatch(fd, expect_field_desc) self.assertEqual(fd['field_render_type'], "RepeatGroupRow") self.assertEqual(fd['field_render_colhead'], "field/annalist_head_any.html") self.assertEqual(fd['field_render_colview'], "field/annalist_item_none.html") self.assertIsInstance(fd['field_render_view'], RenderRepeatGroup) self.assertIsInstance(fd['field_render_edit'], RenderRepeatGroup) expect_group_details = ({ 'group_id': "View_fields", 'group_label': "Fields", 'group_add_label': "Add field", 'group_delete_label': "Remove selected field(s)" }) self.assertDictionaryMatch(fd, expect_group_details) self.assertEqual(len(fd['group_field_descs']), 3) # Field type selector expect_field0_placement = Placement(field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns') expect_field0_desc = ({ 'field_id': 'Group_field_sel', 'field_name': 'Field_id', 'field_value_type': ANNAL.CURIE.Slug, 'field_label': 'Field id', 'field_render_type': 'Field', 'field_property_uri': ANNAL.CURIE.field_id, 'field_placement': expect_field0_placement }) self.assertDictionaryMatch(fd['group_field_descs'][0], expect_field0_desc) # Field property URI expect_field1_placement = Placement(field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns') expect_field1_desc = ({ 'field_id': 'Group_field_property', 'field_name': 'Field_property', 'field_value_type': ANNAL.CURIE.Identifier, 'field_label': 'Property', 'field_render_type': 'Identifier', 'field_property_uri': ANNAL.CURIE.property_uri, 'field_placement': expect_field1_placement }) self.assertDictionaryMatch(fd['group_field_descs'][1], expect_field1_desc) # Field placement (within group) expect_field2_placement = Placement(field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns') expect_field2_desc = ({ 'field_id': 'Group_field_placement', 'field_name': 'Field_placement', 'field_value_type': ANNAL.CURIE.Placement, 'field_label': 'Position/size', 'field_render_type': 'Placement', 'field_property_uri': ANNAL.CURIE.field_placement, 'field_placement': expect_field2_placement }) self.assertDictionaryMatch(fd['group_field_descs'][2], expect_field2_desc) return