def create_field_from_definition(field_definition, name=None, sub_name=None):
    """Helper to create a field from definition.

    :param field_definition: The definition of the field (see:
        safe.definitions.fields).
    :type field_definition: dict

    :param name: The name is required if the field name is dynamic and need a
        string formatting.
    :type name: basestring

    :param sub_name: The name is required if the field name is dynamic and need
        a string formatting.
    :type sub_name: basestring

    :return: The new field.
    :rtype: QgsField
    """
    field = QgsField()

    if name and not sub_name:
        field.setName(field_definition['field_name'] % name)
    elif name and sub_name:
        field.setName(field_definition['field_name'] % (name, sub_name))
    else:
        field.setName(field_definition['field_name'])

    if isinstance(field_definition['type'], list):
        # Use the first element in the list of type
        field.setType(field_definition['type'][0])
    else:
        field.setType(field_definition['type'])
    field.setLength(field_definition['length'])
    field.setPrecision(field_definition['precision'])
    return field
def create_field_from_definition ( field_definition , name = None , sub_name = None ) : field = QgsField ( ) if name and not sub_name : field . setName ( field_definition [ 'field_name' ] % name ) elif name and sub_name : field . setName ( field_definition [ 'field_name' ] % ( name , sub_name ) ) else : field . setName ( field_definition [ 'field_name' ] ) if isinstance ( field_definition [ 'type' ] , list ) : field . setType ( field_definition [ 'type' ] [ 0 ] ) else : field . setType ( field_definition [ 'type' ] ) field . setLength ( field_definition [ 'length' ] ) field . setPrecision ( field_definition [ 'precision' ] ) return field
Helper to create a field from definition.

    :param field_definition: The definition of the field (see:
        safe.definitions.fields).
    :type field_definition: dict

    :param name: The name is required if the field name is dynamic and need a
        string formatting.
    :type name: basestring

    :param sub_name: The name is required if the field name is dynamic and need
        a string formatting.
    :type sub_name: basestring

    :return: The new field.
    :rtype: QgsField