def import_items(import_file, item_create_func, item_add_func,
    allow_fabricator=False, quiet=False):
    """
    Imports items from `import_file`.  `item_create_func` should point to
    a function used to create the item appropriately, and `item_add_func`
    should point to a function used to actually add the item into the
    appropriate container.  If `allow_fabricator` is `False` (the default),
    this routine will refuse to import Fabricators, or any item which
    can't be decoded (in case it's a Fabricator).  If `quiet` is `True`,
    only error/warning output will be shown.
    """
    if not quiet:
        print(' - Importing items from {}'.format(import_file))
    added_count = 0
    with open(import_file) as df:
        for line in df:
            itemline = line.strip()
            if itemline.lower().startswith('bl3(') and itemline.endswith(')'):
                new_item = item_create_func(itemline)
                if not allow_fabricator:
                    if not new_item.eng_name:
                        print(
                            '   - NOTICE: Skipping unknown item import because --allow-fabricator is not set'
                            )
                        continue
                    if new_item.balance_short.lower(
                        ) == 'balance_eridian_fabricator':
                        print(
                            '   - NOTICE: Skipping Fabricator import because --allow-fabricator is not set'
                            )
                        continue
                item_add_func(new_item)
                if not quiet:
                    if new_item.eng_name:
                        print('   + {} ({})'.format(new_item.eng_name,
                            new_item.get_level_eng()))
                    else:
                        print('   + unknown item')
                added_count += 1
    if not quiet:
        print('   - Added Item Count: {}'.format(added_count))
