Esempio n. 1
0
 def _initialize_default_name_markups(self):
     if self.instrument_name:
         string = self.instrument_name
         string = stringtools.capitalize_start(string)
         markup = markuptools.Markup(contents=string)
         self._instrument_name_markup = markup
     else:
         self._instrument_name_markup = None
     if self.short_instrument_name:
         string = self.short_instrument_name
         string = stringtools.capitalize_start(string)
         markup = markuptools.Markup(contents=string)
         self._short_instrument_name_markup = markup
     else:
         self._short_instrument_name_markup = None
Esempio n. 2
0
 def _initialize_default_name_markups(self):
     if self.instrument_name:
         string = self.instrument_name
         string = stringtools.capitalize_start(string)
         markup = markuptools.Markup(contents=string)
         self._instrument_name_markup = markup
     else:
         self._instrument_name_markup = None
     if self.short_instrument_name:
         string = self.short_instrument_name
         string = stringtools.capitalize_start(string)
         markup = markuptools.Markup(contents=string)
         self._short_instrument_name_markup = markup
     else:
         self._short_instrument_name_markup = None
Esempio n. 3
0
 def _make_class_name_markup(rhythm_maker):
     class_ = type(rhythm_maker)
     string = class_._human_readable_class_name
     string = stringtools.capitalize_start(string)
     pair = schemetools.SchemePair("font-name", "Times")
     command = markuptools.MarkupCommand("override", pair, string)
     command = markuptools.MarkupCommand("fontsize", 4.5, command)
     markup = markuptools.Markup(command)
     return markup
Esempio n. 4
0
 def _make_class_name_markup(rhythm_maker):
     class_ = type(rhythm_maker)
     string = class_.__name__
     string = stringtools.capitalize_start(string)
     pair = schemetools.SchemePair('font-name', 'Times')
     command = markuptools.MarkupCommand('override', pair, string)
     command = markuptools.MarkupCommand('fontsize', 4.5, command)
     markup = markuptools.Markup(command)
     return markup
Esempio n. 5
0
 def _make_class_name_markup(rhythm_maker):
     class_ = type(rhythm_maker)
     string = class_.__name__
     string = stringtools.capitalize_start(string)
     pair = schemetools.SchemePair('font-name', 'Times')
     command = markuptools.MarkupCommand('override', pair, string)
     command = markuptools.MarkupCommand('fontsize', 4.5, command)
     markup = markuptools.Markup(command)
     return markup
Esempio n. 6
0
 def _display(self, lines, capitalize=True, is_menu=False):
     assert isinstance(lines, (str, list)), repr(lines)
     if not self._session.display:
         return
     if isinstance(lines, str):
         lines = [lines]
     if capitalize:
         lines = [stringtools.capitalize_start(_) for _ in lines]
     if lines:
         self._session.transcript._append_entry(lines, is_menu=is_menu)
     for line in lines:
         print(line)
Esempio n. 7
0
 def _display(self, lines, capitalize=True, is_menu=False):
     assert isinstance(lines, (str, list)), repr(lines)
     if not self._session.display:
         return
     if isinstance(lines, str):
         lines = [lines]
     if capitalize:
         lines = [stringtools.capitalize_start(_) for _ in lines]
     if lines:
         self._session.transcript._append_entry(lines, is_menu=is_menu)
     for line in lines:
         print(line)
Esempio n. 8
0
 def _make_title_lines(self):
     menu_lines = []
     if isinstance(self.title, str):
         title_lines = [stringtools.capitalize_start(self.title)]
     elif isinstance(self.title, list):
         title_lines = self.title
     else:
         title_lines = []
     for title_line in title_lines:
         if self.indent_level:
             tab_string = self._make_tab(self.indent_level)
             line = '{}{}'.format(tab_string, title_line)
             menu_lines.append(line)
         else:
             menu_lines.append(title_line)
     if menu_lines:
         menu_lines.append('')
     return menu_lines
Esempio n. 9
0
 def _make_title_lines(self):
     menu_lines = []
     if isinstance(self.title, str):
         title_lines = [stringtools.capitalize_start(self.title)]
     elif isinstance(self.title, list):
         title_lines = self.title
     else:
         title_lines = []
     for title_line in title_lines:
         if self.indent_level:
             tab_string = self._make_tab(self.indent_level)
             line = '{}{}'.format(tab_string, title_line)
             menu_lines.append(line)
         else:
             menu_lines.append(title_line)
     if menu_lines:
         menu_lines.append('')
     return menu_lines
