def METHOD_NAME():
    """
    Generate all models including 3rd party.
    IMPORTANT NOTE: This script will leave the temporary classes in oscal/tmp for reference, but they should be deleted
    when no longer needed because some of the operations in the build will seek all .py files, and will try to act
    on these temporary files - giving an error.  So be sure to delete the oscal/tmp directory when done generating
    new classes.
    """
    logger.info('generating models')
    out_dir = Path('trestle/oscal')
    out_dir.mkdir(exist_ok=True, parents=True)
    tmp_dir = out_dir / 'tmp'
    tmp_dir.mkdir(exist_ok=True, parents=True)
    out_init = out_dir / '__init__.py'
    out_init.touch(exist_ok=True)
    in_dir = Path('nist-source/json/schema')
    for full_name in in_dir.glob('oscal_*_schema.json'):
        if 'complete' in str(full_name):
            continue
        try:
            obj = re.search('oscal_(.+?)_schema.json', str(full_name)).group(1)
        except AttributeError:
            logger.error(f'Warning: filename did not parse properly: {full_name}')
            obj = None
            continue
        oscal_name = obj.replace('-', '_')
        out_fname = oscal_name + '.py'
        out_full_name = tmp_dir / out_fname
        generate_model(full_name, out_full_name)
    # all .py files are first generated into oscal/tmp to be normalized'
    normalize_files()