From e8ef1e0b117d9e9693fc85b06168adea74758c06 Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 26 Jul 2020 01:59:59 +0100 Subject: [PATCH] Uhm. Pulling names now. --- MikesServoMapper.py | 72 +++++++++++++++++++++++++++++++++++++++++++++ Pipfile | 1 + Pipfile.lock | 45 ++++++++++++++++++++++++++++ README.md | 28 ++++++++++++++++++ configs/.gitignore | 5 ++++ main.py | 41 ++++++++++++++++++++++++++ 6 files changed, 192 insertions(+) create mode 100644 MikesServoMapper.py create mode 100644 Pipfile.lock create mode 100644 README.md create mode 100644 configs/.gitignore create mode 100644 main.py diff --git a/MikesServoMapper.py b/MikesServoMapper.py new file mode 100644 index 0000000..23480cf --- /dev/null +++ b/MikesServoMapper.py @@ -0,0 +1,72 @@ + + +import logging +import pprint +import sys +import yaml + + +class MikesServoMapper: + + def __init__(self, config_file: str, names): + + # noinspection PyTypeChecker + self.__logger: logging.Logger = None + self.__logger_formatter = None + self.init_logging() + + self.__names = list(names) + self.__names.sort() + + self.__config = None + self.load_config(config_file) + self.pull_config_names() + + self.__logger.info("Names: %s" % (pprint.pformat(self.__names))) + + def init_logging(self): + + self.__logger = logging.Logger("Mikes Servo Mapper") + self.__logger_formatter = logging.Formatter(fmt="Hi poop") + + stream_handler = logging.StreamHandler(sys.stdout) + + self.__logger.addHandler(stream_handler) + + self.__logger.info("Logging initialized") + + def load_config(self, config_file): + + if config_file is None: + return + + with open(config_file) as f: + + config = yaml.safe_load(f) + + self.__logger.info("Loaded config: %s" % (pprint.pformat(config),)) + + self.__config = config + + def pull_config_names(self): + + if self.__config is None: + self.__logger.info("No config specified; Won't pull names") + return + self.__logger.info("Pulling names from config") + + if "names" not in self.__config: + self.__logger.warning("Key \"names\" is not in config; Cannot pull names") + return + + config_names = self.__config["names"] + if not isinstance(config_names, list): + self.__logger.warning("Config had key \"names\" but it wasn't a list; Won't pull names") + return + + self.__logger.info("Names before pulling from config: %s" % (self.__names,)) + for name in config_names: + self.__names.append(name) + self.__names.sort() + self.__logger.info("Names after pulling from config: %s" % (self.__names,)) + diff --git a/Pipfile b/Pipfile index 219b717..d45bb49 100644 --- a/Pipfile +++ b/Pipfile @@ -4,6 +4,7 @@ verify_ssl = true name = "pypi" [packages] +pyaml = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..e08355f --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,45 @@ +{ + "_meta": { + "hash": { + "sha256": "1f84f63565324f6ff4b4071af61c776885d170eed424917d7adb74b2b97517e3" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "pyaml": { + "hashes": [ + "sha256:29a5c2a68660a799103d6949167bd6c7953d031449d08802386372de1db6ad71", + "sha256:67081749a82b72c45e5f7f812ee3a14a03b3f5c25ff36ec3b290514f8c4c4b99" + ], + "index": "pypi", + "version": "==20.4.0" + }, + "pyyaml": { + "hashes": [ + "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", + "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", + "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", + "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", + "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", + "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", + "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", + "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", + "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" + ], + "version": "==5.3.1" + } + }, + "develop": {} +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..27bbf15 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ + +# Mike's Servo Mapper + +A simple command line utility to map servos to + +Written and tested using the Adafruit I2C servo driver board: [PCA9685](https://www.adafruit.com/product/815) + +## Requiremments + +* ```pipenv``` + +## Installation + +cd to this repo's directory and install pip dependencies with: + +```pipenv install``` + +## Execution + +cd to this repo's directory and execute using: + +```pipenv run python3 main.py``` + +## Command Line Arguments + +TODO + + diff --git a/configs/.gitignore b/configs/.gitignore new file mode 100644 index 0000000..4464ec3 --- /dev/null +++ b/configs/.gitignore @@ -0,0 +1,5 @@ + +# Ignore any configs placed here +*.yaml + + diff --git a/main.py b/main.py new file mode 100644 index 0000000..e8f8e2b --- /dev/null +++ b/main.py @@ -0,0 +1,41 @@ + + +from MikesServoMapper import MikesServoMapper + + +import argparse + + +def main(): + + parser = argparse.ArgumentParser( + prog="Mike's Servo Mapper (for adafruit driver board)" + ) + parser.add_argument( + "--config", "--config-file", + help="Path to a yaml file describing some configuration stuffs", + required=False, + default=None, + dest="config_file" + ) + parser.add_argument( + "--name", + help="Specify a target name (can be used multiple times)", + required=False, + default=[], + action="append", + dest="names" + ) + + args = parser.parse_args() + + mapper = MikesServoMapper( + config_file=args.config_file, + names=args.names + ) + mapper.run() + + +if __name__ == "__main__": + main() +