human
Complete the below
def indicator():

    ''''RESTful CRUD controller'
    '''
assistant
#Here is the Python program you requested.
    def prep(r):
        if (r.method == 'profile'):
            table = r.table
            record = r.record
            code = record.code
            def dt_row_actions(component):
                return (lambda r, list_id: [{'label': T('Open'), 'url': r.url(component=component, component_id='[id]', method='update.popup', vars={'refresh': list_id}), '_class': 'action-btn    edit    s3_modal'}, {'label': T('Delete'), '_ajaxurl': r.url(component=component, component_id='[id]', method='delete.json'), '_class': 'action-btn    delete-btn-ajax    dt-ajax-delete'}])
            data_widget = dict(label='Data', label_create='Add    Data', type='datatable', actions=dt_row_actions('indicator_data'), tablename='project_indicator_data', filter=(FS('indicator_id') == record.id), create_controller='project', create_function='indicator', create_component='indicator_data')
            profile_widgets = [data_widget]
            s3db.configure('project_indicator', profile_cols=1, profile_header=DIV(H2(code), H3(table.name.label), P(record.name), H3(table.verification.label), P(record.verification), _class='profile-header'), profile_title=('%s    :    %s' % (s3_unicode(s3.crud_strings['project_indicator'].title_display), code)), profile_widgets=profile_widgets)
            s3db.configure('project_indicator_data', list_fields=['name', 'end_date', 'target_value', 'value', (T('Percentage'), 'percentage'), 'comments'])
            s3.rfooter = A(T('Return    to    Project'), _href=URL(f='project', args=[record.project_id, 'indicator']), _class='action-btn')
        elif (r.component_name == 'indicator_data'):
            field = s3db.project_indicator_data.project_id
            field.default = r.record.project_id
            field.readable = field.writable = False
        return True
    s3.prep = prep
    return s3_rest_controller()