55 lines
2.3 KiB
Python
55 lines
2.3 KiB
Python
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
|
|
import json
|
|
from typing import List
|
|
from api import MAPPING, EndPointNotAvailableException, Option, OptionType, Server, get_logger, get_api_config
|
|
|
|
|
|
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
|
parser.add_argument("--verbose", "-v", action="count", default=0)
|
|
parser.add_argument("--config", "-c", default="kontor-api")
|
|
parser.add_argument("--dry-run", "-m", action="store_true")
|
|
parser.add_argument("--server", "-s")
|
|
parser.add_argument("--cleanup", "-d", action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
|
|
if __name__== "__main__":
|
|
logger = get_logger(args.verbose, "kontor")
|
|
logger.info("kontor.sync started")
|
|
apiConfig = get_api_config(logger, args.config)
|
|
server_list: List[Server] = []
|
|
if args.server:
|
|
server = apiConfig.get_server(args.server)
|
|
if server:
|
|
server_list.append(server)
|
|
else:
|
|
server_list.extend(apiConfig.server)
|
|
export_data = {}
|
|
for server in server_list:
|
|
export_data[server.name] = {}
|
|
for table, path in MAPPING.items():
|
|
try:
|
|
data = server.request(logger, table=table)
|
|
logger.info("%s: %s", table, len(data))
|
|
export_data[server.name][table] = data
|
|
logger.info("%s: %s exported", table, len(data))
|
|
except EndPointNotAvailableException:
|
|
logger.info("Endpoint not implemented")
|
|
try:
|
|
json_dump = json.dumps(export_data[server.name], indent=4)
|
|
file_name = f"{server.name}-data.json"
|
|
with open(file_name, "w") as dump_file:
|
|
dump_file.write(json_dump)
|
|
except TypeError as error:
|
|
logger.info(f"{error}")
|
|
for server in server_list:
|
|
logger.info(f"{server.name}: {len(export_data[server.name])} tables exported")
|
|
for table, path in MAPPING.items():
|
|
for item in export_data[server_list[0].name][table]:
|
|
item_data = server_list[1].request(logger, table=table, param=Option(OptionType.ID, item['id']))
|
|
if item != item_data:
|
|
logger.info("diff: %s\n%s", item, item_data)
|
|
else:
|
|
logger.info("no changes for: %s", item)
|
|
logger.info("kontor.sync finished")
|