From e0b8172591e2a7a47745185ced6ff891ae4125b0 Mon Sep 17 00:00:00 2001 From: Joachim Lusiardi Date: Wed, 23 Jan 2019 00:08:37 +0100 Subject: [PATCH] add first draft for a fix of #85 --- homekit/controller.py | 7 +++--- homekit/init_controller_storage.py | 38 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100755 homekit/init_controller_storage.py diff --git a/homekit/controller.py b/homekit/controller.py index f2aea00a..2f71313c 100644 --- a/homekit/controller.py +++ b/homekit/controller.py @@ -133,11 +133,12 @@ def load_data(self, filename): for pairing_id in data: self.pairings[pairing_id] = Pairing(data[pairing_id]) except PermissionError as e: - raise ConfigLoadingError('Could not open "{f}" due to missing permissions'.format(f=filename)) + raise ConfigLoadingError('Could not open "{f}" due to missing permissions.'.format(f=filename)) except JSONDecodeError as e: - raise ConfigLoadingError('Cannot parse "{f}" as JSON file'.format(f=filename)) + raise ConfigLoadingError('Cannot parse "{f}" as JSON file.'.format(f=filename)) except FileNotFoundError as e: - raise ConfigLoadingError('Could not open "{f}" because it does not exist'.format(f=filename)) + raise ConfigLoadingError('Could not open "{f}" because it does not exist. Use "python3 -m' + ' homekit.init_controller_storage -f {f}" to initialize it.'.format(f=filename)) def save_data(self, filename): """ diff --git a/homekit/init_controller_storage.py b/homekit/init_controller_storage.py new file mode 100755 index 00000000..c36cae72 --- /dev/null +++ b/homekit/init_controller_storage.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +# +# Copyright 2018 Joachim Lusiardi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import argparse +import os + + +def setup_args_parser(): + parser = argparse.ArgumentParser(description='HomeKit initialize storage') + parser.add_argument('-f', action='store', required=True, dest='file', help='HomeKit pairing data file') + return parser.parse_args() + + +if __name__ == '__main__': + args = setup_args_parser() + if not os.path.isfile(args.file): + try: + with open(args.file, 'w') as fp: + fp.write('{}') + except PermissionError: + print('Permission denied to create file "{f}".'.format(f=args.file)) + else: + print('File "{f}" already exists.'.format(f=args.file))