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
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
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
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)
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
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
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
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()
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()
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
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
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
def _load_message(self): message = self._current_prompt.message if self.capitalize_prompts: message = stringtools.capitalize_start(message) self._messages.append(message)
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