Skip to content

Commit dee8992

Browse files
Added getpass method to log21.Logger class and added log21.getpass function.
1 parent 193f8d6 commit dee8992

6 files changed

Lines changed: 67 additions & 11 deletions

File tree

CHANGES-LOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ Help this project by [Donation](DONATE.md)
66
Changes log
77
-----------
88

9+
### 2.1.7
10+
11+
Added `getpass` method to `log21.Logger` class and added `log21.getpass` function.
12+
913
### 2.1.4-6
1014

1115
Bug fixes.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ python setup.py install
5050
Changes
5151
-------
5252

53-
### 2.1.6
53+
### 2.1.7
5454

55-
Bug fixes.
55+
Added `getpass` method to `log21.Logger` class and added `log21.getpass` function.
5656

5757
[Full Changes Log](https://github.com/MPCodeWriter21/log21/blob/master/CHANGES-LOG.md)
5858

log21/Logger.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# log21.Logger.py
22
# CodeWriter21
33

4-
import log21 as _log21
54
import logging as _logging
5+
6+
from getpass import getpass
67
from logging import raiseExceptions as _raiseExceptions
8+
9+
import log21 as _log21
710
from log21.Levels import *
811

912
__all__ = ['Logger']
@@ -153,6 +156,16 @@ def input(self, *msg, args: tuple = (), end='', **kwargs):
153156
self._log(self.level if self.level >= NOTSET else NOTSET, msg, args, **kwargs)
154157
return input()
155158

159+
def getpass(self, *msg, args: tuple = (), end='', **kwargs):
160+
"""
161+
162+
163+
:return:
164+
"""
165+
msg = ' '.join([str(m) for m in msg]) + end
166+
self._log(self.level if self.level >= NOTSET else NOTSET, msg, args, **kwargs)
167+
return getpass('')
168+
156169
def print_progress(self, progress: float, total: float):
157170
"""
158171
Log progress.

log21/LoggingWindow.py

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ def __init__(self, name, level=_NOTSET, width: int = 80, height: int = 20, defau
249249

250250
# Input related lines
251251
self.getting_input = False
252+
self.getting_pass = False
252253
self.input_text = ''
253254
# cursor counter is used for making a nice blinking cursor
254255
self.__cursor_counter = 1
@@ -317,14 +318,41 @@ def input(self, *msg, args: tuple = (), end='', **kwargs) -> str:
317318
self.getting_input = False
318319
return self.input_text
319320

321+
def getpass(self, *msg, args: tuple = (), end='', **kwargs) -> str:
322+
"""
323+
Prints a message and waits for input.
324+
325+
:param msg: The message to print.
326+
:param args: The arguments to pass to the message.
327+
:param end: The end of the message.
328+
:param kwargs:
329+
:return: The input.
330+
"""
331+
msg = ' '.join([str(m) for m in msg]) + end
332+
self._log(self.level if self.level >= _NOTSET else _NOTSET, msg, args, **kwargs)
333+
self.input_text = ''
334+
self.getting_pass = True
335+
self.cursor_position = 0
336+
self.logs.focus()
337+
try:
338+
while self.getting_pass:
339+
self.cursor_position = self.cursor_position
340+
self.window.update()
341+
self.window.after(10)
342+
except KeyboardInterrupt:
343+
self.input_text = ''
344+
self.getting_pass = False
345+
return self.input_text
346+
320347
def key_press(self, event):
321348
"""
322349
KeyPress event callback for self.logs.
323350
"""
324-
if self.getting_input:
351+
if self.getting_input or self.getting_pass:
325352
# Handles Enter key
326353
if event.keysym == 'Return':
327354
self.getting_input = False
355+
self.getting_pass = False
328356
self.cursor_position = 0
329357
self.logs.config(state=_tkinter.NORMAL)
330358
self.logs.insert(_tkinter.END, '\n')
@@ -337,24 +365,30 @@ def key_press(self, event):
337365
self.logs.delete(f'end-{len(self.input_text) + 1}c', 'end-1c')
338366
self.input_text = self.input_text[:self.cursor_position - 1] + \
339367
self.input_text[self.cursor_position:]
340-
self.logs.insert(_tkinter.END, self.input_text)
368+
if self.getting_pass:
369+
self.logs.insert(_tkinter.END, '*' * len(self.input_text))
370+
else:
371+
self.logs.insert(_tkinter.END, self.input_text)
341372
self.logs.config(state=_tkinter.DISABLED)
342373
self.cursor_position -= 1
343374
# Handles Right Arrow
344375
elif event.keysym == 'Right':
345-
if self.cursor_position < len(self.input_text):
376+
if self.cursor_position < len(self.input_text) and not self.getting_pass:
346377
self.cursor_position += 1
347378
# Handles Left Arrow
348379
elif event.keysym == 'Left':
349-
if self.cursor_position > 0:
380+
if self.cursor_position > 0 and not self.getting_pass:
350381
self.cursor_position -= 1
351382
# Handles other keys
352383
elif event.char:
353384
self.logs.config(state=_tkinter.NORMAL)
354385
self.logs.delete(f'end-{len(self.input_text) + 1}c', 'end-1c')
355386
self.input_text = self.input_text[:self.cursor_position] + event.char + \
356387
self.input_text[self.cursor_position:]
357-
self.logs.insert(_tkinter.END, self.input_text)
388+
if self.getting_pass:
389+
self.logs.insert(_tkinter.END, '*' * len(self.input_text))
390+
else:
391+
self.logs.insert(_tkinter.END, self.input_text)
358392
self.logs.config(state=_tkinter.DISABLED)
359393
self.cursor_position += 1
360394

log21/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from log21.Formatters import ColorizingFormatter, DecolorizingFormatter
2020
from log21.Colors import Colors, get_color, get_colors, ansi_escape, get_color_name, closest_color
2121

22-
__version__ = "2.1.6"
22+
__version__ = "2.1.7"
2323
__author__ = "CodeWriter21 (Mehrad Pooryoussof)"
2424
__github__ = "Https://GitHub.com/MPCodeWriter21/log21"
2525
__all__ = ['ColorizingStreamHandler', 'DecolorizingFileHandler', 'ColorizingFormatter', 'DecolorizingFormatter',
@@ -217,11 +217,16 @@ def print(*msg, args: tuple = (), end='\033[0m\n', **kwargs):
217217
logger.print(*msg, args=args, end=end, **kwargs)
218218

219219

220-
def input(*msg, args: tuple = (), end='\033[0m', **kwargs):
220+
def input(*msg, args: tuple = (), end='', **kwargs):
221221
logger = get_logger('log21.input', level=DEBUG, show_time=False, show_level=False)
222222
return logger.input(*msg, args=args, end=end, **kwargs)
223223

224224

225+
def getpass(*msg, args: tuple = (), end='', **kwargs):
226+
logger = get_logger('log21.getpass', level=DEBUG, show_time=False, show_level=False)
227+
return logger.getpass(*msg, args=args, end=end, **kwargs)
228+
229+
225230
def pprint(obj, indent=1, width=80, depth=None, signs_colors: _Dict[str, str] = None, *, compact=False, sort_dicts=True,
226231
underscore_numbers=False, end='\033[0m\n', **kwargs):
227232
logger = get_logger('log21.pprint', level=DEBUG, show_time=False, show_level=False)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
long_description = file.read()
88

99
DESCRIPTION = 'A simple logging package that helps you log colorized messages in Windows console.'
10-
VERSION = '2.1.6'
10+
VERSION = '2.1.7'
1111

1212
setup(
1313
name='log21',

0 commit comments

Comments
 (0)