Skip to content

Commit

Permalink
Split FlaskClient-specific functionality from cli.run
Browse files Browse the repository at this point in the history
  • Loading branch information
pylipp committed Dec 28, 2019
1 parent 8725ce9 commit c93d842
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
22 changes: 4 additions & 18 deletions financeager/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@
import os
import sys

from financeager import offline, __version__, PERIOD_DATE_FORMAT,\
init_logger, make_log_stream_handler_verbose, setup_log_file_handler,\
entries, listing
from financeager import __version__, PERIOD_DATE_FORMAT, entries, listing,\
init_logger, make_log_stream_handler_verbose, setup_log_file_handler
import financeager
from financeager import communication as comm
from .config import Configuration
from .entries import CategoryEntry
from .exceptions import OfflineRecoveryError, InvalidConfigError,\
PreprocessingError
from .exceptions import InvalidConfigError, PreprocessingError

logger = init_logger(__name__)

Expand Down Expand Up @@ -87,23 +85,11 @@ def _info(message):
formatting_options[option] = params.pop(option)

client = comm.client(configuration=configuration, sinks=sinks)
success, store_offline = client.safely_run(command, **params)
success, _ = client.safely_run(command, **params)

if success:
exit_code = SUCCESS

# When regular command was successfully executed, attempt to recover
# offline backup
try:
if offline.recover(client):
sinks.info("Recovered offline backup.")
except OfflineRecoveryError:
sinks.error("Offline backup recovery failed!")
exit_code = FAILURE

if store_offline and offline.add(command, **params):
sinks.info("Stored '{}' request in offline backup.".format(command))

client.shutdown()

return exit_code
Expand Down
27 changes: 25 additions & 2 deletions financeager/communication.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import traceback

import financeager
from . import httprequests, localserver
from .exceptions import InvalidRequest, CommunicationError
from . import httprequests, localserver, offline
from .exceptions import InvalidRequest, CommunicationError, OfflineRecoveryError


def client(*, configuration, sinks):
Expand Down Expand Up @@ -78,6 +78,29 @@ def __init__(self, *, configuration, sinks):

financeager.init_logger("urllib3")

def safely_run(self, command, **params):
"""Execute base functionality.
If successful, attempt to recover offline backup. Otherwise store
request in offline backup.
:return: tuple(bool, bool)
"""
success, store_offline = super().safely_run(command, **params)

if success:
try:
if offline.recover(super()):
self.sinks.info("Recovered offline backup.")
except OfflineRecoveryError:
self.sinks.error("Offline backup recovery failed!")
success = False

if store_offline and offline.add(command, **params):
self.sinks.info(
"Stored '{}' request in offline backup.".format(command))

return success, store_offline


class LocalServerClient(Client):
"""Client for communicating with the financeager localserver."""
Expand Down

0 comments on commit c93d842

Please sign in to comment.