diff --git a/rattail_corepos/commands.py b/rattail_corepos/commands.py index 63a1f5e..c8b0815 100644 --- a/rattail_corepos/commands.py +++ b/rattail_corepos/commands.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2023 Lance Edgar +# Copyright © 2010-2024 Lance Edgar # # This file is part of Rattail. # @@ -24,11 +24,101 @@ Rattail Commands """ -from rattail import commands -from rattail.util import load_object +import typer +from typing_extensions import Annotated + +from corepos.enum import CoreDbType + +from rattail.commands import rattail_typer +from rattail.commands.typer import importer_command, file_importer_command, typer_get_runas_user +from rattail.commands.importing import (ImportSubcommand, ImportFileSubcommand, + ImportCommandHandler) -class ExportCore(commands.ImportSubcommand): +@rattail_typer.command() +@file_importer_command +def corepos_import_square( + ctx: typer.Context, + **kwargs +): + """ + Import transaction data from Square into CORE + """ + config = ctx.parent.rattail_config + progress = ctx.parent.rattail_progress + handler = ImportCommandHandler( + config, import_handler_key='to_corepos_db_office_trans.from_square_csv.import') + kwargs['user'] = typer_get_runas_user(ctx) + handler.run(kwargs, progress=progress) + + +@rattail_typer.command() +@importer_command +def export_corepos( + ctx: typer.Context, + **kwargs +): + """ + Export data from Rattail to CORE-POS + """ + config = ctx.parent.rattail_config + progress = ctx.parent.rattail_progress + handler = ImportCommandHandler( + config, import_handler_key='to_corepos_api.from_rattail.export') + kwargs['user'] = typer_get_runas_user(ctx) + handler.run(kwargs, progress=progress) + + +@rattail_typer.command() +@importer_command +def import_corepos_api( + ctx: typer.Context, + **kwargs +): + """ + Import data from a CORE POS API + """ + config = ctx.parent.rattail_config + progress = ctx.parent.rattail_progress + handler = ImportCommandHandler( + config, import_handler_key='to_rattail.from_corepos_api.import') + kwargs['user'] = typer_get_runas_user(ctx) + handler.run(kwargs, progress=progress) + + +@rattail_typer.command() +@importer_command +def import_corepos_db( + ctx: typer.Context, + corepos_dbtype: Annotated[ + CoreDbType, + typer.Option(help="Type of CORE-POS DB engine to be used as data host. " + "This determines which config section is used with regard " + "to the --corepos-dbkey arg.")] = 'office_op', + corepos_dbkey: Annotated[ + str, + typer.Option(help="Config key for CORE POS database engine to be used as " + "the \"host\", i.e. the source of the data to be imported. " + "This key must be defined in the [rattail_corepos.db] section " + "of your config file.")] = 'default', + **kwargs +): + """ + Import data from a CORE POS database + """ + config = ctx.parent.rattail_config + progress = ctx.parent.rattail_progress + handler = ImportCommandHandler( + config, import_handler_key='to_rattail.from_corepos_db_office_op.import') + kwargs['user'] = typer_get_runas_user(ctx) + kwargs['handler_kwargs'] = { + 'corepos_dbtype': corepos_dbtype, + 'corepos_dbkey': corepos_dbkey, + } + handler.run(kwargs, progress=progress) + + +class ExportCore(ImportSubcommand): """ Export data from Rattail to CORE-POS """ @@ -37,7 +127,7 @@ class ExportCore(commands.ImportSubcommand): handler_key = 'to_corepos_api.from_rattail.export' -class ImportCOREPOSAPI(commands.ImportSubcommand): +class ImportCOREPOSAPI(ImportSubcommand): """ Import data from a CORE POS API """ @@ -46,7 +136,7 @@ class ImportCOREPOSAPI(commands.ImportSubcommand): handler_key = 'to_rattail.from_corepos_api.import' -class ImportCOREPOSDB(commands.ImportSubcommand): +class ImportCOREPOSDB(ImportSubcommand): """ Import data from a CORE POS database """ @@ -76,7 +166,7 @@ class ImportCOREPOSDB(commands.ImportSubcommand): return kwargs -class CoreImportSquare(commands.ImportFromCSV): +class CoreImportSquare(ImportFileSubcommand): """ Import transaction data from Square into CORE """ diff --git a/rattail_corepos/corepos/office/commands.py b/rattail_corepos/corepos/office/commands.py index ead7abd..2d8ef76 100644 --- a/rattail_corepos/corepos/office/commands.py +++ b/rattail_corepos/corepos/office/commands.py @@ -25,13 +25,14 @@ CORE Office commands """ import sys -from enum import Enum import requests from requests.auth import HTTPDigestAuth import typer from typing_extensions import Annotated +from corepos.enum import CoreDbType + from rattail.commands.typer import (make_typer, typer_eager_imports, importer_command, typer_get_runas_user, file_importer_command, file_exporter_command) @@ -41,12 +42,6 @@ from rattail_corepos.config import core_office_url from rattail_corepos.corepos.office.util import get_fannie_config_value, get_blueline_template, make_blueline -class CoreDbType(str, Enum): - office_op = 'office_op' - office_trans = 'office_trans' - office_arch = 'office_arch' - - core_office_typer = make_typer( name='core_office', help="core-office -- command line interface for CORE Office" diff --git a/setup.cfg b/setup.cfg index 1f5779e..8198c32 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,6 +49,9 @@ rattail.subcommands = import-corepos-api = rattail_corepos.commands:ImportCOREPOSAPI import-corepos-db = rattail_corepos.commands:ImportCOREPOSDB +rattail.typer_imports = + rattail_corepos = rattail_corepos.commands + rattail.emails = rattail_corepos = rattail_corepos.emails