Esempio n. 10
0
 def _make_title_lines(self):
     result = []
     if self.title is not None:
         title = self.title
     else:
         parent_autoeditors = self._get_parent_autoeditors()
         if parent_autoeditors:
             nearest_autoeditor = self._get_nearest_autoeditor()
             breadcrumb = getattr(nearest_autoeditor, 'breadcrumb', None)
             title = '... {} (EDIT)'.format(breadcrumb)
         else:
             title = self._session.menu_header
     result.append(stringtools.capitalize_start(title))
     if self.subtitle is not None:
         line = '  ' + self.subtitle
         result.append('')
         result.append(line)
     result.append('')
     return result
Esempio n. 11
0
 def _make_title_lines(self):
     result = []
     if self.title is not None:
         title = self.title
     else:
         parent_autoeditors = self._get_parent_autoeditors()
         if parent_autoeditors:
             nearest_autoeditor = self._get_nearest_autoeditor()
             breadcrumb = getattr(nearest_autoeditor, 'breadcrumb', None)
             title = '... {} (EDIT)'.format(breadcrumb)
         else:
             title = self._session.menu_header
     result.append(stringtools.capitalize_start(title))
     if self.subtitle is not None:
         line = '  ' + self.subtitle
         result.append('')
         result.append(line)
     result.append('')
     return result
Esempio n. 12
0
 def _make_available_command_section_lines(self):
     lines = []
     for section in self.menu_sections:
         if not section.is_command_section:
             continue
         for menu_entry in section:
             key = menu_entry.key
             display_string = menu_entry.display_string
             menu_line = self._io_manager._tab
             menu_line += '{} ({})'.format(display_string, key)
             lines.append(menu_line)
         lines.append('')
     if lines:
         lines.pop()
     lines = self._make_bicolumnar(
         lines,
         break_only_at_blank_lines=True,
     )
     title = self._session.menu_header
     title = title + ' - available commands'
     title = stringtools.capitalize_start(title)
     lines[0:0] = [title, '']
     lines.append('')
     return lines
Esempio n. 13
0
 def _make_available_command_section_lines(self):
     lines = []
     for section in self.menu_sections:
         if not section.is_command_section:
             continue
         for menu_entry in section:
             key = menu_entry.key
             display_string = menu_entry.display_string
             menu_line = self._io_manager._tab
             menu_line += '{} ({})'.format(display_string, key)
             lines.append(menu_line)
         lines.append('')
     if lines:
         lines.pop()
     lines = self._make_bicolumnar(
         lines, 
         break_only_at_blank_lines=True,
         )
     title = self._session.menu_header
     title = title + ' - available commands'
     title = stringtools.capitalize_start(title)
     lines[0:0] = [title, '']
     lines.append('')
     return lines
Esempio n. 14
0
 def _handle_input(
     self,
     message,
     default_value=None,
     include_chevron=True,
     include_newline=False,
     prompt_character=">",
     capitalize_prompt=True,
 ):
     r"""Handles user input.
     Appends user input to command history.
     Appends user input to IO transcript.
     Returns command selected by user.
     """
     if default_value in (None, "None"):
         default_value = ""
     readline.set_startup_hook(lambda: readline.insert_text(default_value))
     found_default_token = False
     # TODO: replace try-finally with startup hook context manager
     try:
         if capitalize_prompt:
             message = stringtools.capitalize_start(message)
         if include_chevron:
             message = message + prompt_character + " "
         else:
             message = message + " "
         if not self._session.pending_input:
             was_pending_input = False
             if sys.version_info[0] == 2:
                 input_ = raw_input(message)
             else:
                 input_ = input(message)
             if include_newline:
                 if not input_ == "help":
                     print("")
         else:
             was_pending_input = True
             input_ = self._pop_from_pending_input()
             if input_ == "<return>":
                 found_default_token = True
         if not found_default_token:
             self._session.command_history.append(input_)
         if input_ == ".":
             last_semantic_command = self._session.last_semantic_command
             input_ = last_semantic_command
         if found_default_token:
             menu_chunk = [message.strip()]
             if include_newline:
                 if not input_ == "help":
                     menu_chunk.append("")
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
             menu_chunk = ["> "]
             if include_newline:
                 if not input_ == "help":
                     menu_chunk.append("")
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
         else:
             menu_chunk = []
             menu_chunk.append("{}{}".format(message, input_))
             if include_newline:
                 if not input_ == "help":
                     menu_chunk.append("")
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
         return input_
     finally:
         readline.set_startup_hook()
