__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# Copyright 2015 Canonical, Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
""" Re-usable input widgets
"""
from functools import partial
import logging
import re
from urwid import (
Edit,
IntEdit,
)
from subiquitycore.ui.container import (
WidgetWrap,
)
from subiquitycore.ui.selector import Selector
log = logging.getLogger("subiquitycore.ui.input")
class StringEditor(Edit):
""" Edit input class
Attaches its result to the `value` accessor.
"""
@property
def value(self):
return self.get_edit_text()
@value.setter # NOQA
def value(self, value):
self.set_edit_text(value)
class PasswordEditor(StringEditor):
""" Password input prompt with masking
"""
def __init__(self, mask="*"):
super().__init__(mask=mask)
class RestrictedEditor(StringEditor):
"""Editor that only allows certain characters."""
def __init__(self, allowed=None):
super().__init__()
self.matcher = re.compile(allowed)
def valid_char(self, ch):
return len(ch) == 1 and self.matcher.match(ch) is not None
RealnameEditor = partial(RestrictedEditor, r'[^:,=]')
EmailEditor = partial(RestrictedEditor, r'[-a-zA-Z0-9_.@+=]')
class UsernameEditor(StringEditor):
""" Username input prompt with input rules
"""
def keypress(self, size, key):
''' restrict what chars we allow for username '''
if self._command_map[key] is not None:
return super().keypress(size, key)
new_text = self.insert_text_result(key)[0]
username = r'[a-z_][a-z0-9_-]*'
# don't allow non username chars
if new_text != "" and re.match(username, new_text) is None:
return False
return super().keypress(size, key)
class IntegerEditor(WidgetWrap):
""" IntEdit input class
"""
def __init__(self, default=0):
self._edit = IntEdit(default=default)
super().__init__(self._edit)
@property
def value(self):
return self._edit.value()
@value.setter
def value(self, val):
return self._edit.set_edit_text(str(val))
class YesNo(Selector):
""" Yes/No selector
"""
def __init__(self):
opts = [_('Yes'), _('No')]
super().__init__(opts)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| tests | Folder | 0755 |
|
|
| views | Folder | 0755 |
|
|
| __init__.py | File | 639 B | 0644 |
|
| actionmenu.py | File | 4.71 KB | 0644 |
|
| anchors.py | File | 2.22 KB | 0644 |
|
| buttons.py | File | 1.64 KB | 0644 |
|
| container.py | File | 20.3 KB | 0644 |
|
| form.py | File | 14.73 KB | 0644 |
|
| frame.py | File | 1.6 KB | 0644 |
|
| interactive.py | File | 2.74 KB | 0644 |
|
| selector.py | File | 7.41 KB | 0644 |
|
| spinner.py | File | 1.73 KB | 0644 |
|
| stretchy.py | File | 6.1 KB | 0644 |
|
| table.py | File | 17.25 KB | 0644 |
|
| utils.py | File | 10.39 KB | 0644 |
|
| width.py | File | 1.91 KB | 0644 |
|