diff --git a/cogs/ReactionMenu.py b/cogs/ReactionMenu.py index 81f7cc72..8c1feaf6 100644 --- a/cogs/ReactionMenu.py +++ b/cogs/ReactionMenu.py @@ -1,8 +1,7 @@ import datetime -import discord from discord import Embed, Colour -from discord.ext import commands +from discord.ext import commands, menus from discord.ext.commands import command @@ -175,7 +174,7 @@ def embeds(self): print(ex) -class HelpMenu(discord.ext.menus.Menu): +class HelpMenu(menus.Menu): def __init__(self, i, bot): super().__init__() self.i = i @@ -185,7 +184,7 @@ class HelpMenu(discord.ext.menus.Menu): initial = embeds(self)[self.i] return await channel.send(embed=initial) - @discord.ext.menus.button('\N{LEFTWARDS BLACK ARROW}') + @menus.button('\N{LEFTWARDS BLACK ARROW}') async def on_left_arrow(self, payload): def check(m): return m.author == payload.member @@ -199,7 +198,7 @@ class HelpMenu(discord.ext.menus.Menu): else: return - @discord.ext.menus.button('\N{BLACK RIGHTWARDS ARROW}') + @menus.button('\N{BLACK RIGHTWARDS ARROW}') async def on_right_arrow(self, payload): def check(m): return m.author == payload.member @@ -213,7 +212,7 @@ class HelpMenu(discord.ext.menus.Menu): else: return - @discord.ext.menus.button('\N{BLACK SQUARE FOR STOP}\ufe0f') + @menus.button('\N{BLACK SQUARE FOR STOP}\ufe0f') async def on_stop(self, payload): stop = stop_embed(self) await self.message.edit(embed=stop) diff --git a/requirements.txt b/requirements.txt index 16b53284..3166c34b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,4 @@ discord.py owotext aiohttp discord -menus \ No newline at end of file +discord-ext-menus \ No newline at end of file diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/DESCRIPTION.rst b/venv/Lib/site-packages/Menus-0.2.0.dist-info/DESCRIPTION.rst deleted file mode 100644 index e1187231..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,3 +0,0 @@ -UNKNOWN - - diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/INSTALLER b/venv/Lib/site-packages/Menus-0.2.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/METADATA b/venv/Lib/site-packages/Menus-0.2.0.dist-info/METADATA deleted file mode 100644 index 3ca139f4..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/METADATA +++ /dev/null @@ -1,15 +0,0 @@ -Metadata-Version: 2.0 -Name: Menus -Version: 0.2.0 -Summary: Create cli menus with ease -Home-page: https://github.com/JMSwag/Menus -Author: Digital Sapphire -Author-email: menus@digitalsapphire.io -License: MIT -Platform: UNKNOWN -Requires-Dist: dsdev-utils -Requires-Dist: six - -UNKNOWN - - diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/RECORD b/venv/Lib/site-packages/Menus-0.2.0.dist-info/RECORD deleted file mode 100644 index 70eb75ee..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/RECORD +++ /dev/null @@ -1,24 +0,0 @@ -Menus-0.2.0.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10 -Menus-0.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Menus-0.2.0.dist-info/METADATA,sha256=5E660I04WM6yX5M3KfFsqJZNz5l4kckz3MFAou_1Iu0,280 -Menus-0.2.0.dist-info/RECORD,, -Menus-0.2.0.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 -Menus-0.2.0.dist-info/metadata.json,sha256=k5fJgBoAIoSIFjuR1yUm6YALlY9n5FTybcF8RqhDLjQ,480 -Menus-0.2.0.dist-info/top_level.txt,sha256=mr-Mm53IP5nmAdXmK0MURdgtX5aoNBmIrgHgyPdKUac,11 -Menus-0.2.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -menus/__init__.py,sha256=Racmika2iOJjIGPzbSZs8hQARcJaif_N2rLyz0uUGJY,1419 -menus/__pycache__/__init__.cpython-36.pyc,, -menus/__pycache__/_version.cpython-36.pyc,, -menus/__pycache__/engine.cpython-36.pyc,, -menus/__pycache__/example.cpython-36.pyc,, -menus/__pycache__/exceptions.cpython-36.pyc,, -menus/__pycache__/menu.cpython-36.pyc,, -menus/__pycache__/utils.cpython-36.pyc,, -menus/_version.py,sha256=Z0DxOc2U4ydSV42gG9XZ6DRszh-5f53SRi3SAzpPxKU,471 -menus/engine.py,sha256=tG6395XNJ4LcKzE76hdcDGGrOFPRYrOXdV6pjIN9Rb0,3315 -menus/example.py,sha256=tLYJJTtloPBfFc3kui6s-d_nPAXyEdGs8gqjssHOIpA,3292 -menus/exceptions.py,sha256=Widb24ezSJNpMy8Dt8Wi_xQmXA561x3cI4hj27Br2_4,2400 -menus/menu.py,sha256=kMzIcnwPsFHQLEN2NKQ0m4EUqTlzBKNlVnje7tJ6Cbs,6983 -menus/utils.py,sha256=ReoV8xbA9SjX6psiSPevG-A7NVJWQLmz0rVw7MLuPIQ,3670 -site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -site/__pycache__/__init__.cpython-36.pyc,, diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/WHEEL b/venv/Lib/site-packages/Menus-0.2.0.dist-info/WHEEL deleted file mode 100644 index 8b6dd1b5..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.29.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/metadata.json b/venv/Lib/site-packages/Menus-0.2.0.dist-info/metadata.json deleted file mode 100644 index 3fb5f9a4..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"extensions": {"python.details": {"contacts": [{"email": "menus@digitalsapphire.io", "name": "Digital Sapphire", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/JMSwag/Menus"}}}, "extras": [], "generator": "bdist_wheel (0.29.0)", "license": "MIT", "metadata_version": "2.0", "name": "Menus", "run_requires": [{"requires": ["dsdev-utils", "six"]}], "summary": "Create cli menus with ease", "version": "0.2.0"} \ No newline at end of file diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/top_level.txt b/venv/Lib/site-packages/Menus-0.2.0.dist-info/top_level.txt deleted file mode 100644 index 39a88e33..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -menus -site diff --git a/venv/Lib/site-packages/Menus-0.2.0.dist-info/zip-safe b/venv/Lib/site-packages/Menus-0.2.0.dist-info/zip-safe deleted file mode 100644 index 8b137891..00000000 --- a/venv/Lib/site-packages/Menus-0.2.0.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/Lib/site-packages/menus/__init__.py b/venv/Lib/site-packages/menus/__init__.py deleted file mode 100644 index cdff786e..00000000 --- a/venv/Lib/site-packages/menus/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -import logging - -from menus.engine import Engine -from menus.exceptions import MenusError -from menus.menu import BaseMenu - - -__all__ = ['BaseMenu', 'Engine', 'MenusError'] - - -log = logging.getLogger() - - -from ._version import get_versions # noqa -__version__ = get_versions()['version'] -del get_versions diff --git a/venv/Lib/site-packages/menus/_version.py b/venv/Lib/site-packages/menus/_version.py deleted file mode 100644 index 6def6439..00000000 --- a/venv/Lib/site-packages/menus/_version.py +++ /dev/null @@ -1,21 +0,0 @@ - -# This file was generated by 'versioneer.py' (0.15) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json -import sys - -version_json = ''' -{ - "dirty": false, - "error": null, - "full-revisionid": "4dd50cb49a508b57d56a4d512ef40da67b01ab77", - "version": "0.2.0" -} -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) diff --git a/venv/Lib/site-packages/menus/engine.py b/venv/Lib/site-packages/menus/engine.py deleted file mode 100644 index 1b0742a0..00000000 --- a/venv/Lib/site-packages/menus/engine.py +++ /dev/null @@ -1,96 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the -# following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -# TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -# OR OTHER DEALINGS IN THE SOFTWARE. -# -------------------------------------------------------------------------- -import logging -import sys - -from menus.example import load_example_menus -from menus.exceptions import MenusError -from menus.menu import BaseMenu, MainMenu -from menus.utils import check_commands_else_raise - - -log = logging.getLogger(__name__) - - -# Ensure that a custom menus subclasses BaseMenu -def check_mro(c): - if issubclass(c.__class__, BaseMenu) is False: - raise MenusError('Not a sublcass of BaseMenu \n\nclass ' - '{}'.format(c.__class__.__name__), - expected=True) - return True - - -class Engine(object): - - def __init__(self, app_name=None, menus=None, example=False): - # Name used in every menu header - if app_name is None: - app_name = 'ACME' - - # Create initial commands for main menu - sub_menus = [] - - # Adding submenus - if example is True: - sub_menus += load_example_menus() - else: - if menus is not None: - for m in menus: - check_mro(m) - sub_menus += menus - - # Commands with app_name added to it - new_sub_menus = [] - for sub in sub_menus: - # Adding the app name to the menu - sub.app_name = app_name - sub.commands.append(('Main Menu', getattr(sub, 'done'))) - - # Quick hack to add users class name as menu option - # only for main menu - new_sub_menu = (sub.menu_name, sub) - new_sub_menus.append(new_sub_menu) - - new_sub_menus.append(('Quit', self.quit)) - - # Sanatisation checks on passed commands - check_commands_else_raise(new_sub_menus) - - # Initilazie main menu with submenus - self.main = MainMenu(new_sub_menus) - - # Adding the app name to the main menu - self.main.app_name = app_name - - # Starts event loop - def start(self): # pragma: no cover - while 1: - start = self.main.display() - start() - - def quit(self): # pragma: no cover - log.debug('Quitting') - sys.exit(0) diff --git a/venv/Lib/site-packages/menus/example.py b/venv/Lib/site-packages/menus/example.py deleted file mode 100644 index 31df72df..00000000 --- a/venv/Lib/site-packages/menus/example.py +++ /dev/null @@ -1,98 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the -# following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -# TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -# OR OTHER DEALINGS IN THE SOFTWARE. -# -------------------------------------------------------------------------- -import logging - -from menus.menu import BaseMenu - - -log = logging.getLogger(__name__) - - -class Cool(BaseMenu): - - def __init__(self): - # An option is a tuple which consists of ('Display Name', function) - commands = [('Speak', self.speak)] - super(Cool, self).__init__(commands=commands) - - def speak(self): - # Used to nicely display a message towards - # the middle of the screen - self.display_msg('Cool is speaking') - - # Will pause for 3 seconds - self.pause(seconds=3) - - # Used to return to Cool Menu. If omitted - # the user will be returned to the Main Menu - self() - - -class Hot(BaseMenu): - - def __init__(self): - # An option is a tuple which consists of ('Display Name', function) - commands = [('Speak', self.speak)] - super(Hot, self).__init__(commands=commands, menu_name='Really Hot') - - def speak(self): - # Used to nicely display a message towards - # the middle of the screen - self.display_msg("It's getting hot in here!") - - # Will pause for 3 seconds - self.pause(seconds=3) - - # Used to return to Cool Menu. If omitted - # the user will be returned to the Main Menu - self() - - -class Keys(BaseMenu): - - def __init__(self): - # An option is a tuple which consists of ('Display Name', function) - commands = [('Show Public Key', self.show_public_key)] - - super(Keys, self).__init__(commands=commands) - - def show_public_key(self): - log.debug('Show public key') - - # Used to nicely display a message towards - # the middle of the screen - self.display_msg('thdkalfjl;da;ksfkda;fdkj') - - # Will prompt user to press enter to continue - self.pause(enter_to_continue=True) - - # Used to return to Cool Menu. If omitted - # the user will be returned to the Main Menu - self() - - -# List of menus to be used when user initializes Engine(example=True) -def load_example_menus(): - return [Cool(), Hot(), Keys()] diff --git a/venv/Lib/site-packages/menus/exceptions.py b/venv/Lib/site-packages/menus/exceptions.py deleted file mode 100644 index 9d7c003e..00000000 --- a/venv/Lib/site-packages/menus/exceptions.py +++ /dev/null @@ -1,69 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the -# following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -# TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -# OR OTHER DEALINGS IN THE SOFTWARE. -# -------------------------------------------------------------------------- -from __future__ import unicode_literals - -import sys -import traceback - - -class STDError(Exception): - """Extends exceptions to show added message if error isn't expected. - - Args: - - msg (str): error message - - Kwargs: - - tb (obj): is the original traceback so that it can be printed. - - expected (bool): - - Meaning: - - True - Report issue msg not shown - - False - Report issue msg shown - """ - def __init__(self, msg, tb=None, expected=False): - if not expected: - msg = msg + ('; please report this issue on https://git' - 'hub.com/JMSwag/Menus') - msg = '\n\n' + msg - super(STDError, self).__init__(msg) - - self.traceback = tb - self.exc_info = sys.exc_info() # preserve original exception - - def format_traceback(self): - if self.traceback is None: - return None - return ''.join(traceback.format_tb(self.traceback)) - - -class MenusError(STDError): - """Raised for Archiver exceptions""" - def __init__(self, *args, **kwargs): - super(MenusError, self).__init__(*args, **kwargs) diff --git a/venv/Lib/site-packages/menus/menu.py b/venv/Lib/site-packages/menus/menu.py deleted file mode 100644 index da2c6152..00000000 --- a/venv/Lib/site-packages/menus/menu.py +++ /dev/null @@ -1,206 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files -# (the "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the -# following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -# TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -# OR OTHER DEALINGS IN THE SOFTWARE. -# -------------------------------------------------------------------------- -from __future__ import print_function -import logging -import os -import time -import warnings - -from dsdev_utils.terminal import (ask_yes_no, - get_correct_answer, - get_terminal_size) -import six - -from menus.exceptions import MenusError -from menus.utils import clear_screen_cmd, Getch - -log = logging.getLogger(__name__) - - -class BaseMenu(object): - - def __init__(self, **kwargs): - # Used to display the apps name on all menu headers - self.app_name = None - - # The custom menu name - self.menu_name = kwargs.get('menu_name') - - # If we do not have a custom menu - # name then use the class name - if self.menu_name is None: - self.menu_name = self.__class__.__name__ - - # A message to display when this menus loads - self.message = kwargs.get('message') - - # User commands for this menu - self._commands = kwargs.get('commands', []) - - # ToDo: Remove in v1.0 - # User commands for this menu - options = kwargs.get('options', []) - if len(options) > 0: - if len(self._commands) > 0: - raise MenusError('Cannot mix old & new API. Use ' - 'commands kwarg only.') - - warn_msg = ('BaseMenu(options=[]) is deprecated, ' - 'user BaseMenu(commands=[]') - warnings.warn(warn_msg) - self._commands += options - # End ToDo - - @property - def commands(self): - return self._commands - - def __call__(self): - x = self.display() - x() - - def display(self): - self._display_menu_header() - self.display_msg(self.message) - return self._menu_options(self._commands) - - def pause(self, seconds=5, enter_to_continue=False): - if not isinstance(enter_to_continue, bool): - raise MenusError('enter_to_continue must be boolean', - expected=True) - if not isinstance(seconds, six.integer_types): - raise MenusError('seconds must be integer', expected=True) - - if enter_to_continue is True: - self.display_msg('Press enter to quit') - six.moves.input() - else: - time.sleep(seconds) - return True - - # Prompt the user with a question & only accept - # yes or no answers - def ask_yes_no(self, question, default): - return ask_yes_no(question, default) - - # Promot the user with a question & confirm it's correct. - # If required is True, user won't be able to enter a blank answer - def get_correct_answer(self, question, default, required=False): - return get_correct_answer(question, default, required) - - # Display a message centered on the screen. - def display_msg(self, message=None): - self._display_msg(message) - - def done(self): - pass - - # ToDo: Remove in v1.0 - def get_correct_action(self, question, default, required): - return get_correct_answer(question, default, required) - # End ToDo - - # Takes a string and adds it to the menu header along side - # the app name. - def _display_menu_header(self): - window_size = get_terminal_size()[0] - - # Adding some styling to the header - def add_style(): - top = '*' * window_size + '\n' - bottom = '\n' + '*' * window_size + '\n' - - header = self.app_name + ' - ' + self.menu_name - header = header.center(window_size) - msg = top + header + bottom - return msg - - os.system(clear_screen_cmd) - print(add_style()) - - def _display_msg(self, message): - window_size = get_terminal_size()[0] - if message is None: - return '' - - if not isinstance(message, six.string_types): - log.warning('Did not pass str') - return '' - - # Home grown word wrap - def format_msg(): - formatted = [] - finished = ['\n'] - count = 0 - words = message.split(' ') - for w in words: - w = w + ' ' - if count + len(w) > window_size / 2: - finished.append(''.join(formatted).center(window_size)) - finished.append('\n') - count = len(w) - # Starting a new line. - formatted = [] - formatted.append(w) - else: - formatted.append(w) - count += len(w) - finished.append(''.join(formatted).center(window_size)) - finished.append('\n') - return ''.join(finished) - print(format_msg()) - - # Takes a list of tuples(menu_name, call_back) adds menu numbers - # then prints menu to screen. - # Gets input from user, then returns the callback - def _menu_options(self, commands=None): - - def add_options(): - getch = Getch() - menu = [] - count = 1 - for s in commands: - item = '{}. {}\n'.format(count, s[0]) - menu.append(item) - count += 1 - print(''.join(menu)) - answers = [] - for a in six.moves.range(1, len(menu) + 1): - answers.append(str(a)) - while 1: - ans = getch() - if ans in answers: - break - else: - log.debug('Not an acceptable answer!') - return commands[int(ans) - 1][1] - return add_options() - - -# This is used as the initial Menu -class MainMenu(BaseMenu): - - def __init__(self, commands): - super(MainMenu, self).__init__(commands=commands) diff --git a/venv/Lib/site-packages/menus/utils.py b/venv/Lib/site-packages/menus/utils.py deleted file mode 100644 index 0a18b8cd..00000000 --- a/venv/Lib/site-packages/menus/utils.py +++ /dev/null @@ -1,118 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2016 Digital Sapphire -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -import logging -import sys - -import six - -from menus.exceptions import MenusError - -# Preventing import errors on non windows -# platforms -if sys.platform == 'win32': - import msvcrt -else: - import termios - import tty - - -log = logging.getLogger(__name__) - -if sys.platform == 'win32': - clear_screen_cmd = 'cls' -else: - clear_screen_cmd = 'clear' - - -def check_commands_else_raise(options): - # We need a least one thing to display - # Using this as a teaching aid. Also making the use of - # Engine(example=Ture) very explicit - if len(options) == 0: - msg = ('You must pass a menus object or initilize ' - 'like -> Engine(example=True)') - raise MenusError(msg, expected=True) - - # We need a list or tuple to loop through - if not isinstance(options, list): - if not isinstance(options, tuple): - msg = ('You must pass a list or tuple to menus.') - raise MenusError(msg, expected=True) - - if len(options) > 9: - msg = ('Cannot have more then 8 options per menu') - raise MenusError(msg, expected=True) - - for o in options: - # Ensuring each item in list/tuple is a tuple - if not isinstance(o, tuple): - raise MenusError('Item must be tuple: {}'.format(o), expected=True) - - if len(o) != 2: - raise MenusError('Invalid number of tuple ' - 'items:\n\n{}'.format(o)) - # Ensure index 0 is a str - if not isinstance(o[0], six.string_types): - msg = 'Menus are passed as [("Menu Name", MenuObject())]' - raise MenusError(msg) - - return True - - -# Gets a single character form standard input. Does not echo to the screen -class Getch(object): - - def __init__(self): - if sys.platform == 'win32': - self.impl = GetchWindows() - else: - self.impl = GetchUnix() - - def __call__(self): - return self.impl() - - -class GetchUnix(object): - def __init__(self): - # Not sure if these imports are required here - # import tty, sys - pass - - def __call__(self): - fd = sys.stdin.fileno() - old_settings = termios.tcgetattr(fd) - try: - tty.setraw(sys.stdin.fileno()) - ch = sys.stdin.read(1) - finally: - termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) - return ch - - -class GetchWindows(object): - def __init__(self): - # Not sure if this import is required - # import msvcrt - pass - - def __call__(self): - return msvcrt.getch() diff --git a/venv/Lib/site-packages/site/__init__.py b/venv/Lib/site-packages/site/__init__.py deleted file mode 100644 index e69de29b..00000000