Esempio n. 15
0
 def _handle_input(
     self,
     message,
     default_value=None,
     include_chevron=True,
     include_newline=False,
     prompt_character='>',
     capitalize_prompt=True,
 ):
     r'''Handles user input.
     Appends user input to command history.
     Appends user input to IO transcript.
     Returns command selected by user.
     '''
     if default_value in (None, 'None'):
         default_value = ''
     readline.set_startup_hook(lambda: readline.insert_text(default_value))
     found_default_token = False
     # TODO: replace try-finally with startup hook context manager
     try:
         if capitalize_prompt:
             message = stringtools.capitalize_start(message)
         if include_chevron:
             message = message + prompt_character + ' '
         else:
             message = message + ' '
         if not self._session.pending_input:
             was_pending_input = False
             if sys.version_info[0] == 2:
                 input_ = raw_input(message)
             else:
                 input_ = input(message)
             if include_newline:
                 if not input_ == 'help':
                     print('')
         else:
             was_pending_input = True
             input_ = self._pop_from_pending_input()
             if input_ == '<return>':
                 found_default_token = True
         if not found_default_token:
             self._session.command_history.append(input_)
         if input_ == '.':
             last_semantic_command = self._session.last_semantic_command
             input_ = last_semantic_command
         if found_default_token:
             menu_chunk = [message.strip()]
             if include_newline:
                 if not input_ == 'help':
                     menu_chunk.append('')
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
             menu_chunk = ['> ']
             if include_newline:
                 if not input_ == 'help':
                     menu_chunk.append('')
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
         else:
             menu_chunk = []
             menu_chunk.append('{}{}'.format(message, input_))
             if include_newline:
                 if not input_ == 'help':
                     menu_chunk.append('')
             self._session.transcript._append_entry(menu_chunk)
             if was_pending_input:
                 for string in menu_chunk:
                     print(string)
         return input_
     finally:
         readline.set_startup_hook()
Esempio n. 16
0
 def _make_main_menu(self):
     name = self._spaced_class_name
     subtitle = stringtools.capitalize_start(self.breadcrumb)
     menu = self._io_manager._make_menu(name=name, subtitle=subtitle)
     self._make_asset_menu_section(menu)
     return menu
Esempio n. 17
0
    def check_every_package(
        self,
        indent=0,
        problems_only=None,
        supply_missing=None,
    ):
        r'''Checks every package.

        Returns none.
        '''
        messages = []
        missing_directories, missing_files = [], []
        supplied_directories, supplied_files = [], []
        tab = indent * self._io_manager._tab
        if problems_only is None:
            prompt = 'show problem assets only?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return messages, missing_directories, missing_files
            problems_only = bool(result)
        managers = self._list_visible_asset_managers()
        found_problem = False
        for manager in managers:
            with self._io_manager._silent():
                result = manager.check_package(
                    return_messages=True,
                    problems_only=problems_only,
                )
            messages_, missing_directories_, missing_files_ = result
            missing_directories.extend(missing_directories_)
            missing_files.extend(missing_files_)
            messages_ = [stringtools.capitalize_start(_) for _ in messages_]
            messages_ = [tab + _ for _ in messages_]
            if messages_:
                found_problem = True
                messages.extend(messages_)
            else:
                message = 'No problem assets found.'
                message = tab + tab + message
                messages.append(message)
        found_problems = bool(messages)
        if self._session.is_in_score:
            path = self._get_current_directory()
            name = os.path.basename(path)
            count = len(managers)
            message = '{} directory ({} packages):'.format(name, count)
            if not found_problems:
                message = '{} OK'.format(message)
            messages.insert(0, message)
        self._io_manager._display(messages)
        if not found_problem:
            return messages, missing_directories, missing_files
        if supply_missing is None:
            prompt = 'supply missing directories and files?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return messages, missing_directories, missing_files
            supply_missing = bool(result)
        if not supply_missing:
            return messages, missing_directories, missing_files
        messages = []
        for manager in managers:
            with self._io_manager._silent():
                result = manager.check_package(
                    return_supply_messages=True,
                    supply_missing=True,
                )
            messages_, supplied_directories_, supplied_files_ = result
            supplied_directories.extend(supplied_directories_)
            supplied_files.extend(supplied_files_)
            if messages_:
                messages_ = [tab + tab + _ for _ in messages_]
                messages.extend(messages_)
        self._io_manager._display(messages)
        return messages, supplied_directories, supplied_files
