def entitydata_context_add_field( context_dict, field_id, dup_index, field_value, field_name='Entity_comment', field_label='Comment', field_render_type='Markdown', field_value_mode='Value_direct', field_value_type='annal:Richtext', field_placement='small:0,12', field_options=[] ): """ Add field value to context; if duplicate then reformat appropriately. Field details default to Entity_comment Updates and returns supplied context dictionary. """ #@@TODO: use field context from entity_testfielddesc field_ids = [ f['field_id'] for f in context_dict['fields'] ] if field_id in field_ids: suffix = "__%d"%dup_index else: suffix = "" context_dict['fields'].append( { 'field_id': field_id , 'field_value': field_value , 'field_name': field_name+suffix , 'field_label': field_label , 'field_render_type': field_render_type , 'field_value_mode': field_value_mode , 'field_value_type': field_value_type , 'field_placement': get_placement_classes(field_placement) , 'options': field_options }) return context_dict
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" } ] , 'context_extra_values': {} # ----- Field description ----- , 'description': { 'field_id': 'View_fields' , 'field_name': 'View_fields' , 'field_value_type': 'annal:Field_group' , 'field_label': 'Fields' , 'field_help': 'This resource descibes the repeated field description used when displaying and/or editing a record view description' , 'field_render_type': 'RepeatGroup' , 'field_value_mode': 'Value_direct' , 'field_property_uri': 'annal:view_fields' , 'field_placement': get_placement_classes("small:0,12") , 'field_placeholder': '(repeat field description)' #@@ , 'field_group_ref': 'View_field_view' , '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: "View_field_sel" }, {} ) , field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "View_field_property" }, {} ) , field_description_from_view_field( self.testcoll, { ANNAL.CURIE.field_id: "View_field_placement" }, {} ) ] } } # ----- other values ----- , 'auth_config': True }) return repeatgroup_context
def context_field_row(*fields): row = ({ 'field_id': "Row_fields", 'field_name': "Row_fields", 'field_label': "Fields in row", 'field_value_mode': "Value_direct", 'field_render_type': "FieldRow", 'field_placement': get_placement_classes('small:0,12'), 'row_field_descs': list(fields) }) return row
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 field_description_from_view_field(collection, field, view_context=None): """ Returns a field description value created using information from a field reference in a view description record (i.e. a dictionary containing a field id value and optional field property URI and placement values. (The optional values, if not provided, are obtained from the referenced field descriptionb) collection is a collection from which data is being rendered. field is a dictionary with the field description from a view or list description, containing a field id and placement values. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. """ #@@TODO: for resilience, revert this when all tests pass? # field_id = field.get(ANNAL.CURIE.field_id, "Field_id_missing") # Field ID slug in URI #@@ field_id = field[ANNAL.CURIE.field_id] recordfield = RecordField.load(collection, field_id, collection._parentsite) if recordfield is None: log.warning("Can't retrieve definition for field %s" % (field_id)) recordfield = RecordField.load(collection, "Field_missing", collection._parentsite) field_property = (field.get(ANNAL.CURIE.property_uri, None) or recordfield.get(ANNAL.CURIE.property_uri, "")) field_placement = get_placement_classes( field.get(ANNAL.CURIE.field_placement, None) or recordfield.get(ANNAL.CURIE.field_placement, "")) # If field references group, pull in field details group_ref = recordfield.get(ANNAL.CURIE.group_ref, None) if group_ref: group_view = RecordGroup.load(collection, group_ref, collection._parentsite) if not group_view: raise EntityNotFound_Error("Group %s used in field %s" % (group_ref, field_id)) else: group_view = None return FieldDescription(collection, recordfield, view_context=view_context, field_property=field.get(ANNAL.CURIE.property_uri, None), field_placement=field.get( ANNAL.CURIE.field_placement, None), group_view=group_view)
def entitydata_context_add_field(context_dict, field_id, dup_index, field_value, field_name='Entity_comment', field_label='Comment', field_render_type='Markdown', field_value_mode='Value_direct', field_value_type='annal:Richtext', field_placement='small:0,12', field_options=[]): """ Add field value to context; if duplicate then reformat appropriately. Field details default to Entity_comment Updates and returns supplied context dictionary. """ #@@TODO: use field context from entity_testfielddesc field_ids = [f['field_id'] for f in context_dict['fields']] if field_id in field_ids: suffix = "__%d" % dup_index else: suffix = "" context_dict['fields'].append({ 'field_id': field_id, 'field_value': field_value, 'field_name': field_name + suffix, 'field_label': field_label, 'field_render_type': field_render_type, 'field_value_mode': field_value_mode, 'field_value_type': field_value_type, 'field_placement': get_placement_classes(field_placement), 'options': field_options }) return context_dict
def _make_test_context(self, val, repeat_prefix="repeat_prefix_", target_value=None, field_link=None, target_link=None, field_ref_type=None, options=None, coll_id="testcoll" ): cd = ( { 'field': { 'field_placement': get_placement_classes("small:0,12") , 'field_name': "test_field" , 'field_label': "test label" , 'field_placeholder': "(test placeholder)" , 'field_value': val , 'field_edit_value': val , 'target_value': val # Mimics bound_field default behaviour , 'field_view_value': val , 'continuation_param': "?continuation_url=test_cont" } , 'repeat_prefix': repeat_prefix , 'HOST': TestHostUri , 'SITE': TestBaseUri , 'COLL': TestBaseUri+"/c/"+coll_id+"/" , 'BASE': TestBasePath+"/c/"+coll_id+"/d/" }) if target_value is not None: cd['field']['target_value'] = target_value if field_link is not None: cd['field']['field_value_link'] = field_link cd['field']['field_value_link_continuation'] = field_link+"?continuation_url=test_cont" if target_link is not None: cd['field']['target_value_link'] = target_link cd['field']['target_value_link_continuation'] = target_link+"?continuation_url=test_cont" if field_ref_type is not None: cd['field']['field_ref_type'] = field_ref_type if options is not None: cd['field']['options'] = options return Context(cd)
def context_field_row(*fields): """ Return a FieldDescription like object for a displayed row of fields in a view context. *fields is a sequence of bound field like obects """ field_row = context_field({ 'field_id': "Row_fields", 'field_name': "Row_fields", 'field_label': "Fields in row", 'field_value_mode': "Value_direct", 'field_render_type': "FieldRow", 'field_placement': get_placement_classes('small:0,12'), 'row_field_descs': fields }) return field_row
def recordview_entity_view_context_data( coll_id="testcoll", view_id=None, orig_id=None, view_ids=[], action=None, add_field=None, remove_field=None, update="RecordView" ): # Target record fields listed in the view description view_fields = ( [ { '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:property_uri': "rdfs:label" , 'annal:field_placement': "small:0,12" } , { 'annal:field_id': "Entity_comment" , 'annal:property_uri': "rdfs:comment" # , 'annal:field_placement': field3_placement } ]) context_dict = ( { 'title': "Collection %s"%(coll_id) , 'coll_id': coll_id , 'type_id': '_view' , 'orig_id': 'orig_view_id' , 'record_type': 'annal:View' , 'fields': [ { 'field_id': 'View_id' # fields[0] , 'field_label': 'Id' , 'field_name': 'entity_id' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] } , { 'field_id': 'View_label' # fields[1] , 'field_label': 'Label' , 'field_name': 'View_label' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_type': 'annal:Text' , 'field_value': '%s data ... (%s/%s)'%(update, coll_id, view_id) , 'options': [] } , { 'field_id': 'View_comment' # fields[2] , 'field_label': 'Help' , 'field_name': 'View_comment' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_type': 'annal:Longtext' , 'field_value': '%s description ... (%s/%s)'%(update, coll_id, view_id) , 'options': [] } , { 'field_id': 'View_target_type' # fields[3] , 'field_label': 'Record type' , 'field_name': 'View_target_type' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_type': 'annal:Identifier' , 'field_value': 'annal:View' , 'options': [] } , { 'field_id': 'View_add_field' # fields[4] , 'field_label': 'Add field?' , 'field_name': 'View_add_field' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_value_type': 'annal:Text' , 'field_value': 'yes' , 'options': [] } , { "field_id": "View_fields" # fields[5] , 'field_label': 'Fields' , 'field_render_type': 'RepeatGroupRow' , 'field_name': 'View_fields' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_type': 'annal:Field_group' , 'field_value': view_fields , 'options': [] } ] , 'continuation_url': entitydata_list_type_url(coll_id, "_view") }) if view_id: context_dict['fields'][0]['field_value'] = view_id context_dict['fields'][1]['field_value'] = '%s %s/%s'%(update, coll_id, view_id) context_dict['fields'][2]['field_value'] = '%s help for %s in collection %s'%(update, view_id, coll_id) context_dict['orig_id'] = view_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action if add_field: context_dict['fields'][5]['field_value'].append( { 'annal:field_id': None , 'annal:property_uri': None , 'annal:field_placement': None }) if remove_field: context_dict['fields'][5]['field_value'][3:4] = [] return context_dict
def __init__(self, collection, recordfield, view_context=None, field_property=None, field_placement=None, group_view=None): """ Creates a field description value to use in a context value when rendering a form. Values defined here are mentioned in field rendering templates. The FieldDescription object behaves as a dictionary containing the various field attributes. collection is a collection from which data is being rendered. recordfield is a RecordField value or dictionary containing details of the field for which a descriptor is constructed. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. field_property if supplied, overrides the field property URI from `recordfield` field_placement if supplied, overrides field placement from `recordfield` group_view if the field itself references a list of fields, this is a RecordGroup value or dictionary containing the referenced list of fields. """ # log.debug("FieldDescription recordfield: %r"%(recordfield,)) field_id = recordfield.get(ANNAL.CURIE.id, "_missing_id_") field_name = recordfield.get(ANNAL.CURIE.field_name, field_id) # Field name in form field_label = recordfield.get(RDFS.CURIE.label, "") field_property = field_property or recordfield.get( ANNAL.CURIE.property_uri, "") field_placement = field_placement or recordfield.get( ANNAL.CURIE.field_placement, "") field_render_type = recordfield.get(ANNAL.CURIE.field_render_type, "") self._field_desc = ({ 'field_id': field_id, 'field_name': field_name, 'field_label': field_label, 'field_help': recordfield.get(RDFS.CURIE.comment, ""), 'field_property_uri': field_property, 'field_placement': get_placement_classes(field_placement), 'field_render_type': field_render_type, 'field_render_view': get_view_renderer(field_render_type), 'field_render_edit': get_edit_renderer(field_render_type), 'field_render_colhead': get_colhead_renderer(field_render_type), 'field_render_colview': get_colview_renderer(field_render_type), 'field_render_coledit': get_coledit_renderer(field_render_type), 'field_value_mapper': get_value_mapper(field_render_type), 'field_value_type': recordfield.get(ANNAL.CURIE.field_value_type, ""), 'field_placeholder': recordfield.get(ANNAL.CURIE.placeholder, ""), 'field_default_value': recordfield.get(ANNAL.CURIE.default_value, None), 'field_options_typeref': recordfield.get(ANNAL.CURIE.options_typeref, None), 'field_restrict_values': recordfield.get(ANNAL.CURIE.restrict_values, "ALL"), 'field_choice_labels': None, 'field_choice_links': None, 'field_group_ref': recordfield.get(ANNAL.CURIE.group_ref, None), 'group_label': None, 'group_add_label': None, 'group_delete_label': None, 'group_view': None, 'group_field_descs': None }) self._field_suffix_index = 0 # No dup self._field_suffix = "" # If field references type, pull in copy of type id and link values type_ref = self._field_desc['field_options_typeref'] if type_ref: restrict_values = self._field_desc['field_restrict_values'] entity_finder = EntityFinder(collection, selector=restrict_values) entities = entity_finder.get_entities_sorted(type_id=type_ref, context=view_context, scope="all") # Note: the options list may be used more than once, so the id generator # returned must be materialized as a list # Uses collections.OrderedfDict to preserve entity ordering # 'Enum_optional' adds a blank entry at the start of the list self._field_desc['field_choice_labels'] = collections.OrderedDict() self._field_desc['field_choice_links'] = collections.OrderedDict() if field_render_type == "Enum_optional": self._field_desc['field_choice_labels'][''] = "" self._field_desc['field_choice_links'][''] = None for e in entities: eid = e.get_id() if eid != "_initial_values": self._field_desc['field_choice_labels'][ eid] = eid # @@TODO: be smarter about label? self._field_desc['field_choice_links'][ eid] = e.get_view_url_path() # log.info("typeref %s: %r"% # (self._field_desc['field_options_typeref'], list(self._field_desc['field_choices'])) # ) # If field references group, pull in field details if group_view: group_label = (field_label or group_view.get( RDFS.CURIE.label, self._field_desc['field_group_ref'])) group_field_descs = [] for subfield in group_view[ANNAL.CURIE.group_fields]: f = field_description_from_view_field(collection, subfield, view_context) group_field_descs.append(f) self._field_desc.update({ 'group_id': field_id, 'group_label': group_label, 'group_add_label': recordfield.get(ANNAL.CURIE.repeat_label_add, "Add " + group_label), 'group_delete_label': recordfield.get(ANNAL.CURIE.repeat_label_delete, "Remove " + group_label), 'group_view': group_view, 'group_field_descs': group_field_descs }) # log.debug("FieldDescription: %s"%field_id) # log.info("FieldDescription._field_desc %r"%(self._field_desc,)) # log.info("FieldDescription.field_placement %r"%(self._field_desc['field_placement'],)) return
def recordlist_view_context_data(coll_id="testcoll", list_id=None, orig_id=None, view_ids=[], action=None, update="RecordList"): if list_id: list_label = "%s %s/%s" % (update, coll_id, list_id) list_descr = "%s help for %s/%s" % (update, coll_id, list_id) else: list_label = "%s list (%s/@@list_id@@)" % (update, coll_id) list_descr = "%s description ... (%s/%s)" % (update, coll_id, list_id) list_fields = ([{ "annal:field_id": layout.FIELD_TYPEID + "/Entity_id", "annal:field_placement": "small:0,3" }, { "annal:field_id": layout.FIELD_TYPEID + "/Entity_label", "annal:field_placement": "small:3,9" }]) context_dict = ({ "title": "%s - List definition - Collection %s" % (list_label, coll_id), 'heading': "List definition", "coll_id": coll_id, "type_id": "_list", "orig_id": "orig_list_id", "continuation_url": entitydata_list_type_url(coll_id, "_list"), "fields": [ context_field_row( { "field_id": "List_id" # fields[0] , "field_name": "entity_id", "field_value_type": "annal:Slug", "field_label": "List Id", "field_render_type": "Slug", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12;medium:0,6") # , "field_value": (Supplied separately, below) , "options": [] }, { "field_id": "List_type" # fields[1] , "field_name": "List_type", "field_value_type": "annal:List_type", "field_label": "List display type", "field_render_type": "Enum_choice", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12;medium:6,6"), "field_value": "Enum_list_type/List", "options": [] # ["list", "grid"] }), context_field_row({ "field_id": "List_label" # fields[2] , "field_name": "List_label", "field_value_type": "annal:Text", "field_label": "Label", "field_render_type": "Text", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12") # , "field_value": (Supplied separately, below) , "options": [] }), context_field_row({ "field_id": "List_comment" # fields[3] , "field_name": "List_comment", "field_label": "Help", "field_value_type": "annal:Richtext", "field_render_type": "Markdown", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12") # , "field_value": (Supplied separately, below) , "options": [] }), context_field_row( { "field_id": "List_default_type" # fields[4] , "field_name": "List_default_type", "field_value_type": "annal:Type", "field_label": "Default type", "field_render_type": "Enum_optional", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12;medium:0,6"), "field_value": "_type/Default_type", "options": [] }, { "field_id": "List_default_view" # fields[5] , "field_name": "List_default_view", "field_value_type": "annal:View", "field_label": "Default view", "field_render_type": "Enum_optional", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12;medium:6,6"), "field_value": "_view/Default_view", "options": [] }), context_field_row({ "field_id": "List_entity_selector" # fields[6] , "field_name": "List_entity_selector", "field_value_type": "annal:Text", "field_label": "Selector", "field_render_type": "Text", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12"), "field_value": "ALL", "options": [] }), context_field_row({ "field_id": "List_target_type" # fields[7] , "field_name": "List_target_type", "field_value_type": "annal:Identifier", "field_label": "List entity type", "field_render_type": "Identifier", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12"), "field_value": "", "options": [] }), { "field_id": "List_fields" # fields[8] , "field_name": "List_fields", "field_value_type": "annal:Field_group", "field_label": "Fields", "field_render_type": "RepeatGroupRow", "field_value_mode": "Value_direct", "field_placement": get_placement_classes("small:0,12"), "field_value": list_fields, "options": [] } ] }) if list_id: context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = list_id context_dict['fields'][1]['row_field_descs'][0][ 'field_value'] = list_label context_dict['fields'][2]['row_field_descs'][0][ 'field_value'] = list_descr context_dict['orig_id'] = list_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordtype_entity_view_context_data( coll_id="testcoll", type_id="", orig_id=None, type_ids=[], action=None, update="RecordType", type_uri=None, supertype_uris=None #@@ need to deal with these. ): if type_id: type_label = "%s %s/%s"%(update, coll_id, type_id) type_descr = "%s help for %s in collection %s"%(update, type_id, coll_id) else: type_label = "%s data ... (%s/%s)"%(update, coll_id, type_id) type_descr = "%s description ... (%s/%s)"%(update, coll_id, type_id) context_dict = ( { 'title': "%s - Type definition - Collection %s"%(type_label, coll_id) , 'heading': "Type definition" , 'coll_id': coll_id , 'type_id': '_type' , 'orig_id': 'orig_type_id' , 'fields': [ context_field_row( { 'field_id': 'Type_id' , 'field_name': 'entity_id' , 'field_value_type': 'annal:Slug' , 'field_label': 'Type Id' , 'field_render_type': 'EntityId' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }) , context_field_row( { 'field_id': 'Type_label' , 'field_name': 'Type_label' , 'field_value_type': 'annal:Text' , 'field_label': 'Label' , 'field_render_type': 'Text' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': type_label , 'options': [] }) , context_field_row( { 'field_id': 'Type_comment' , 'field_name': 'Type_comment' , 'field_label': 'Comment' , 'field_value_type': 'annal:Richtext' , 'field_render_type': 'Markdown' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': type_descr , 'options': [] }) , context_field_row( { 'field_id': 'Type_uri' , 'field_name': 'Type_uri' , 'field_value_type': 'annal:Identifier' , 'field_label': 'Type URI' , 'field_render_type': 'Identifier' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12') # , 'field_value': (Supplied separately) , 'options': [] }) , { 'field_id': 'Type_supertype_uris' , 'field_name': 'Type_supertype_uris' , 'field_value_type': 'annal:Type_supertype_uri' , 'field_label': 'Supertype URIs' , 'field_render_type': 'RepeatGroupRow' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12') # , 'field_value': (Supplied separately) , 'options': [] } , context_field_row( { 'field_id': 'Type_view' , 'field_name': 'Type_view' , 'field_value_type': 'annal:View' , 'field_label': 'Default view' , 'field_render_type': 'Enum_optional' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_id': 'Type_list' , 'field_name': 'Type_list' , 'field_value_type': 'annal:List' , 'field_label': 'Default list' , 'field_render_type': 'Enum_optional' , 'field_value_mode': 'Value_direct' , 'field_placement': get_placement_classes('small:0,12;medium:6,6') # , 'field_value': (Supplied separately) , 'options': [] }) ] , 'continuation_url': entitydata_list_type_url(coll_id, "_type") }) if type_id: type_url = recordtype_url(coll_id=coll_id, type_id=type_id) context_dict['fields'][0]['row_field_descs'][0]['field_value'] = type_id context_dict['fields'][3]['row_field_descs'][0]['field_value'] = type_url or "" context_dict['orig_id'] = type_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordfield_entity_view_context_data( coll_id="testcoll", field_id=None, orig_id=None, type_ids=[], action=None, update="Field" ): if field_id: field_label = "%s %s/_field/%s"%(update, coll_id, field_id) field_descr = "%s help for %s in collection %s"%(update, field_id, coll_id) else: field_label = "%s data ... (testcoll/_field)"%(update) field_descr = "%s description ... (testcoll/_field)"%(update) padding_placement = Placement( width=make_field_width(sw=0, mw=6, lw=6), offset=make_field_offset(so=0, mo=0, lo=0), display=make_field_display(sd=False, md=True, ld=True), field="hide-for-small-only medium-6 large-6 columns", label="small-4 columns", value="small-8 columns" ) context_dict = ( { "title": "%s - Field definition - Collection %s"%(field_label, coll_id) , 'heading': "Field definition" , 'coll_id': coll_id , 'type_id': "_field" , 'orig_id': "orig_field_id" , 'fields': [ context_field_row( { 'field_id': "Field_id" # 0 (0,0) , 'field_name': "entity_id" , 'field_label': "Field Id" , 'field_value_type': "annal:Slug" , 'field_render_type': "EntityId" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:..." , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_property_uri': 'annal:id' , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field id)" , 'field_default_value': None # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_id': "Field_render_type" # 1 (0,1) , 'field_name': "Field_render_type" , 'field_label': "Render type" , 'field_value_type': "annal:Slug" , 'field_render_type': "Enum_choice" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_render_type" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_ref_type': "Enum_render_type" , 'field_ref_field': None , 'field_placeholder': "(field render type)" , 'field_default_value': "Text" , 'field_value': "Text" , 'options': [] }) , context_field_row( { 'field_id': "Field_value_type" # 2 (1,0) , 'field_name': "Field_value_type" , 'field_label': "Value type" , 'field_value_type': "annal:Identifier" , 'field_render_type': "Identifier" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_value_type" , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field value type)" , 'field_default_value': "annal:Text" , 'field_value': "annal:Text" , 'options': [] }, { 'field_id': "Field_value_mode" # 3 (1,1) , 'field_name': "Field_value_mode" , 'field_label': "Value mode" , 'field_value_type': "annal:Slug" , 'field_render_type': "Enum_choice" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_value_mode" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_ref_type': "Enum_value_mode" , 'field_ref_field': None , 'field_placeholder': "(field value mode)" , 'field_default_value': "Value_direct" , 'field_value': "Value_direct" , 'options': [] }) , context_field_row( { 'field_id': "Field_label" # 4 (2,0) , 'field_name': "Field_label" , 'field_label': "Label" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "rdfs:label" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field label)" , 'field_default_value': "" , 'field_value': field_label , 'options': [] }) , context_field_row( { 'field_id': "Field_comment" # 5 (3,0) , 'field_name': "Field_comment" , 'field_label': "Help" , 'field_value_type': "annal:Longtext" , 'field_render_type': "Textarea" , 'field_value_mode': "Value_direct" , 'field_property_uri': "rdfs:comment" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field usage commentary or help text)" , 'field_default_value': "" , 'field_value': field_descr , 'options': [] }) , context_field_row( { 'field_id': "Field_property" # 6 (4,0) , 'field_name': "Field_property" , 'field_label': "Property URI" , 'field_value_type': "annal:Identifier" , 'field_render_type': "Identifier" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:property_uri" , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field URI or CURIE)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }, { 'field_id': "Field_placement" # 7 (4,1) , 'field_name': "Field_placement" , 'field_label': "Position/size" , 'field_value_type': "annal:Placement" , 'field_render_type': "Placement" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_placement" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field position and size)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_typeref" # 8 (5,0) , 'field_name': "Field_typeref" , 'field_label': "Refer to type" , 'field_value_type': "annal:Slug" , 'field_render_type': "Enum_optional" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_ref_type" , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_ref_type': "_type" , 'field_ref_field': None , 'field_placeholder': "(no type selected)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }, { 'field_id': "Field_fieldref" # 9 (5,1) , 'field_name': "Field_fieldref" , 'field_label': "Refer to field" , 'field_value_type': "annal:Identifier" , 'field_render_type': "Identifier" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_ref_field" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field URI or CURIE)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_placeholder" # 10 (6,0) , 'field_name': "Field_placeholder" , 'field_label': "Placeholder" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:placeholder" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(placeholder text)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_default" # 11 (7,0) , 'field_name': "Field_default" , 'field_label': "Default" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:default_value" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None , 'field_placeholder': "(field default value)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_groupref" # 12 (8,0) , 'field_name': "Field_groupref" , 'field_label': "Field group" , 'field_value_type': "annal:Slug" , 'field_render_type': "Enum_optional" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:group_ref" , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_ref_type': "_group" , 'field_ref_field': None , 'field_placeholder': "(no field group selected)" , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_repeat_label_add" # 13 (9,0) , 'field_name': "Field_repeat_label_add" , 'field_label': "Add value label" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:repeat_label_add" , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_ref_type': None , 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "" , 'field_value': "" , 'options': [] }, { 'field_id': "Field_repeat_label_delete" # 14 (9,1) , 'field_name': "Field_repeat_label_delete" , 'field_label': "Delete value label" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:repeat_label_delete" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_ref_type': None , 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_entity_type" # 15 (10,0) , 'field_name': "Field_entity_type" , 'field_label': "Entity type" , 'field_value_type': "annal:Identifier" , 'field_render_type': "Identifier" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_entity_type" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "" , 'field_value': "" , 'options': [] }) , context_field_row( { 'field_id': "Field_restrict" # 16 (11,0) , 'field_name': "Field_restrict" , 'field_label': "Value restriction" , 'field_value_type': "annal:Text" , 'field_render_type': "Text" , 'field_value_mode': "Value_direct" , 'field_property_uri': "annal:field_ref_restriction" , 'field_placement': get_placement_classes('small:0,12') , 'field_ref_type': None , 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "" , 'field_value': "" , 'options': [] }) ] , 'continuation_url': entitydata_list_type_url(coll_id, "_field") }) if field_id: context_dict['fields'][0]['row_field_descs'][0]['field_value'] = field_id context_dict['orig_id'] = field_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def entitydata_recordtype_view_context_data(entity_id=None, orig_id=None, type_id="testtype", type_uri=None, type_ids=[], action=None, update="Entity"): context_dict = ({ 'title': "Collection testcoll", 'coll_id': 'testcoll', 'type_id': type_id, 'orig_id': 'orig_entity_id', 'fields': [ { 'field_label': 'Id', 'field_name': 'entity_id', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_id': 'Type_id', 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Label', 'field_name': 'Type_label', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_label', 'field_value_type': 'annal:Text', 'field_value': '%s data ... (testcoll/testtype)' % (update), 'options': [] }, { 'field_label': 'Comment', 'field_name': 'Type_comment', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_comment', 'field_value_type': 'annal:Longtext', 'field_value': '%s description ... (testcoll/testtype)' % (update), 'options': [] }, { 'field_label': 'URI', 'field_name': 'Type_uri', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_uri', 'field_value_type': 'annal:Identifier', 'field_value': "", 'options': [] } ], 'continuation_url': entitydata_list_type_url("testcoll", type_id) }) if entity_id: context_dict['fields'][0]['field_value'] = entity_id context_dict['fields'][1][ 'field_value'] = '%s testcoll/testtype/%s' % (update, entity_id) context_dict['fields'][2][ 'field_value'] = '%s coll testcoll, type testtype, entity %s' % ( update, entity_id) context_dict['orig_id'] = entity_id if type_uri: context_dict['fields'][3][ 'field_value'] = type_uri # TestBasePath + "/c/%s/d/%s/%s/"%("testcoll", "testtype", entity_id) if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def entitydata_recordtype_view_context_data(entity_id=None, orig_id=None, coll_id="testcoll", type_id="testtype", type_uri=None, type_ids=[], action=None, update="Entity", view_label="Type definition"): if entity_id: entity_label = '%s %s/%s/%s' % (update, coll_id, type_id, entity_id) entity_descr = '%s coll %s, type %s, entity %s' % (update, coll_id, type_id, entity_id) else: entity_label = '%s data ... (%s/%s)' % (update, coll_id, type_id) entity_descr = '%s description ... (%s/%s)' % (update, coll_id, type_id) context_dict = ({ 'title': "%s - %s - Collection %s" % (entity_label, view_label, coll_id), 'heading': view_label, 'coll_id': coll_id, 'type_id': type_id, 'orig_id': 'orig_entity_id', 'fields': [ context_field_row({ 'field_label': 'Type Id', 'field_name': 'entity_id', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_id': 'Type_id', 'field_value_mode': 'Value_direct', 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }), context_field_row({ 'field_label': 'Label', 'field_name': 'Type_label', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_label', 'field_value_mode': 'Value_direct', 'field_value_type': 'annal:Text', 'field_value': entity_label, 'options': [] }), context_field_row({ 'field_label': 'Comment', 'field_name': 'Type_comment', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_comment', 'field_value_mode': 'Value_direct', 'field_value_type': 'annal:Richtext', 'field_value': entity_descr, 'options': [] }), context_field_row({ 'field_label': 'Type URI', 'field_name': 'Type_uri', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_uri', 'field_value_mode': 'Value_direct', 'field_value_type': 'annal:Identifier', 'field_value': "", 'options': [] }) ], 'continuation_url': entitydata_list_type_url(coll_id, type_id) }) if entity_id: context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = entity_id context_dict['orig_id'] = entity_id if type_uri: context_dict['fields'][3]['row_field_descs'][0][ 'field_value'] = type_uri if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordfield_entity_view_context_data(coll_id="testcoll", field_id=None, orig_id=None, type_ids=[], action=None, update="Field"): if field_id: field_label = "%s %s/_field/%s" % (update, coll_id, field_id) field_descr = "%s help for %s in collection %s" % (update, field_id, coll_id) else: field_label = "%s data ... (testcoll/_field)" % (update) field_descr = "%s description ... (testcoll/_field)" % (update) padding_placement = Placement( width=make_field_width(sw=0, mw=6, lw=6), offset=make_field_offset(so=0, mo=0, lo=0), display=make_field_display(sd=False, md=True, ld=True), field="hide-for-small-only medium-6 large-6 columns", label="small-4 columns", value="small-8 columns") context_dict = ({ "title": "%s - Field definition - Collection %s" % (field_label, coll_id), 'heading': "Field definition", 'coll_id': coll_id, 'type_id': "_field", 'orig_id': "orig_field_id", 'fields': [ context_field_row( { 'field_id': "Field_id" # 0 (0,0) , 'field_name': "entity_id", 'field_label': "Field Id", 'field_value_type': "annal:Slug", 'field_render_type': "EntityId", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:...", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_property_uri': 'annal:id', 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field id)", 'field_default_value': None # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_id': "Field_render_type" # 1 (0,1) , 'field_name': "Field_render_type", 'field_label': "Render type", 'field_value_type': "annal:Slug", 'field_render_type': "Enum_choice", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_render_type", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_ref_type': "Enum_render_type", 'field_ref_field': None, 'field_placeholder': "(field render type)", 'field_default_value': "Text", 'field_value': "Text", 'options': [] }), context_field_row( { 'field_id': "Field_value_type" # 2 (1,0) , 'field_name': "Field_value_type", 'field_label': "Value type", 'field_value_type': "annal:Identifier", 'field_render_type': "Identifier", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_value_type", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field value type)", 'field_default_value': "annal:Text", 'field_value': "annal:Text", 'options': [] }, { 'field_id': "Field_value_mode" # 3 (1,1) , 'field_name': "Field_value_mode", 'field_label': "Value mode", 'field_value_type': "annal:Slug", 'field_render_type': "Enum_choice", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_value_mode", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_ref_type': "Enum_value_mode", 'field_ref_field': None, 'field_placeholder': "(field value mode)", 'field_default_value': "Value_direct", 'field_value': "Value_direct", 'options': [] }), context_field_row({ 'field_id': "Field_label" # 4 (2,0) , 'field_name': "Field_label", 'field_label': "Label", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "rdfs:label", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field label)", 'field_default_value': "", 'field_value': field_label, 'options': [] }), context_field_row({ 'field_id': "Field_comment" # 5 (3,0) , 'field_name': "Field_comment", 'field_label': "Help", 'field_value_type': "annal:Longtext", 'field_render_type': "Textarea", 'field_value_mode': "Value_direct", 'field_property_uri': "rdfs:comment", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field usage commentary or help text)", 'field_default_value': "", 'field_value': field_descr, 'options': [] }), context_field_row( { 'field_id': "Field_property" # 6 (4,0) , 'field_name': "Field_property", 'field_label': "Property URI", 'field_value_type': "annal:Identifier", 'field_render_type': "Identifier", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:property_uri", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field URI or CURIE)", 'field_default_value': "", 'field_value': "", 'options': [] }, { 'field_id': "Field_placement" # 7 (4,1) , 'field_name': "Field_placement", 'field_label': "Position/size", 'field_value_type': "annal:Placement", 'field_render_type': "Placement", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_placement", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field position and size)", 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row( { 'field_id': "Field_typeref" # 8 (5,0) , 'field_name': "Field_typeref", 'field_label': "Refer to type", 'field_value_type': "annal:Slug", 'field_render_type': "Enum_optional", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_ref_type", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_ref_type': "_type", 'field_ref_field': None, 'field_placeholder': "(no type selected)", 'field_default_value': "", 'field_value': "", 'options': [] }, { 'field_id': "Field_fieldref" # 9 (5,1) , 'field_name': "Field_fieldref", 'field_label': "Refer to field", 'field_value_type': "annal:Identifier", 'field_render_type': "Identifier", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_ref_field", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field URI or CURIE)", 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row({ 'field_id': "Field_placeholder" # 10 (6,0) , 'field_name': "Field_placeholder", 'field_label': "Placeholder", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:placeholder", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(placeholder text)", 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row({ 'field_id': "Field_default" # 11 (7,0) , 'field_name': "Field_default", 'field_label': "Default", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:default_value", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None, 'field_placeholder': "(field default value)", 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row({ 'field_id': "Field_groupref" # 12 (8,0) , 'field_name': "Field_groupref", 'field_label': "Field group", 'field_value_type': "annal:Slug", 'field_render_type': "Enum_optional", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:group_ref", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_ref_type': "_group", 'field_ref_field': None, 'field_placeholder': "(no field group selected)", 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row( { 'field_id': "Field_repeat_label_add" # 13 (9,0) , 'field_name': "Field_repeat_label_add", 'field_label': "Add value label", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:repeat_label_add", 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_ref_type': None, 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "", 'field_value': "", 'options': [] }, { 'field_id': "Field_repeat_label_delete" # 14 (9,1) , 'field_name': "Field_repeat_label_delete", 'field_label': "Delete value label", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:repeat_label_delete", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_ref_type': None, 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row({ 'field_id': "Field_entity_type" # 15 (10,0) , 'field_name': "Field_entity_type", 'field_label': "Entity type", 'field_value_type': "annal:Identifier", 'field_render_type': "Identifier", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_entity_type", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "", 'field_value': "", 'options': [] }), context_field_row({ 'field_id': "Field_restrict" # 16 (11,0) , 'field_name': "Field_restrict", 'field_label': "Value restriction", 'field_value_type': "annal:Text", 'field_render_type': "Text", 'field_value_mode': "Value_direct", 'field_property_uri': "annal:field_ref_restriction", 'field_placement': get_placement_classes('small:0,12'), 'field_ref_type': None, 'field_ref_field': None # , 'field_placeholder': "..." , 'field_default_value': "", 'field_value': "", 'options': [] }) ], 'continuation_url': entitydata_list_type_url(coll_id, "_field") }) if field_id: context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = field_id context_dict['orig_id'] = field_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordlist_view_context_data( coll_id="testcoll", list_id=None, orig_id=None, view_ids=[], action=None, update="RecordList" ): if list_id: list_label = "%s %s/%s"%(update, coll_id, list_id) list_descr = "%s help for %s/%s"%(update, coll_id, list_id) else: list_label = "%s list (%s/@@list_id@@)"%(update, coll_id) list_descr = "%s description ... (%s/%s)"%(update, coll_id, list_id) list_fields = ( [ { "annal:field_id": layout.FIELD_TYPEID+"/Entity_id" , "annal:field_placement": "small:0,3" } , { "annal:field_id": layout.FIELD_TYPEID+"/Entity_label" , "annal:field_placement": "small:3,9" } ]) context_dict = ( { "title": "%s - List definition - Collection %s"%(list_label, coll_id) , 'heading': "List definition" , "coll_id": coll_id , "type_id": "_list" , "orig_id": "orig_list_id" , "continuation_url": entitydata_list_type_url(coll_id, "_list") , "fields": [ context_field_row( { "field_id": "List_id" # fields[0] , "field_name": "entity_id" , "field_value_type": "annal:Slug" , "field_label": "List Id" , "field_render_type": "Slug" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12;medium:0,6") # , "field_value": (Supplied separately, below) , "options": [] }, { "field_id": "List_type" # fields[1] , "field_name": "List_type" , "field_value_type": "annal:List_type" , "field_label": "List display type" , "field_render_type": "Enum_choice" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12;medium:6,6") , "field_value": "Enum_list_type/List" , "options": [] # ["list", "grid"] }) , context_field_row( { "field_id": "List_label" # fields[2] , "field_name": "List_label" , "field_value_type": "annal:Text" , "field_label": "Label" , "field_render_type": "Text" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12") # , "field_value": (Supplied separately, below) , "options": [] }) , context_field_row( { "field_id": "List_comment" # fields[3] , "field_name": "List_comment" , "field_label": "Help" , "field_value_type": "annal:Richtext" , "field_render_type": "Markdown" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12") # , "field_value": (Supplied separately, below) , "options": [] }) , context_field_row( { "field_id": "List_default_type" # fields[4] , "field_name": "List_default_type" , "field_value_type": "annal:Type" , "field_label": "Default type" , "field_render_type": "Enum_optional" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12;medium:0,6") , "field_value": "_type/Default_type" , "options": [] }, { "field_id": "List_default_view" # fields[5] , "field_name": "List_default_view" , "field_value_type": "annal:View" , "field_label": "Default view" , "field_render_type": "Enum_optional" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12;medium:6,6") , "field_value": "_view/Default_view" , "options": [] }) , context_field_row( { "field_id": "List_entity_selector" # fields[6] , "field_name": "List_entity_selector" , "field_value_type": "annal:Text" , "field_label": "Selector" , "field_render_type": "Text" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12") , "field_value": "ALL" , "options": [] }) , context_field_row( { "field_id": "List_target_type" # fields[7] , "field_name": "List_target_type" , "field_value_type": "annal:Identifier" , "field_label": "List entity type" , "field_render_type": "Identifier" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12") , "field_value": "" , "options": [] }) , { "field_id": "List_fields" # fields[8] , "field_name": "List_fields" , "field_value_type": "annal:Field_group" , "field_label": "Fields" , "field_render_type": "RepeatGroupRow" , "field_value_mode": "Value_direct" , "field_placement": get_placement_classes("small:0,12") , "field_value": list_fields , "options": [] } ] }) if list_id: context_dict['fields'][0]['row_field_descs'][0]['field_value'] = list_id context_dict['fields'][1]['row_field_descs'][0]['field_value'] = list_label context_dict['fields'][2]['row_field_descs'][0]['field_value'] = list_descr context_dict['orig_id'] = list_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordview_entity_view_context_data(coll_id="testcoll", view_id="", orig_id=None, view_ids=[], action=None, target_record_type="annal:View", add_field=None, remove_field=None, move_up=None, move_down=None, update="RecordView"): if view_id: view_label = "%s %s/%s" % (update, coll_id, view_id) view_descr = "%s help for %s in collection %s" % (update, view_id, coll_id) else: view_label = "%s data ... (%s/%s)" % (update, coll_id, view_id) view_descr = "%s description ... (%s/%s)" % (update, coll_id, view_id) # Target record fields listed in the view description view_fields = ([ { 'annal:field_id': layout.FIELD_TYPEID + "/Entity_id", 'annal:field_placement': "small:0,12;medium:0,6" }, { 'annal:field_id': layout.FIELD_TYPEID + "/Entity_type", 'annal:field_placement': "small:0,12;medium:6,6" }, { 'annal:field_id': layout.FIELD_TYPEID + "/Entity_label", 'annal:property_uri': "rdfs:label", 'annal:field_placement': "small:0,12" }, { 'annal:field_id': layout.FIELD_TYPEID + "/Entity_comment", 'annal:property_uri': "rdfs:comment" # , 'annal:field_placement': field3_placement } ]) # NOTE: context['fields'][i]['field_id'] comes from FieldDescription instance via # bound_field, so type prefix is stripped. This does not apply to the field # ids actually coming from the view form. context_dict = ({ 'title': "%s - View definition - Collection %s" % (view_label, coll_id), 'heading': "View definition", 'coll_id': coll_id, 'type_id': '_view', 'orig_id': 'orig_view_id', 'record_type': 'annal:View', 'fields': [ context_field_row({ 'field_id': 'View_id' # fields[0] , 'field_name': 'entity_id', 'field_value_type': 'annal:Slug', 'field_label': 'View Id', 'field_render_type': 'Enum_render_type/EntityId', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }), context_field_row({ 'field_id': 'View_label' # fields[1] , 'field_name': 'View_label', 'field_value_type': 'annal:Text', 'field_label': 'Label', 'field_render_type': 'Enum_render_type/Text', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': view_label, 'options': [] }), context_field_row({ 'field_id': 'View_comment' # fields[2] , 'field_name': 'View_comment', 'field_label': 'Help', 'field_value_type': 'annal:Richtext', 'field_render_type': 'Enum_render_type/Markdown', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': view_descr, 'options': [] }), context_field_row({ 'field_id': 'View_target_type' # fields[3] , 'field_name': 'View_target_type', 'field_value_type': 'annal:Identifier', 'field_label': 'View entity type', 'field_render_type': 'Enum_render_type/Identifier', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': target_record_type, 'options': [] }), context_field_row({ 'field_id': 'View_edit_view' # fields[4] , 'field_name': 'View_edit_view', 'field_value_type': 'annal:Boolean', 'field_label': 'Editable view?', 'field_render_type': 'Enum_render_type/CheckBox', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value': True, 'options': [] }), { "field_id": 'View_fields' # fields[5] , 'field_name': 'View_fields', 'field_value_type': 'annal:Field_group', 'field_label': 'Fields', 'field_render_type': 'Enum_render_type/Group_Seq_Row', 'field_value_mode': 'Enum_value_mode/Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': view_fields, 'options': [] } ], 'continuation_url': entitydata_list_type_url(coll_id, "_view") }) if view_id: context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = view_id context_dict['fields'][1]['row_field_descs'][0][ 'field_value'] = view_label context_dict['fields'][2]['row_field_descs'][0][ 'field_value'] = '%s help for %s in collection %s' % ( update, view_id, coll_id) context_dict['orig_id'] = view_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action if add_field: context_dict['fields'][5]['field_value'].append({ 'annal:field_id': None, 'annal:property_uri': None, 'annal:field_placement': None }) if remove_field: context_dict['fields'][5]['field_value'][3:4] = [] if move_up: assert move_up == [2, 3] fields = context_dict['fields'][5]['field_value'] context_dict['fields'][5]['field_value'] = [ fields[i] for i in [0, 2, 3, 1] ] if move_down: assert move_down == [1] fields = context_dict['fields'][5]['field_value'] context_dict['fields'][5]['field_value'] = [ fields[i] for i in [0, 2, 1, 3] ] return context_dict
def recordview_entity_view_context_data( coll_id="testcoll", view_id="", orig_id=None, view_ids=[], action=None, target_record_type="annal:View", add_field=None, remove_field=None, move_up=None, move_down=None, update="RecordView" ): if view_id: view_label = "%s %s/%s"%(update, coll_id, view_id) view_descr = "%s help for %s in collection %s"%(update, view_id, coll_id) else: view_label = "%s data ... (%s/%s)"%(update, coll_id, view_id) view_descr = "%s description ... (%s/%s)"%(update, coll_id, view_id) # Target record fields listed in the view description view_fields = ( [ { 'annal:field_id': layout.FIELD_TYPEID+"/Entity_id" , 'annal:field_placement': "small:0,12;medium:0,6" } , { 'annal:field_id': layout.FIELD_TYPEID+"/Entity_type" , 'annal:field_placement': "small:0,12;medium:6,6" } , { 'annal:field_id': layout.FIELD_TYPEID+"/Entity_label" , 'annal:property_uri': "rdfs:label" , 'annal:field_placement': "small:0,12" } , { 'annal:field_id': layout.FIELD_TYPEID+"/Entity_comment" , 'annal:property_uri': "rdfs:comment" # , 'annal:field_placement': field3_placement } ]) # NOTE: context['fields'][i]['field_id'] comes from FieldDescription instance via # bound_field, so type prefix is stripped. This does not apply to the field # ids actually coming from the view form. context_dict = ( { 'title': "%s - View definition - Collection %s"%(view_label, coll_id) , 'heading': "View definition" , 'coll_id': coll_id , 'type_id': '_view' , 'orig_id': 'orig_view_id' , 'record_type': 'annal:View' , 'fields': [ context_field_row( { 'field_id': 'View_id' # fields[0] , 'field_name': 'entity_id' , 'field_value_type': 'annal:Slug' , 'field_label': 'View Id' , 'field_render_type': 'Enum_render_type/EntityId' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }) , context_field_row( { 'field_id': 'View_label' # fields[1] , 'field_name': 'View_label' , 'field_value_type': 'annal:Text' , 'field_label': 'Label' , 'field_render_type': 'Enum_render_type/Text' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': view_label , 'options': [] }) , context_field_row( { 'field_id': 'View_comment' # fields[2] , 'field_name': 'View_comment' , 'field_label': 'Help' , 'field_value_type': 'annal:Richtext' , 'field_render_type': 'Enum_render_type/Markdown' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': view_descr , 'options': [] }) , context_field_row( { 'field_id': 'View_target_type' # fields[3] , 'field_name': 'View_target_type' , 'field_value_type': 'annal:Identifier' , 'field_label': 'View entity type' , 'field_render_type': 'Enum_render_type/Identifier' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': target_record_type , 'options': [] }) , context_field_row( { 'field_id': 'View_edit_view' # fields[4] , 'field_name': 'View_edit_view' , 'field_value_type': 'annal:Boolean' , 'field_label': 'Editable view?' , 'field_render_type': 'Enum_render_type/CheckBox' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_value': True , 'options': [] }) , { "field_id": 'View_fields' # fields[5] , 'field_name': 'View_fields' , 'field_value_type': 'annal:Field_group' , 'field_label': 'Fields' , 'field_render_type': 'Enum_render_type/Group_Seq_Row' , 'field_value_mode': 'Enum_value_mode/Value_direct' , 'field_placement': get_placement_classes('small:0,12') , 'field_value': view_fields , 'options': [] } ] , 'continuation_url': entitydata_list_type_url(coll_id, "_view") }) if view_id: context_dict['fields'][0]['row_field_descs'][0]['field_value'] = view_id context_dict['fields'][1]['row_field_descs'][0]['field_value'] = view_label context_dict['fields'][2]['row_field_descs'][0]['field_value'] = '%s help for %s in collection %s'%(update, view_id, coll_id) context_dict['orig_id'] = view_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action if add_field: context_dict['fields'][5]['field_value'].append( { 'annal:field_id': None , 'annal:property_uri': None , 'annal:field_placement': None }) if remove_field: context_dict['fields'][5]['field_value'][3:4] = [] if move_up: assert move_up == [2,3] fields = context_dict['fields'][5]['field_value'] context_dict['fields'][5]['field_value'] = [ fields[i] for i in [0,2,3,1] ] if move_down: assert move_down == [1] fields = context_dict['fields'][5]['field_value'] context_dict['fields'][5]['field_value'] = [ fields[i] for i in [0,2,1,3] ] return context_dict
def __init__(self, collection, recordfield, view_context=None, field_property=None, field_placement=None, group_view=None, group_ids_seen=[], field_placement_classes=None): """ Creates a field description value to use in a context value when rendering a form. Values defined here are mentioned in field rendering templates. The FieldDescription object behaves as a dictionary containing the various field attributes. collection is a collection from which data is being rendered. Used when generating enumerated values. recordfield is a RecordField value or dictionary containing details of the field for which a descriptor is constructed. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. field_property if supplied, overrides the field property URI from `recordfield` field_placement if supplied, overrides field placement from `recordfield` group_view if the field itself references a list of fields, this is a RecordGroup value or dictionary containing the referenced list of fields. group_ids_seen group ids expanded so far, to check for recursive reference. field_classes if supplied, overrides field placement classes derived from value for `field_placement` string. """ self._collection = collection # log.debug("FieldDescription recordfield: %r"%(recordfield,)) field_id = recordfield.get(ANNAL.CURIE.id, "_missing_id_") field_name = recordfield.get(ANNAL.CURIE.field_name, field_id) # Field name in form field_label = recordfield.get(RDFS.CURIE.label, "") field_property = field_property or recordfield.get( ANNAL.CURIE.property_uri, "") field_placement = field_placement or recordfield.get( ANNAL.CURIE.field_placement, "") field_placement_c = field_placement_classes or get_placement_classes( field_placement) field_placeholder = recordfield.get(ANNAL.CURIE.placeholder, "") field_render_type = extract_entity_id( recordfield.get(ANNAL.CURIE.field_render_type, "")) field_value_mode = extract_entity_id( recordfield.get(ANNAL.CURIE.field_value_mode, "@@FieldDescription:value_mode@@")) field_ref_type = extract_entity_id( recordfield.get(ANNAL.CURIE.field_ref_type, None)) field_entity_type = recordfield.get(ANNAL.CURIE.field_entity_type, None) field_group_ref = extract_entity_id( recordfield.get(ANNAL.CURIE.group_ref, None)) self._field_desc = ({ 'field_id': field_id, 'field_name': field_name, 'field_instance_name': field_name, 'field_render_type': field_render_type, 'field_value_mode': field_value_mode, 'field_value_type': recordfield.get(ANNAL.CURIE.field_value_type, ""), 'field_label': field_label, 'field_help': recordfield.get(RDFS.CURIE.comment, ""), 'field_property_uri': field_property, 'field_placement': field_placement_c, 'field_placeholder': field_placeholder, 'field_default_value': recordfield.get(ANNAL.CURIE.default_value, None), 'field_ref_type': field_ref_type, 'field_ref_field': recordfield.get(ANNAL.CURIE.field_ref_field, None), 'field_ref_restriction': recordfield.get(ANNAL.CURIE.field_ref_restriction, "ALL"), 'field_entity_type': field_entity_type, 'field_choices': None # , 'field_choice_labels': None # , 'field_choice_links': None , 'field_group_ref': field_group_ref, 'group_label': None, 'group_add_label': None, 'group_delete_label': None, 'group_view': None, 'group_field_descs': None, 'field_render_label': get_label_renderer(field_render_type, field_value_mode), 'field_render_view': get_view_renderer(field_render_type, field_value_mode), 'field_render_edit': get_edit_renderer(field_render_type, field_value_mode), 'field_render_label_view': get_label_view_renderer(field_render_type, field_value_mode), 'field_render_label_edit': get_label_edit_renderer(field_render_type, field_value_mode), 'field_render_colhead': get_col_head_renderer(field_render_type, field_value_mode), 'field_render_colhead_view': get_col_head_view_renderer(field_render_type, field_value_mode), 'field_render_colhead_edit': get_col_head_edit_renderer(field_render_type, field_value_mode), 'field_render_colview': get_col_view_renderer(field_render_type, field_value_mode), 'field_render_coledit': get_col_edit_renderer(field_render_type, field_value_mode), 'field_render_mode': get_mode_renderer(field_render_type, field_value_mode), 'field_value_mapper': get_value_mapper(field_render_type) }) self._field_suffix_index = 0 # No dup self._field_suffix = "" # If field references type, pull in copy of type id and link values type_ref = self._field_desc['field_ref_type'] if type_ref: restrict_values = self._field_desc['field_ref_restriction'] entity_finder = EntityFinder(collection, selector=restrict_values) # Determine subtypes of field entity type, if specified # @@TODO: subtype logic here is just pig ugly... # need context to provide info that can be used to calculate supertypes # on-the-fly as needed by the field restriction expression. E.g. include # collection object in context. if field_entity_type and restrict_values: field_entity_subtypes = ([ t.get_type_uri() for t in entity_finder.get_collection_uri_subtypes( field_entity_type, altscope="all") ]) self._field_desc[ 'field_entity_subtypes'] = field_entity_subtypes field_view_context = dict( view_context or {}, field={'subtypes': field_entity_subtypes}) else: field_view_context = view_context entities = entity_finder.get_entities_sorted( type_id=type_ref, context=field_view_context, altscope="select") # Note: the options list may be used more than once, so the id generator # returned must be materialized as a list # Uses collections.OrderedfDict to preserve entity ordering self._field_desc['field_choices'] = collections.OrderedDict() if field_render_type in ["Enum_optional", "Enum_choice_opt"]: # Add blank choice for optional selections self._field_desc['field_choices'][''] = FieldChoice( '', label=field_placeholder) for e in entities: eid = e.get_id() val = e.get_type_entity_id() if eid != "_initial_values": self._field_desc['field_choices'][val] = FieldChoice( val, label=e.get_label(), link=e.get_view_url_path()) # log.debug("FieldDescription: typeref %s: %r"% # (self._field_desc['field_ref_type'], list(self._field_desc['field_choices'].items())) # ) # If field references group, pull in field details if group_view: if field_id in group_ids_seen: raise Annalist_Error( field_id, "Recursive field reference in field group") group_ids_seen = group_ids_seen + [field_id] group_label = (field_label or group_view.get( RDFS.CURIE.label, self._field_desc['field_group_ref'])) add_label = recordfield.get(ANNAL.CURIE.repeat_label_add, None) or "Add " + field_id remove_label = recordfield.get(ANNAL.CURIE.repeat_label_delete, None) or "Remove " + field_id group_field_descs = [] for subfield in group_view[ANNAL.CURIE.group_fields]: f = field_description_from_view_field(collection, subfield, view_context, group_ids_seen) group_field_descs.append(f) self._field_desc.update({ 'group_id': field_id, 'group_label': group_label, 'group_add_label': add_label, 'group_delete_label': remove_label, 'group_view': group_view, 'group_field_descs': group_field_descs }) # log.debug("FieldDescription: %s"%field_id) # log.info("FieldDescription._field_desc %r"%(self._field_desc,)) # log.info("FieldDescription.field_placement %r"%(self._field_desc['field_placement'],)) return
def __init__(self, collection, recordfield, view_context=None, field_property=None, field_placement=None, field_list=None, field_ids_seen=[], field_placement_classes=None ): """ Creates a field description value to use in a context value when rendering a form. Values defined here are mentioned in field rendering templates. The FieldDescription object behaves as a dictionary containing the various field attributes. collection is a collection from which data is being rendered. recordfield is a RecordField value or dictionary containing details of the field for which a descriptor is constructed. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. field_property if supplied, overrides the field property URI from `recordfield` field_placement if supplied, overrides field placement from `recordfield` field_list if the field itself contains or references a list of fields, this is that list of fields. field_ids_seen field ids expanded so far, to check for recursive reference. field_placement_classes if supplied, overrides field placement classes derived from value for `field_placement` string. """ self._collection = collection # log.debug("FieldDescription recordfield: %r"%(recordfield,)) field_id = recordfield.get(ANNAL.CURIE.id, "_missing_id_") field_name = recordfield.get(ANNAL.CURIE.field_name, field_id) # Field name in form field_label = recordfield.get(RDFS.CURIE.label, "") field_help = recordfield.get(RDFS.CURIE.comment, "") field_property = field_property or recordfield.get(ANNAL.CURIE.property_uri, "") field_placement = field_placement or recordfield.get(ANNAL.CURIE.field_placement, "") field_placement_c = field_placement_classes or get_placement_classes(field_placement) field_placeholder = recordfield.get(ANNAL.CURIE.placeholder, "") field_tooltip = recordfield.get(ANNAL.CURIE.tooltip, "") field_render_type = extract_entity_id(recordfield.get(ANNAL.CURIE.field_render_type, "")) field_value_mode = extract_entity_id(recordfield.get(ANNAL.CURIE.field_value_mode, "@@FieldDescription:value_mode@@")) field_ref_type = extract_entity_id(recordfield.get(ANNAL.CURIE.field_ref_type, None)) field_entity_type = recordfield.get(ANNAL.CURIE.field_entity_type, None) field_group_ref = extract_entity_id(recordfield.get(ANNAL.CURIE.group_ref, None)) self._field_desc = ( { 'field_id': field_id , 'field_name': field_name , 'field_instance_name': field_name , 'field_render_type': field_render_type , 'field_value_mode': field_value_mode , 'field_value_type': recordfield.get(ANNAL.CURIE.field_value_type, "") , 'field_label': field_label , 'field_help': field_help , 'field_property_uri': field_property , 'field_placement': field_placement_c , 'field_placeholder': field_placeholder , 'field_tooltip': field_tooltip , 'field_tooltip_test': field_tooltip or (field_help) or "" , 'field_default_value': recordfield.get(ANNAL.CURIE.default_value, None) , 'field_ref_type': field_ref_type , 'field_ref_field': recordfield.get(ANNAL.CURIE.field_ref_field, None) , 'field_ref_restriction': recordfield.get(ANNAL.CURIE.field_ref_restriction, "ALL") , 'field_entity_type': field_entity_type , 'field_choices': None , 'field_group_ref': field_group_ref , 'group_label': None , 'group_add_label': None , 'group_delete_label': None , 'group_field_list': None , 'group_field_descs': None , 'field_renderer': FieldRenderer(field_render_type, field_value_mode) , 'field_value_mapper': get_value_mapper(field_render_type) # Used by fieldvaluemap.py }) self._field_suffix_index = 0 # No dup self._field_suffix = "" # If field references type, pull in copy of type id and link values type_ref = self._field_desc['field_ref_type'] if type_ref: restrict_values = self._field_desc['field_ref_restriction'] entity_finder = EntityFinder(collection, selector=restrict_values) entities = entity_finder.get_entities_sorted( type_id=type_ref, context=view_context, altscope="select" ) # Note: the options list may be used more than once, so the id generator # returned must be materialized as a list # Uses collections.OrderedfDict to preserve entity ordering self._field_desc['field_choices'] = OrderedDict() if field_render_type in ["Enum_optional", "Enum_choice_opt"]: # Add blank choice for optional selections self._field_desc['field_choices'][''] = FieldChoice('', label=field_placeholder) for e in entities: eid = e.get_id() val = e.get_type_entity_id() if eid != layout.INITIAL_VALUES_ID: self._field_desc['field_choices'][val] = FieldChoice( val, label=e.get_label(), link=e.get_view_url_path() ) # If field references or contains field list, pull in field details if field_list: if field_id in field_ids_seen: raise Annalist_Error(field_id, "Recursive field reference in field group") field_ids_seen = field_ids_seen + [field_id] group_label = field_label add_label = recordfield.get(ANNAL.CURIE.repeat_label_add, None) or "Add "+field_id remove_label = recordfield.get(ANNAL.CURIE.repeat_label_delete, None) or "Remove "+field_id group_field_descs = [] for subfield in field_list: f = field_description_from_view_field(collection, subfield, view_context, field_ids_seen) group_field_descs.append(f) self._field_desc.update( { 'group_id': field_id , 'group_label': group_label , 'group_add_label': add_label , 'group_delete_label': remove_label , 'group_field_list': field_list # Description from field/group , 'group_field_descs': group_field_descs # Resulting field description list }) # log.debug("FieldDescription: %s"%field_id) # log.info("FieldDescription._field_desc %r"%(self._field_desc,)) # log.info("FieldDescription.field_placement %r"%(self._field_desc['field_placement'],)) return
def recordtype_entity_view_context_data( coll_id="testcoll", type_id="", orig_id=None, type_ids=[], action=None, update="RecordType", type_uri=None, supertype_uris=None #@@ need to deal with these. ): if type_id: type_label = "%s %s/%s" % (update, coll_id, type_id) type_descr = "%s help for %s in collection %s" % (update, type_id, coll_id) else: type_label = "%s data ... (%s/%s)" % (update, coll_id, type_id) type_descr = "%s description ... (%s/%s)" % (update, coll_id, type_id) context_dict = ({ 'title': "%s - Type definition - Collection %s" % (type_label, coll_id), 'heading': "Type definition", 'coll_id': coll_id, 'type_id': '_type', 'orig_id': 'orig_type_id', 'fields': [ context_field_row({ 'field_id': 'Type_id', 'field_name': 'entity_id', 'field_value_type': 'annal:Slug', 'field_label': 'Type Id', 'field_render_type': 'EntityId', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }), context_field_row({ 'field_id': 'Type_label', 'field_name': 'Type_label', 'field_value_type': 'annal:Text', 'field_label': 'Label', 'field_render_type': 'Text', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': type_label, 'options': [] }), context_field_row({ 'field_id': 'Type_comment', 'field_name': 'Type_comment', 'field_label': 'Comment', 'field_value_type': 'annal:Richtext', 'field_render_type': 'Markdown', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12'), 'field_value': type_descr, 'options': [] }), context_field_row({ 'field_id': 'Type_uri', 'field_name': 'Type_uri', 'field_value_type': 'annal:Identifier', 'field_label': 'Type URI', 'field_render_type': 'Identifier', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12') # , 'field_value': (Supplied separately) , 'options': [] }), { 'field_id': 'Type_supertype_uris', 'field_name': 'Type_supertype_uris', 'field_value_type': 'annal:Type_supertype_uri', 'field_label': 'Supertype URIs', 'field_render_type': 'RepeatGroupRow', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12') # , 'field_value': (Supplied separately) , 'options': [] }, context_field_row( { 'field_id': 'Type_view', 'field_name': 'Type_view', 'field_value_type': 'annal:View', 'field_label': 'Default view', 'field_render_type': 'Enum_optional', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12;medium:0,6') # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_id': 'Type_list', 'field_name': 'Type_list', 'field_value_type': 'annal:List', 'field_label': 'Default list', 'field_render_type': 'Enum_optional', 'field_value_mode': 'Value_direct', 'field_placement': get_placement_classes('small:0,12;medium:6,6') # , 'field_value': (Supplied separately) , 'options': [] }) ], 'continuation_url': entitydata_list_type_url(coll_id, "_type") }) if type_id: type_url = recordtype_url(coll_id=coll_id, type_id=type_id) context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = type_id context_dict['fields'][3]['row_field_descs'][0][ 'field_value'] = type_url or "" context_dict['orig_id'] = type_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordlist_view_context_data(coll_id="testcoll", list_id=None, orig_id=None, view_ids=[], action=None, update="RecordList"): list_fields = ([{ "annal:field_id": "Entity_id", "annal:field_placement": "small:0,3" }, { "annal:field_id": "Entity_label", "annal:field_placement": "small:3,9" }]) context_dict = ({ 'title': "Collection %s" % (coll_id), 'coll_id': coll_id, 'type_id': '_list', 'orig_id': 'orig_list_id', 'continuation_url': entitydata_list_type_url(coll_id, "_list"), 'fields': [ { 'field_id': 'List_id' # fields[0] , 'field_label': 'Id', 'field_render_type': 'Slug', 'field_name': 'entity_id', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately, below) , 'options': [] }, { 'field_id': 'List_type' # fields[1] , 'field_label': 'List display type', 'field_render_type': 'Enum_choice', 'field_name': 'List_type', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_type': 'annal:List_type', 'field_value': 'List', 'options': [] # ['list', 'grid'] }, { 'field_id': 'List_label' # fields[2] , 'field_label': 'Label', 'field_render_type': 'Text', 'field_name': 'List_label', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Text' # , 'field_value': (Supplied separately, below) , 'options': [] }, { 'field_id': 'List_comment' # fields[3] , 'field_label': 'Help', 'field_render_type': 'Textarea', 'field_name': 'List_comment', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Longtext' # , 'field_value': (Supplied separately, below) , 'options': [] }, { 'field_id': 'List_default_type' # fields[4] , 'field_label': 'Record type', 'field_render_type': 'Type', 'field_name': 'List_default_type', 'field_placement': get_placement_classes('small:0,6'), 'field_value_type': 'annal:Type', 'field_value': 'Default_type', 'options': [] }, { 'field_id': 'List_default_view' # fields[5] , 'field_label': 'View', 'field_render_type': 'View', 'field_name': 'List_default_view', 'field_placement': get_placement_classes('small:6,6'), 'field_value_type': 'annal:View', 'field_value': 'Default_view', 'options': [] }, { 'field_id': 'List_entity_selector' # fields[6] , 'field_label': 'Selector', 'field_render_type': 'Text', 'field_name': 'List_entity_selector', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Text', 'field_value': 'ALL', 'options': [] }, { 'field_id': 'List_target_type' # fields[7] , 'field_label': 'Record type URI', 'field_render_type': 'Identifier', 'field_name': 'List_target_type', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Identifier', 'field_value': '', 'options': [] }, { "field_id": "List_repeat_fields" # fields[8] , 'field_label': 'Fields', 'field_render_type': 'RepeatGroupRow', 'field_name': 'List_repeat_fields', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Field_group', 'field_value': list_fields, 'options': [] } ] }) if list_id: context_dict['fields'][0]['field_value'] = list_id context_dict['fields'][2]['field_value'] = '%s %s/%s' % ( update, coll_id, list_id) context_dict['fields'][3]['field_value'] = '%s help for %s/%s' % ( update, coll_id, list_id) context_dict['orig_id'] = list_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def entitydata_context_data(entity_id=None, orig_id=None, coll_id="testcoll", type_id="testtype", type_ids=[], action=None, update="Entity", view_label="Default record view"): if entity_id: entity_label = '%s %s/%s/%s' % (update, coll_id, type_id, entity_id) entity_descr = '%s coll %s, type %s, entity %s' % (update, coll_id, type_id, entity_id) else: entity_label = '%s data ... (%s/%s)' % (update, coll_id, type_id) entity_descr = '%s description ... (%s/%s)' % (update, coll_id, type_id) context_dict = ({ 'title': "%s - %s - Collection %s" % (entity_label, view_label, coll_id), 'heading': view_label, 'coll_id': 'testcoll', 'type_id': 'testtype', 'orig_id': 'orig_entity_id', 'fields': [ context_field_row( { 'field_label': 'Id', 'field_id': 'Entity_id', 'field_name': 'entity_id', 'field_render_type': 'EntityId', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_mode': 'Value_direct', 'field_value_type': "annal:Slug" # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Type', 'field_id': 'Entity_type', 'field_name': 'entity_type', 'field_render_type': 'EntityTypeId', 'field_value_type': "annal:Slug", 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_value_mode': 'Value_direct' # , 'field_value': (Supplied separately) , 'options': [] }), context_field_row({ 'field_label': 'Label', 'field_id': 'Entity_label', 'field_name': 'Entity_label', 'field_render_type': 'Text', 'field_placement': get_placement_classes('small:0,12'), 'field_value_mode': 'Value_direct', 'field_value_type': "annal:Text", 'field_value': entity_label, 'options': [] }), context_field_row({ 'field_label': 'Comment', 'field_id': 'Entity_comment', 'field_name': 'Entity_comment', 'field_render_type': 'Markdown', 'field_placement': get_placement_classes('small:0,12'), 'field_value_mode': 'Value_direct', 'field_value_type': "annal:Richtext", 'field_value': entity_descr, 'options': [] }) ], 'continuation_url': entitydata_list_type_url("testcoll", type_id) }) if entity_id: context_dict['fields'][0]['row_field_descs'][0][ 'field_value'] = entity_id context_dict['fields'][0]['row_field_descs'][1][ 'field_value'] = "_type/" + type_id if valid_id(type_id) else None context_dict['orig_id'] = entity_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def recordtype_entity_view_context_data(coll_id="testcoll", type_id=None, orig_id=None, type_ids=[], action=None, update="RecordType"): context_dict = ({ 'title': "Collection %s" % (coll_id), 'coll_id': coll_id, 'type_id': '_type', 'orig_id': 'orig_type_id', 'fields': [ { 'field_label': 'Id', 'field_name': 'entity_id', 'field_render_type': 'EntityId', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_id': 'Type_id', 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Label', 'field_name': 'Type_label', 'field_render_type': 'Text', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_label', 'field_value_type': 'annal:Text', 'field_value': '%s data ... (%s/%s)' % (update, coll_id, type_id), 'options': [] }, { 'field_label': 'Comment', 'field_name': 'Type_comment', 'field_render_type': 'Textarea', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_comment', 'field_value_type': 'annal:Longtext', 'field_value': '%s description ... (%s/%s)' % (update, coll_id, type_id), 'options': [] }, { 'field_label': 'URI', 'field_name': 'Type_uri', 'field_render_type': 'Identifier', 'field_placement': get_placement_classes('small:0,12'), 'field_id': 'Type_uri', 'field_value_type': 'annal:Identifier' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Default view', 'field_name': 'Type_view', 'field_render_type': 'View', 'field_placement': get_placement_classes('small:0,6'), 'field_id': 'Type_view', 'field_value_type': 'annal:View' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Default list', 'field_name': 'Type_list', 'field_render_type': 'List', 'field_placement': get_placement_classes('small:6,6'), 'field_id': 'Type_list', 'field_value_type': 'annal:List' # , 'field_value': (Supplied separately) , 'options': [] } ], 'continuation_url': entitydata_list_type_url(coll_id, "_type") }) if type_id: type_url = recordtype_url(coll_id=coll_id, type_id=type_id) context_dict['fields'][0]['field_value'] = type_id context_dict['fields'][1]['field_value'] = '%s %s/%s' % ( update, coll_id, type_id) context_dict['fields'][2][ 'field_value'] = '%s help for %s in collection %s' % ( update, type_id, coll_id) context_dict['fields'][3]['field_value'] = type_url context_dict['orig_id'] = type_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def test_get_placement_classes(self): """ This was a DocTest, but Py3 compatibility.... """ self.assertEqual( get_placement_classes("medium:0,12"), Placement( width=LayoutOptions(s=12, m=12, l=12), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-12 columns', label='small-12 medium-2 columns', value='small-12 medium-10 columns' ) ) self.assertEqual( get_placement_classes("large:0,12"), Placement( width=LayoutOptions(s=12, m=12, l=12), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-12 columns', label='small-12 medium-2 columns', value='small-12 medium-10 columns' ) ) self.assertEqual( get_placement_classes("small:0,12;medium:0,4"), Placement( width=LayoutOptions(s=12, m=4, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) ) self.assertEqual( get_placement_classes("small:0,12; medium:0,4"), Placement( width=LayoutOptions(s=12, m=4, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-12 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) ) self.assertEqual( get_placement_classes("small:0,12;medium:0,6;large:0,4"), Placement( width=LayoutOptions(s=12, m=6, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-12 medium-6 large-4 columns', label='small-12 medium-4 large-6 columns', value='small-12 medium-8 large-6 columns' ) ) self.assertEqual( get_placement_classes("small:0,6;medium:0,4"), Placement( width=LayoutOptions(s=6, m=4, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-6 medium-4 columns', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) ) self.assertEqual( get_placement_classes("small:0,6;medium:0,4,right"), Placement( width=LayoutOptions(s=6, m=4, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-6 medium-4 columns right', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) ) self.assertEqual( get_placement_classes("small:0,6"), Placement( width=LayoutOptions(s=6, m=6, l=6), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=True, m=True, l=True), field='small-6 columns', label='small-12 medium-4 columns', value='small-12 medium-8 columns' ) ) self.assertEqual( get_placement_classes("small:0,12,hide;medium:0,4"), Placement( width=LayoutOptions(s=12, m=4, l=4), offset=LayoutOptions(s=0, m=0, l=0), display=LayoutOptions(s=False, m=True, l=True), field='small-12 medium-4 columns show-for-medium-up', label='small-12 medium-6 columns', value='small-12 medium-6 columns' ) ) return
def entitydata_context_data( entity_id=None, orig_id=None, coll_id="testcoll", type_id="testtype", type_ids=[], action=None, update="Entity", view_label="Default record view" ): if entity_id: entity_label = '%s %s/%s/%s'%(update, coll_id, type_id, entity_id) entity_descr = '%s coll %s, type %s, entity %s'%(update, coll_id, type_id, entity_id) else: entity_label = '%s data ... (%s/%s)'%(update, coll_id, type_id) entity_descr = '%s description ... (%s/%s)'%(update, coll_id, type_id) context_dict = ( { 'title': "%s - %s - Collection %s"%(entity_label, view_label, coll_id) , 'heading': view_label , 'coll_id': 'testcoll' , 'type_id': 'testtype' , 'orig_id': 'orig_entity_id' , 'fields': [ context_field_row( { 'field_label': 'Id' , 'field_id': 'Entity_id' , 'field_name': 'entity_id' , 'field_render_type': 'EntityId' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_value_mode': 'Value_direct' , 'field_value_type': "annal:Slug" # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Type' , 'field_id': 'Entity_type' , 'field_name': 'entity_type' , 'field_render_type': 'EntityTypeId' , 'field_value_type': "annal:Slug" , 'field_placement': get_placement_classes('small:0,12;medium:6,6') , 'field_value_mode': 'Value_direct' # , 'field_value': (Supplied separately) , 'options': [] }) , context_field_row( { 'field_label': 'Label' , 'field_id': 'Entity_label' , 'field_name': 'Entity_label' , 'field_render_type': 'Text' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_mode': 'Value_direct' , 'field_value_type': "annal:Text" , 'field_value': entity_label , 'options': [] }) , context_field_row( { 'field_label': 'Comment' , 'field_id': 'Entity_comment' , 'field_name': 'Entity_comment' , 'field_render_type': 'Markdown' , 'field_placement': get_placement_classes('small:0,12') , 'field_value_mode': 'Value_direct' , 'field_value_type': "annal:Richtext" , 'field_value': entity_descr , 'options': [] }) ] , 'continuation_url': entitydata_list_type_url("testcoll", type_id) }) if entity_id: context_dict['fields'][0]['row_field_descs'][0]['field_value'] = entity_id context_dict['fields'][0]['row_field_descs'][1]['field_value'] = "_type/"+type_id if valid_id(type_id) else None context_dict['orig_id'] = entity_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
from tests import init_annalist_test_site from tests import TestHost, TestHostUri, TestBasePath, TestBaseUri, TestBaseDir from AnnalistTestCase import AnnalistTestCase from entity_testentitydata import entity_url # ----------------------------------------------------------------------------- # # Test data # # ----------------------------------------------------------------------------- tokenset_context = Context( { 'field': { 'field_placement': get_placement_classes("small:0,12") , 'field_name': "test_field" , 'field_label': "test label" , 'field_placeholder': "(test placeholder)" , 'field_value': ["aa", "bb", "cc"] } # , 'repeat': # { 'repeat_prefix': "prefix_" # } , 'repeat_prefix': "tokprefix_" }) intvalue_context = Context( { 'field': { 'field_placement': get_placement_classes("small:0,12") , 'field_name': "test_field"
def entitydata_recordtype_view_context_data( entity_id=None, orig_id=None, coll_id="testcoll", type_id="testtype", type_uri=None, type_ids=[], action=None, update="Entity", view_label="Type definition" ): if entity_id: entity_label = '%s %s/%s/%s'%(update, coll_id, type_id, entity_id) entity_descr = '%s coll %s, type %s, entity %s'%(update, coll_id, type_id, entity_id) else: entity_label = '%s data ... (%s/%s)'%(update, coll_id, type_id) entity_descr = '%s description ... (%s/%s)'%(update, coll_id, type_id) context_dict = ( { 'title': "%s - %s - Collection %s"%(entity_label, view_label, coll_id) , 'heading': view_label , 'coll_id': coll_id , 'type_id': type_id , 'orig_id': 'orig_entity_id' , 'fields': [ context_field_row( { 'field_label': 'Type Id' , 'field_name': 'entity_id' , 'field_placement': get_placement_classes('small:0,12;medium:0,6') , 'field_id': 'Type_id' , 'field_value_mode': 'Value_direct' , 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }) , context_field_row( { 'field_label': 'Label' , 'field_name': 'Type_label' , 'field_placement': get_placement_classes('small:0,12') , 'field_id': 'Type_label' , 'field_value_mode': 'Value_direct' , 'field_value_type': 'annal:Text' , 'field_value': entity_label , 'options': [] }) , context_field_row( { 'field_label': 'Comment' , 'field_name': 'Type_comment' , 'field_placement': get_placement_classes('small:0,12') , 'field_id': 'Type_comment' , 'field_value_mode': 'Value_direct' , 'field_value_type': 'annal:Richtext' , 'field_value': entity_descr , 'options': [] }) , context_field_row( { 'field_label': 'Type URI' , 'field_name': 'Type_uri' , 'field_placement': get_placement_classes('small:0,12') , 'field_id': 'Type_uri' , 'field_value_mode': 'Value_direct' , 'field_value_type': 'annal:Identifier' , 'field_value': "" , 'options': [] }) ] , 'continuation_url': entitydata_list_type_url(coll_id, type_id) }) if entity_id: context_dict['fields'][0]['row_field_descs'][0]['field_value'] = entity_id context_dict['orig_id'] = entity_id if type_uri: context_dict['fields'][3]['row_field_descs'][0]['field_value'] = type_uri if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def entitydata_context_data(entity_id=None, orig_id=None, type_id="testtype", type_ids=[], action=None, update="Entity"): context_dict = ({ 'title': "Collection testcoll", 'coll_id': 'testcoll', 'type_id': 'testtype', 'orig_id': 'orig_entity_id', 'fields': [ { 'field_label': 'Id', 'field_id': 'Entity_id', 'field_name': 'entity_id', 'field_render_type': 'EntityId', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Type', 'field_id': 'Entity_type', 'field_name': 'entity_type', 'field_render_type': 'EntityTypeId', 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_value_type': 'annal:Slug' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Label', 'field_id': 'Entity_label', 'field_name': 'Entity_label', 'field_render_type': 'Text', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Text', 'field_value': '%s data ... (testcoll/testtype)' % (update), 'options': [] }, { 'field_label': 'Comment', 'field_id': 'Entity_comment', 'field_name': 'Entity_comment', 'field_render_type': 'Textarea', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Longtext', 'field_value': '%s description ... (testcoll/testtype)' % (update), 'options': [] } ], 'continuation_url': entitydata_list_type_url("testcoll", type_id) }) if entity_id: context_dict['fields'][0]['field_value'] = entity_id context_dict['fields'][1]['field_value'] = type_id if valid_id( type_id) else None context_dict['fields'][2][ 'field_value'] = '%s testcoll/testtype/%s' % (update, entity_id) context_dict['fields'][3][ 'field_value'] = '%s coll testcoll, type testtype, entity %s' % ( update, entity_id) context_dict['orig_id'] = entity_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict
def __init__(self, collection, recordfield, view_context=None, field_property=None, field_placement=None, group_view=None, group_ids_seen=[], field_placement_classes=None ): """ Creates a field description value to use in a context value when rendering a form. Values defined here are mentioned in field rendering templates. The FieldDescription object behaves as a dictionary containing the various field attributes. collection is a collection from which data is being rendered. Used when generating enumerated values. recordfield is a RecordField value or dictionary containing details of the field for which a descriptor is constructed. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. field_property if supplied, overrides the field property URI from `recordfield` field_placement if supplied, overrides field placement from `recordfield` group_view if the field itself references a list of fields, this is a RecordGroup value or dictionary containing the referenced list of fields. group_ids_seen group ids expanded so far, to check for recursive reference. field_classes if supplied, overrides field placement classes derived from value for `field_placement` string. """ self._collection = collection # log.debug("FieldDescription recordfield: %r"%(recordfield,)) field_id = recordfield.get(ANNAL.CURIE.id, "_missing_id_") field_name = recordfield.get(ANNAL.CURIE.field_name, field_id) # Field name in form field_label = recordfield.get(RDFS.CURIE.label, "") field_property = field_property or recordfield.get(ANNAL.CURIE.property_uri, "") field_placement = field_placement or recordfield.get(ANNAL.CURIE.field_placement, "") field_placement_c = field_placement_classes or get_placement_classes(field_placement) field_placeholder = recordfield.get(ANNAL.CURIE.placeholder, "") field_render_type = extract_entity_id(recordfield.get(ANNAL.CURIE.field_render_type, "")) field_value_mode = extract_entity_id(recordfield.get(ANNAL.CURIE.field_value_mode, "@@FieldDescription:value_mode@@")) field_ref_type = extract_entity_id(recordfield.get(ANNAL.CURIE.field_ref_type, None)) field_entity_type = recordfield.get(ANNAL.CURIE.field_entity_type, None) field_group_ref = extract_entity_id(recordfield.get(ANNAL.CURIE.group_ref, None)) self._field_desc = ( { 'field_id': field_id , 'field_name': field_name , 'field_instance_name': field_name , 'field_render_type': field_render_type , 'field_value_mode': field_value_mode , 'field_value_type': recordfield.get(ANNAL.CURIE.field_value_type, "") , 'field_label': field_label , 'field_help': recordfield.get(RDFS.CURIE.comment, "") , 'field_property_uri': field_property , 'field_placement': field_placement_c , 'field_placeholder': field_placeholder , 'field_default_value': recordfield.get(ANNAL.CURIE.default_value, None) , 'field_ref_type': field_ref_type , 'field_ref_field': recordfield.get(ANNAL.CURIE.field_ref_field, None) , 'field_ref_restriction': recordfield.get(ANNAL.CURIE.field_ref_restriction, "ALL") , 'field_entity_type': field_entity_type , 'field_choices': None # , 'field_choice_labels': None # , 'field_choice_links': None , 'field_group_ref': field_group_ref , 'group_label': None , 'group_add_label': None , 'group_delete_label': None , 'group_view': None , 'group_field_descs': None , 'field_render_label': get_label_renderer( field_render_type, field_value_mode) , 'field_render_view': get_view_renderer( field_render_type, field_value_mode) , 'field_render_edit': get_edit_renderer( field_render_type, field_value_mode) , 'field_render_label_view': get_label_view_renderer( field_render_type, field_value_mode) , 'field_render_label_edit': get_label_edit_renderer( field_render_type, field_value_mode) , 'field_render_colhead': get_col_head_renderer( field_render_type, field_value_mode) , 'field_render_colhead_view': get_col_head_view_renderer(field_render_type, field_value_mode) , 'field_render_colhead_edit': get_col_head_edit_renderer(field_render_type, field_value_mode) , 'field_render_colview': get_col_view_renderer( field_render_type, field_value_mode) , 'field_render_coledit': get_col_edit_renderer( field_render_type, field_value_mode) , 'field_render_mode': get_mode_renderer( field_render_type, field_value_mode) , 'field_value_mapper': get_value_mapper(field_render_type) }) self._field_suffix_index = 0 # No dup self._field_suffix = "" # If field references type, pull in copy of type id and link values type_ref = self._field_desc['field_ref_type'] if type_ref: restrict_values = self._field_desc['field_ref_restriction'] entity_finder = EntityFinder(collection, selector=restrict_values) # Determine subtypes of field entity type, if specified # @@TODO: subtype logic here is just pig ugly... # need context to provide info that can be used to calculate supertypes # on-the-fly as needed by the field restriction expression. E.g. include # collection object in context. if field_entity_type and restrict_values: field_entity_subtypes = ( [ t.get_type_uri() for t in entity_finder.get_collection_uri_subtypes(field_entity_type, altscope="all") ]) self._field_desc['field_entity_subtypes'] = field_entity_subtypes field_view_context = dict(view_context or {}, field={'subtypes': field_entity_subtypes}) else: field_view_context = view_context entities = entity_finder.get_entities_sorted( type_id=type_ref, context=field_view_context, altscope="select" ) # Note: the options list may be used more than once, so the id generator # returned must be materialized as a list # Uses collections.OrderedfDict to preserve entity ordering self._field_desc['field_choices'] = collections.OrderedDict() if field_render_type in ["Enum_optional", "Enum_choice_opt"]: # Add blank choice for optional selections self._field_desc['field_choices'][''] = FieldChoice('', label=field_placeholder) for e in entities: eid = e.get_id() val = e.get_type_entity_id() if eid != "_initial_values": self._field_desc['field_choices'][val] = FieldChoice( val, label=e.get_label(), link=e.get_view_url_path() ) # log.debug("FieldDescription: typeref %s: %r"% # (self._field_desc['field_ref_type'], list(self._field_desc['field_choices'].items())) # ) # If field references group, pull in field details if group_view: if field_id in group_ids_seen: raise Annalist_Error(field_id, "Recursive field reference in field group") group_ids_seen = group_ids_seen + [field_id] group_label = (field_label or group_view.get(RDFS.CURIE.label, self._field_desc['field_group_ref']) ) add_label = recordfield.get(ANNAL.CURIE.repeat_label_add, None) or "Add "+field_id remove_label = recordfield.get(ANNAL.CURIE.repeat_label_delete, None) or "Remove "+field_id group_field_descs = [] for subfield in group_view[ANNAL.CURIE.group_fields]: f = field_description_from_view_field(collection, subfield, view_context, group_ids_seen) group_field_descs.append(f) self._field_desc.update( { 'group_id': field_id , 'group_label': group_label , 'group_add_label': add_label , 'group_delete_label': remove_label , 'group_view': group_view , 'group_field_descs': group_field_descs }) # log.debug("FieldDescription: %s"%field_id) # log.info("FieldDescription._field_desc %r"%(self._field_desc,)) # log.info("FieldDescription.field_placement %r"%(self._field_desc['field_placement'],)) return
def __init__(self, collection, recordfield, view_context=None, field_property=None, field_placement=None, field_list=None, field_ids_seen=[], field_placement_classes=None): """ Creates a field description value to use in a context value when rendering a form. Values defined here are mentioned in field rendering templates. The FieldDescription object behaves as a dictionary containing the various field attributes. collection is a collection from which data is being rendered. recordfield is a RecordField value or dictionary containing details of the field for which a descriptor is constructed. view_context is a dictionary of additional values that may be used in assembling values to be used when rendering the field. In particular, a copy of the view description record provides context for some enumeration type selections. field_property if supplied, overrides the field property URI from `recordfield` field_placement if supplied, overrides field placement from `recordfield` field_list if the field itself contains or references a list of fields, this is that list of fields. field_ids_seen field ids expanded so far, to check for recursive reference. field_placement_classes if supplied, overrides field placement classes derived from value for `field_placement` string. """ self._collection = collection # log.debug("FieldDescription recordfield: %r"%(recordfield,)) field_id = recordfield.get(ANNAL.CURIE.id, "_missing_id_") field_name = recordfield.get(ANNAL.CURIE.field_name, field_id) # Field name in form field_label = recordfield.get(RDFS.CURIE.label, "") field_help = recordfield.get(RDFS.CURIE.comment, "") field_property = field_property or recordfield.get( ANNAL.CURIE.property_uri, "") field_placement = field_placement or recordfield.get( ANNAL.CURIE.field_placement, "") field_placement_c = field_placement_classes or get_placement_classes( field_placement) field_placeholder = recordfield.get(ANNAL.CURIE.placeholder, "") field_tooltip = recordfield.get(ANNAL.CURIE.tooltip, "") field_render_type = extract_entity_id( recordfield.get(ANNAL.CURIE.field_render_type, "")) field_value_mode = extract_entity_id( recordfield.get(ANNAL.CURIE.field_value_mode, "@@FieldDescription:value_mode@@")) field_ref_type = extract_entity_id( recordfield.get(ANNAL.CURIE.field_ref_type, None)) field_entity_type = recordfield.get(ANNAL.CURIE.field_entity_type, None) field_group_ref = extract_entity_id( recordfield.get(ANNAL.CURIE.group_ref, None)) self._field_desc = ({ 'field_id': field_id, 'field_name': field_name, 'field_instance_name': field_name, 'field_render_type': field_render_type, 'field_value_mode': field_value_mode, 'field_value_type': recordfield.get(ANNAL.CURIE.field_value_type, ""), 'field_label': field_label, 'field_help': field_help, 'field_property_uri': field_property, 'field_placement': field_placement_c, 'field_placeholder': field_placeholder, 'field_tooltip': field_tooltip, 'field_tooltip_test': field_tooltip or (field_help) or "", 'field_default_value': recordfield.get(ANNAL.CURIE.default_value, None), 'field_ref_type': field_ref_type, 'field_ref_field': recordfield.get(ANNAL.CURIE.field_ref_field, None), 'field_ref_restriction': recordfield.get(ANNAL.CURIE.field_ref_restriction, "ALL"), 'field_entity_type': field_entity_type, 'field_choices': None, 'field_group_ref': field_group_ref, 'group_label': None, 'group_add_label': None, 'group_delete_label': None, 'group_field_list': None, 'group_field_descs': None, 'field_renderer': FieldRenderer(field_render_type, field_value_mode), 'field_value_mapper': get_value_mapper(field_render_type) # Used by fieldvaluemap.py }) self._field_suffix_index = 0 # No dup self._field_suffix = "" # If field references type, pull in copy of type id and link values type_ref = self._field_desc['field_ref_type'] if type_ref: restrict_values = self._field_desc['field_ref_restriction'] entity_finder = EntityFinder(collection, selector=restrict_values) entities = entity_finder.get_entities_sorted(type_id=type_ref, context=view_context, altscope="select") # Note: the options list may be used more than once, so the id generator # returned must be materialized as a list # Uses collections.OrderedfDict to preserve entity ordering self._field_desc['field_choices'] = collections.OrderedDict() if field_render_type in ["Enum_optional", "Enum_choice_opt"]: # Add blank choice for optional selections self._field_desc['field_choices'][''] = FieldChoice( '', label=field_placeholder) for e in entities: eid = e.get_id() val = e.get_type_entity_id() if eid != layout.INITIAL_VALUES_ID: self._field_desc['field_choices'][val] = FieldChoice( val, label=e.get_label(), link=e.get_view_url_path()) # If field references or contains field list, pull in field details if field_list: if field_id in field_ids_seen: raise Annalist_Error( field_id, "Recursive field reference in field group") field_ids_seen = field_ids_seen + [field_id] group_label = field_label add_label = recordfield.get(ANNAL.CURIE.repeat_label_add, None) or "Add " + field_id remove_label = recordfield.get(ANNAL.CURIE.repeat_label_delete, None) or "Remove " + field_id group_field_descs = [] for subfield in field_list: f = field_description_from_view_field(collection, subfield, view_context, field_ids_seen) group_field_descs.append(f) self._field_desc.update({ 'group_id': field_id, 'group_label': group_label, 'group_add_label': add_label, 'group_delete_label': remove_label, 'group_field_list': field_list # Description from field/group , 'group_field_descs': group_field_descs # Resulting field description list }) # log.debug("FieldDescription: %s"%field_id) # log.info("FieldDescription._field_desc %r"%(self._field_desc,)) # log.info("FieldDescription.field_placement %r"%(self._field_desc['field_placement'],)) return
def recordfield_entity_view_context_data(field_id=None, orig_id=None, type_ids=[], action=None, update="Field"): context_dict = ({ 'title': "Collection testcoll", 'coll_id': 'testcoll', 'type_id': '_field', 'orig_id': 'orig_field_id', 'fields': [ { 'field_label': 'Id', 'field_id': 'Field_id', 'field_name': 'entity_id', 'field_render_type': 'EntityId', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_type': 'annal:Slug', 'field_placeholder': '(field id)' # , 'field_value': (Supplied separately) , 'options': [] }, { 'field_label': 'Field value type', 'field_id': 'Field_type', 'field_name': 'Field_type', 'field_render_type': 'Identifier', 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_value_type': 'annal:Identifier', 'field_placeholder': '(field value type)', 'field_value': 'annal:Text', 'options': [] }, { 'field_label': 'Field render type', 'field_id': 'Field_render', 'field_name': 'Field_render', 'field_render_type': 'Enum_choice', 'field_placement': get_placement_classes('small:0,12;medium:0,6'), 'field_value_type': 'annal:Slug', 'field_placeholder': '(field render type)', 'field_value': 'Text', 'options': [] }, { 'field_label': 'Position/size', 'field_id': 'Field_placement', 'field_name': 'Field_placement', 'field_render_type': 'Placement', 'field_placement': get_placement_classes('small:0,12;medium:6,6'), 'field_value_type': 'annal:Placement', 'field_placeholder': '(field position and size)', 'field_value': '', 'options': [] }, { 'field_label': 'Label', 'field_id': 'Field_label', 'field_name': 'Field_label', 'field_render_type': 'Text', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Text', 'field_placeholder': '(field label)', 'field_value': '%s data ... (testcoll/_field)' % (update), 'options': [] }, { 'field_label': 'Help', 'field_id': 'Field_comment', 'field_name': 'Field_comment', 'field_render_type': 'Textarea', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Longtext', 'field_placeholder': '(field usage commentary or help text)', 'field_value': '%s description ... (testcoll/_field)' % (update), 'options': [] }, { 'field_label': 'Placeholder', 'field_id': 'Field_placeholder', 'field_name': 'Field_placeholder', 'field_render_type': 'Text', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Text', 'field_placeholder': '(placeholder text)', 'field_value': '', 'options': [] }, { 'field_label': 'Property', 'field_id': 'Field_property', 'field_name': 'Field_property', 'field_render_type': 'Identifier', 'field_placement': get_placement_classes('small:0,12'), 'field_value_type': 'annal:Identifier', 'field_placeholder': "(field URI or CURIE)", 'field_value': '', 'options': [] } ], 'continuation_url': entitydata_list_type_url("testcoll", "_field") }) if field_id: context_dict['fields'][0]['field_value'] = field_id context_dict['fields'][4]['field_value'] = '%s testcoll/_field/%s' % ( update, field_id) context_dict['fields'][5][ 'field_value'] = '%s help for %s in collection testcoll' % ( update, field_id) context_dict['orig_id'] = field_id if orig_id: context_dict['orig_id'] = orig_id if action: context_dict['action'] = action return context_dict