Convert gen.User into an abstract base class
This commit is contained in:
parent
05bd51b425
commit
00dba4727b
@ -1,45 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
|
||||||
#
|
|
||||||
# Copyright (C) 2013 Vassilii Khachaturov <vassilii@tarunz.org>
|
|
||||||
#
|
|
||||||
# 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; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# 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, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
""" Unittest for user.py """
|
|
||||||
|
|
||||||
import unittest
|
|
||||||
from .. import user
|
|
||||||
|
|
||||||
class TestUser:
|
|
||||||
TITLE = "Testing prompt"
|
|
||||||
MSG = "Choices are hard. Nevertheless, please choose!"
|
|
||||||
ACCEPT = "To be"
|
|
||||||
REJECT = "Not to be"
|
|
||||||
|
|
||||||
class TestUser_prompt(unittest.TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
self.user = user.User()
|
|
||||||
|
|
||||||
def test_not_implemented(self):
|
|
||||||
self.assertRaises(NotImplementedError, self.user.prompt,
|
|
||||||
TestUser.TITLE,
|
|
||||||
TestUser.MSG,
|
|
||||||
TestUser.ACCEPT,
|
|
||||||
TestUser.REJECT)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
@ -23,9 +23,10 @@ The User class provides basic interaction with the user.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
from abc import ABCMeta, abstractmethod
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
class User:
|
class User(metaclass=ABCMeta):
|
||||||
"""
|
"""
|
||||||
This class provides a means to interact with the user in an abstract way.
|
This class provides a means to interact with the user in an abstract way.
|
||||||
This class should be overridden by each respective user interface to
|
This class should be overridden by each respective user interface to
|
||||||
@ -39,6 +40,7 @@ class User:
|
|||||||
self.uistate = uistate
|
self.uistate = uistate
|
||||||
self.dbstate = dbstate
|
self.dbstate = dbstate
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def begin_progress(self, title, message, steps):
|
def begin_progress(self, title, message, steps):
|
||||||
"""
|
"""
|
||||||
Start showing a progress indicator to the user.
|
Start showing a progress indicator to the user.
|
||||||
@ -55,15 +57,14 @@ class User:
|
|||||||
:type steps: int
|
:type steps: int
|
||||||
:returns: none
|
:returns: none
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def step_progress(self):
|
def step_progress(self):
|
||||||
"""
|
"""
|
||||||
Advance the progress meter.
|
Advance the progress meter.
|
||||||
|
|
||||||
Don't use this method directly, use progress instead.
|
Don't use this method directly, use progress instead.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def callback(self, percentage, text=None):
|
def callback(self, percentage, text=None):
|
||||||
"""
|
"""
|
||||||
@ -83,13 +84,13 @@ class User:
|
|||||||
else:
|
else:
|
||||||
self._fileout.write("\r%02d%% %s" % (percentage, text))
|
self._fileout.write("\r%02d%% %s" % (percentage, text))
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def end_progress(self):
|
def end_progress(self):
|
||||||
"""
|
"""
|
||||||
Stop showing the progress indicator to the user.
|
Stop showing the progress indicator to the user.
|
||||||
|
|
||||||
Don't use this method directly, use progress instead.
|
Don't use this method directly, use progress instead.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
# Context-manager wrapper of the begin/step/end_progress above
|
# Context-manager wrapper of the begin/step/end_progress above
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@ -115,6 +116,7 @@ class User:
|
|||||||
finally:
|
finally:
|
||||||
self.end_progress()
|
self.end_progress()
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def prompt(self, title, message, accept_label, reject_label, parent=None,
|
def prompt(self, title, message, accept_label, reject_label, parent=None,
|
||||||
default_label=None):
|
default_label=None):
|
||||||
"""
|
"""
|
||||||
@ -135,8 +137,8 @@ class User:
|
|||||||
:returns: the user's answer to the question
|
:returns: the user's answer to the question
|
||||||
:rtype: bool
|
:rtype: bool
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def warn(self, title, warning=""):
|
def warn(self, title, warning=""):
|
||||||
"""
|
"""
|
||||||
Warn the user.
|
Warn the user.
|
||||||
@ -147,8 +149,8 @@ class User:
|
|||||||
:type warning: str
|
:type warning: str
|
||||||
:returns: none
|
:returns: none
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def notify_error(self, title, error=""):
|
def notify_error(self, title, error=""):
|
||||||
"""
|
"""
|
||||||
Notify the user of an error.
|
Notify the user of an error.
|
||||||
@ -159,8 +161,8 @@ class User:
|
|||||||
:type error: str
|
:type error: str
|
||||||
:returns: none
|
:returns: none
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def notify_db_error(self, error):
|
def notify_db_error(self, error):
|
||||||
"""
|
"""
|
||||||
Notify the user of a DB error.
|
Notify the user of a DB error.
|
||||||
@ -169,10 +171,9 @@ class User:
|
|||||||
:type error: str
|
:type error: str
|
||||||
:returns: none
|
:returns: none
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
def info(self, msg1, infotext, parent=None, monospaced=False):
|
def info(self, msg1, infotext, parent=None, monospaced=False):
|
||||||
"""
|
"""
|
||||||
Displays information to the user
|
Displays information to the user
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
|
||||||
|
@ -20,7 +20,6 @@ gramps/gen/__init__.py
|
|||||||
gramps/gen/sort.py
|
gramps/gen/sort.py
|
||||||
gramps/gen/soundex.py
|
gramps/gen/soundex.py
|
||||||
gramps/gen/updatecallback.py
|
gramps/gen/updatecallback.py
|
||||||
gramps/gen/user.py
|
|
||||||
gramps/gen/ggettext.py
|
gramps/gen/ggettext.py
|
||||||
#
|
#
|
||||||
# gen.datehandler package
|
# gen.datehandler package
|
||||||
|
Loading…
x
Reference in New Issue
Block a user