Esempio n. 18
0
    def check_package(
        self,
        problems_only=None,
        return_messages=False,
        return_supply_messages=False,
        supply_missing=None,
    ):
        r'''Checks package.

        Returns none.
        '''
        if problems_only is None:
            prompt = 'show problem assets only?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return
            problems_only = bool(result)
        tab = self._io_manager._tab
        optional_directories, optional_files = [], []
        missing_directories, missing_files = [], []
        required_directories, required_files = [], []
        supplied_directories, supplied_files = [], []
        unrecognized_directories, unrecognized_files = [], []
        names = self._list()
        for name in names:
            path = os.path.join(self._path, name)
            if os.path.isdir(path):
                if name in self._required_directories:
                    required_directories.append(path)
                elif name in self._optional_directories:
                    optional_directories.append(path)
                else:
                    unrecognized_directories.append(path)
            elif os.path.isfile(path):
                if name in self._required_files:
                    required_files.append(path)
                elif name in self._optional_files:
                    optional_files.append(path)
                else:
                    unrecognized_files.append(path)
            else:
                raise TypeError(path)
        recognized_directories = required_directories + optional_directories
        recognized_files = required_files + optional_files
        for required_directory in self._required_directories:
            path = os.path.join(self._path, required_directory)
            if path not in recognized_directories:
                missing_directories.append(path)
        for required_file in self._required_files:
            path = os.path.join(self._path, required_file)
            if path not in recognized_files:
                missing_files.append(path)
        messages = []
        if not problems_only:
            messages_ = self._format_ratio_check_messages(
                required_directories,
                self._required_directories,
                'required directory',
                participal='found',
            )
            messages.extend(messages_)
        if missing_directories:
            messages_ = self._format_ratio_check_messages(
                missing_directories,
                self._required_directories,
                'required directory',
                'missing',
            )
            messages.extend(messages_)
        if not problems_only:
            messages_ = self._format_ratio_check_messages(
                required_files,
                self._required_files,
                'required file',
                'found',
            )
            messages.extend(messages_)
        if missing_files:
            messages_ = self._format_ratio_check_messages(
                missing_files,
                self._required_files,
                'required file',
                'missing',
            )
            messages.extend(messages_)
        if not problems_only:
            messages_ = self._format_counted_check_messages(
                optional_directories,
                'optional directory',
                participal='found',
            )
            messages.extend(messages_)
            messages_ = self._format_counted_check_messages(
                optional_files,
                'optional file',
                participal='found',
            )
            messages.extend(messages_)
        messages_ = self._format_counted_check_messages(
            unrecognized_directories,
            'unrecognized directory',
            participal='found',
        )
        messages.extend(messages_)
        messages_ = self._format_counted_check_messages(
            unrecognized_files,
            'unrecognized file',
            participal='found',
        )
        messages.extend(messages_)
        tab = self._io_manager._tab
        messages = [tab + _ for _ in messages]
        name = self._path_to_asset_menu_display_string(self._path)
        found_problems = missing_directories or \
            missing_files or \
            unrecognized_directories or \
            unrecognized_files
        count = len(names)
        wranglers = self._get_top_level_wranglers()
        if wranglers or not return_messages:
            message = 'top level ({} assets):'.format(count)
            if not found_problems:
                message = '{} OK'.format(message)
            messages.insert(0, message)
            messages = [stringtools.capitalize_start(_) for _ in messages]
            messages = [tab + _ for _ in messages]
        message = '{}:'.format(name)
        if not wranglers and not found_problems and return_messages:
            message = '{} OK'.format(message)
        messages.insert(0, message)
        if wranglers:
            controller = self._io_manager._controller(
                controller=self,
                current_score_directory=self._path,
            )
            silence = self._io_manager._silent()
            with controller, silence:
                tab = self._io_manager._tab
                for wrangler in wranglers:
                    if hasattr(wrangler, 'check_every_package'):
                        result = wrangler.check_every_package(
                            indent=1,
                            problems_only=problems_only,
                            supply_missing=False,
                        )
                    else:
                        result = wrangler.check_every_file()
                    messages_, missing_directories_, missing_files_ = result
                    missing_directories.extend(missing_directories_)
                    missing_files.extend(missing_files_)
                    messages_ = [
                        stringtools.capitalize_start(_) for _ in messages_
                    ]
                    messages_ = [tab + _ for _ in messages_]
                    messages.extend(messages_)
        if return_messages:
            return messages, missing_directories, missing_files
        else:
            self._io_manager._display(messages)
        if not missing_directories + missing_files:
            return messages, missing_directories, missing_files
        if supply_missing is None:
            directory_count = len(missing_directories)
            file_count = len(missing_files)
            directories = stringtools.pluralize('directory', directory_count)
            files = stringtools.pluralize('file', file_count)
            if missing_directories and missing_files:
                prompt = 'supply missing {} and {}?'.format(directories, files)
            elif missing_directories:
                prompt = 'supply missing {}?'.format(directories)
            elif missing_files:
                prompt = 'supply missing {}?'.format(files)
            else:
                raise ValueError
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return
            supply_missing = bool(result)
        if not supply_missing:
            return messages, missing_directories, missing_files
        messages = []
        messages.append('Made:')
        for missing_directory in missing_directories:
            os.makedirs(missing_directory)
            gitignore_path = os.path.join(missing_directory, '.gitignore')
            with open(gitignore_path, 'w') as file_pointer:
                file_pointer.write('')
            message = tab + missing_directory
            messages.append(message)
            supplied_directories.append(missing_directory)
        for missing_file in missing_files:
            if missing_file.endswith('__init__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
            elif missing_file.endswith('__metadata__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
                lines.append('import collections')
                lines.append('')
                lines.append('')
                lines.append('metadata = collections.OrderedDict([])')
            elif missing_file.endswith('__views__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
                lines.append(self._abjad_import_statement)
                lines.append('from scoremanager import idetools')
                lines.append('')
                lines.append('')
                line = 'view_inventory = idetools.ViewInventory([])'
                lines.append(line)
            elif missing_file.endswith('definition.py'):
                source_path = os.path.join(
                    self._configuration.score_manager_directory,
                    'boilerplate',
                    'definition.py',
                )
                with open(source_path, 'r') as file_pointer:
                    lines = file_pointer.readlines()
                lines = [_.strip() for _ in lines]
            else:
                message = 'do not know how to make stub for {}.'
                message = message.format(missing_file)
                raise ValueError(message)
            contents = '\n'.join(lines)
            with open(missing_file, 'w') as file_pointer:
                file_pointer.write(contents)
            message = tab + missing_file
            messages.append(message)
            supplied_files.append(missing_file)
        if return_supply_messages:
            return messages, supplied_directories, supplied_files
        else:
            self._io_manager._display(messages)
        return messages, supplied_directories, supplied_files
Esempio n. 19
0
 def _load_message(self):
     message = self._current_prompt.message
     if self.capitalize_prompts:
         message = stringtools.capitalize_start(message)
     self._messages.append(message)
Esempio n. 20
0
    def check_every_package(
        self, 
        indent=0,
        problems_only=None, 
        supply_missing=None,
        ):
        r'''Checks every package.

        Returns none.
        '''
        messages = []
        missing_directories, missing_files = [], []
        supplied_directories, supplied_files = [], []
        tab = indent * self._io_manager._tab
        if problems_only is None:
            prompt = 'show problem assets only?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return messages, missing_directories, missing_files
            problems_only = bool(result)
        managers = self._list_visible_asset_managers()
        found_problem = False
        for manager in managers:
            with self._io_manager._silent():
                result = manager.check_package(
                    return_messages=True,
                    problems_only=problems_only,
                    )
            messages_, missing_directories_, missing_files_ = result
            missing_directories.extend(missing_directories_)
            missing_files.extend(missing_files_)
            messages_ = [stringtools.capitalize_start(_) for _ in messages_]
            messages_ = [tab + _ for _ in messages_]
            if messages_:
                found_problem = True
                messages.extend(messages_)
            else:
                message = 'No problem assets found.'
                message = tab + tab + message
                messages.append(message)
        found_problems = bool(messages)
        if self._session.is_in_score:
            path = self._get_current_directory()
            name = os.path.basename(path)
            count = len(managers)
            message = '{} directory ({} packages):'.format(name, count)
            if not found_problems:
                message = '{} OK'.format(message)
            messages.insert(0, message)
        self._io_manager._display(messages)
        if not found_problem:
            return messages, missing_directories, missing_files
        if supply_missing is None:
            prompt = 'supply missing directories and files?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return messages, missing_directories, missing_files
            supply_missing = bool(result)
        if not supply_missing:
            return messages, missing_directories, missing_files
        messages = []
        for manager in managers:
            with self._io_manager._silent():
                result = manager.check_package(
                    return_supply_messages=True,
                    supply_missing=True,
                    )
            messages_, supplied_directories_, supplied_files_ = result
            supplied_directories.extend(supplied_directories_)
            supplied_files.extend(supplied_files_)
            if messages_:
                messages_ = [tab + tab + _ for _ in messages_]
                messages.extend(messages_)
        self._io_manager._display(messages)
        return messages, supplied_directories, supplied_files
Esempio n. 21
0
    def check_package(
        self,
        problems_only=None,
        return_messages=False,
        return_supply_messages=False,
        supply_missing=None,
        ):
        r'''Checks package.

        Returns none.
        '''
        if problems_only is None:
            prompt = 'show problem assets only?'
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return
            problems_only = bool(result)
        tab = self._io_manager._tab
        optional_directories, optional_files = [], []
        missing_directories, missing_files = [], []
        required_directories, required_files = [], []
        supplied_directories, supplied_files = [], []
        unrecognized_directories, unrecognized_files = [], []
        names = self._list()
        for name in names:
            path = os.path.join(self._path, name)
            if os.path.isdir(path):
                if name in self._required_directories:
                    required_directories.append(path)
                elif name in self._optional_directories:
                    optional_directories.append(path)
                else:
                    unrecognized_directories.append(path)
            elif os.path.isfile(path):
                if name in self._required_files:
                    required_files.append(path)
                elif name in self._optional_files:
                    optional_files.append(path)
                else:
                    unrecognized_files.append(path)
            else:
                raise TypeError(path)
        recognized_directories = required_directories + optional_directories
        recognized_files = required_files + optional_files
        for required_directory in self._required_directories:
            path = os.path.join(self._path, required_directory)
            if path not in recognized_directories:
                missing_directories.append(path)
        for required_file in self._required_files:
            path = os.path.join(self._path, required_file)
            if path not in recognized_files:
                missing_files.append(path)
        messages = []
        if not problems_only:
            messages_ = self._format_ratio_check_messages(
                required_directories,
                self._required_directories,
                'required directory',
                participal='found',
                )
            messages.extend(messages_)
        if missing_directories:
            messages_ = self._format_ratio_check_messages(
                missing_directories,
                self._required_directories,
                'required directory',
                'missing',
                )
            messages.extend(messages_)
        if not problems_only:
            messages_ = self._format_ratio_check_messages(
                required_files,
                self._required_files,
                'required file',
                'found',
                )
            messages.extend(messages_)
        if missing_files:
            messages_ = self._format_ratio_check_messages(
                missing_files,
                self._required_files,
                'required file',
                'missing',
                )
            messages.extend(messages_)
        if not problems_only:
            messages_ = self._format_counted_check_messages(
                optional_directories,
                'optional directory',
                participal='found',
                )
            messages.extend(messages_)
            messages_ = self._format_counted_check_messages(
                optional_files,
                'optional file',
                participal='found',
                )
            messages.extend(messages_)
        messages_ = self._format_counted_check_messages(
            unrecognized_directories,
            'unrecognized directory',
            participal='found',
            )
        messages.extend(messages_)
        messages_ = self._format_counted_check_messages(
            unrecognized_files,
            'unrecognized file',
            participal='found',
            )
        messages.extend(messages_)
        tab = self._io_manager._tab
        messages = [tab + _ for _ in messages]
        name = self._path_to_asset_menu_display_string(self._path)
        found_problems = missing_directories or \
            missing_files or \
            unrecognized_directories or \
            unrecognized_files
        count = len(names)
        wranglers = self._get_top_level_wranglers()
        if wranglers or not return_messages:
            message = 'top level ({} assets):'.format(count)
            if not found_problems:
                message = '{} OK'.format(message)
            messages.insert(0, message)
            messages = [stringtools.capitalize_start(_) for _ in messages]
            messages = [tab + _ for _ in messages]
        message = '{}:'.format(name)
        if not wranglers and not found_problems and return_messages:
            message = '{} OK'.format(message)
        messages.insert(0, message)
        if wranglers:
            controller = self._io_manager._controller(
                controller=self,
                current_score_directory=self._path,
                )
            silence = self._io_manager._silent()
            with controller, silence:
                tab = self._io_manager._tab
                for wrangler in wranglers:
                    if hasattr(wrangler, 'check_every_package'):
                        result = wrangler.check_every_package(
                            indent=1,
                            problems_only=problems_only,
                            supply_missing=False,
                            )
                    else:
                        result = wrangler.check_every_file()
                    messages_, missing_directories_, missing_files_ = result
                    missing_directories.extend(missing_directories_)
                    missing_files.extend(missing_files_)
                    messages_ = [
                        stringtools.capitalize_start(_) for _ in messages_]
                    messages_ = [tab + _ for _ in messages_]
                    messages.extend(messages_)
        if return_messages:
            return messages, missing_directories, missing_files
        else:
            self._io_manager._display(messages)
        if not missing_directories + missing_files:
            return messages, missing_directories, missing_files
        if supply_missing is None:
            directory_count = len(missing_directories)
            file_count = len(missing_files)
            directories = stringtools.pluralize('directory', directory_count)
            files = stringtools.pluralize('file', file_count)
            if missing_directories and missing_files:
                prompt = 'supply missing {} and {}?'.format(directories, files)
            elif missing_directories:
                prompt = 'supply missing {}?'.format(directories)
            elif missing_files:
                prompt = 'supply missing {}?'.format(files)
            else:
                raise ValueError
            result = self._io_manager._confirm(prompt)
            if self._session.is_backtracking or result is None:
                return
            supply_missing = bool(result)
        if not supply_missing:
            return messages, missing_directories, missing_files
        messages = []
        messages.append('Made:')
        for missing_directory in missing_directories:
            os.makedirs(missing_directory)
            gitignore_path = os.path.join(missing_directory, '.gitignore')
            with open(gitignore_path, 'w') as file_pointer:
                file_pointer.write('')
            message = tab + missing_directory
            messages.append(message)
            supplied_directories.append(missing_directory)
        for missing_file in missing_files:
            if missing_file.endswith('__init__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
            elif missing_file.endswith('__metadata__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
                lines.append('import collections')
                lines.append('')
                lines.append('')
                lines.append('metadata = collections.OrderedDict([])')
            elif missing_file.endswith('__views__.py'):
                lines = []
                lines.append(self._configuration.unicode_directive)
                lines.append(self._abjad_import_statement)
                lines.append('from scoremanager import idetools')
                lines.append('')
                lines.append('')
                line = 'view_inventory = idetools.ViewInventory([])'
                lines.append(line)
            elif missing_file.endswith('definition.py'):
                source_path = os.path.join(
                    self._configuration.score_manager_directory,
                    'boilerplate',
                    'definition.py',
                    )
                with open(source_path, 'r') as file_pointer:
                    lines = file_pointer.readlines()
                lines = [_.strip() for _ in lines]
            else:
                message = 'do not know how to make stub for {}.'
                message = message.format(missing_file)
                raise ValueError(message)
            contents = '\n'.join(lines)
            with open(missing_file, 'w') as file_pointer:
                file_pointer.write(contents)
            message = tab + missing_file
            messages.append(message)
            supplied_files.append(missing_file)
        if return_supply_messages:
            return messages, supplied_directories, supplied_files
        else:
            self._io_manager._display(messages)
        return messages, supplied_directories, supplied_files