From bbc1c8b3bf2b8d03f771e35f432d51a458e9f2e6 Mon Sep 17 00:00:00 2001 From: gandalf3 Date: Thu, 6 Jul 2017 22:58:17 -0700 Subject: [PATCH] Rename "blenderpack" module to "bpackage" Also split code into files by class --- blenderpack/__init__.py | 0 bpackage/__init__.py | 3 + bpackage/exceptions.py | 14 ++++ bpackage/package.py | 39 +++++++++++ .../blenderpack.py => bpackage/repository.py | 66 ++----------------- tests/test_repo_io.py | 2 +- 6 files changed, 62 insertions(+), 62 deletions(-) delete mode 100644 blenderpack/__init__.py create mode 100644 bpackage/__init__.py create mode 100644 bpackage/exceptions.py create mode 100644 bpackage/package.py rename blenderpack/blenderpack.py => bpackage/repository.py (69%) mode change 100755 => 100644 diff --git a/blenderpack/__init__.py b/blenderpack/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/bpackage/__init__.py b/bpackage/__init__.py new file mode 100644 index 0000000..4e67d97 --- /dev/null +++ b/bpackage/__init__.py @@ -0,0 +1,3 @@ +import bpackage.exceptions +from .package import Package +from .repository import Repository diff --git a/bpackage/exceptions.py b/bpackage/exceptions.py new file mode 100644 index 0000000..e677624 --- /dev/null +++ b/bpackage/exceptions.py @@ -0,0 +1,14 @@ +class BadAddon(Exception): + """ + Raised when something expected to be an addon turns out not to be one after all + """ + +class RepositoryListError(ValueError): + """ + Raised when something is amiss with the repo.json file + """ + +class RepositoryNotFoundError(RepositoryListError): + """ + Raised when looking for a repository which isn't there + """ diff --git a/bpackage/package.py b/bpackage/package.py new file mode 100644 index 0000000..da0db4e --- /dev/null +++ b/bpackage/package.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +# HACK: seems 'requests' module bundled with blender isn't bundled with 'idna' module. So force system python for now +# import sys +# sys.path.insert(0, '/usr/lib/python3.6/site-packages') + +import logging + +log = logging.getLogger(__name__) + + +class Package: + """ + Stores package methods and metadata + """ + + def __init__(self, package_dict:dict = None): + self.from_dict(package_dict) + + def to_dict(self) -> dict: + """ + Return a dict representation of the package + """ + return { + 'bl_info': self.bl_info, + 'url': self.url, + } + + def from_dict(self, package_dict: dict): + """ + Get attributes from a dict such as produced by `to_dict` + """ + if package_dict is None: + package_dict = {} + + for attr in ('name', 'url', 'bl_info'): + setattr(self, attr, package_dict.get(attr)) + + diff --git a/blenderpack/blenderpack.py b/bpackage/repository.py old mode 100755 new mode 100644 similarity index 69% rename from blenderpack/blenderpack.py rename to bpackage/repository.py index c7cc4d2..e03f025 --- a/blenderpack/blenderpack.py +++ b/bpackage/repository.py @@ -1,38 +1,16 @@ #!/usr/bin/env python3 # HACK: seems 'requests' module bundled with blender isn't bundled with 'idna' module. So force system python for now -import sys -sys.path.insert(0, '/usr/lib/python3.6/site-packages') +# import sys +# sys.path.insert(0, '/usr/lib/python3.6/site-packages') +from pathlib import Path import requests import json -import os -import pathlib -import ast -import argparse -import zipfile import logging -from collections import MutableMapping log = logging.getLogger(__name__) -REQUIRED_KEYS = set(['name', 'blender', 'version']) -SCHEMA_VERSION = 1 - -class BadAddon(Exception): - """ - Raised when something expected to be an addon turns out not to be - """ - -class RepositoryListError(ValueError): - """ - Raised when something is amiss with the repo.json file - """ - -class RepositoryNotFoundError(RepositoryListError): - """ - Raised when looking for a repository which isn't there - """ class Package: """ @@ -119,7 +97,7 @@ class Repository: setattr(self, attr, value) - def dump(self, path: pathlib.Path): + def dump(self, path: Path): """ Dump repository as a repo.json file in 'path' """ @@ -133,7 +111,7 @@ def refresh(url): # otherwise no exception will be generated when the other process closes its end. pipe[0].close() - local_repo_path = pathlib.Path(__file__).parent / 'packages' + local_repo_path = Path(__file__).parent / 'packages' local_repo_path.mkdir(exist_ok=True) try: @@ -143,37 +121,3 @@ def refresh(url): pipe[1].close() -# class Package: -# def __init__(self): -# self.bl_info = None -# self.url = None -# self.type = None -# -# class Repository: -# def __init__(self, name): -# self.name = name -# self.packages = None -# -# def json(self): -# return json.dumps(self.__dict__) - - - -def main(): - pass - # print(args) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Search, install, and manage packages for Blender') - subparsers = parser.add_subparsers() - - make = subparsers.add_parser('make') - make.add_argument('path') - make.set_defaults(func=lambda args: make_repo(pathlib.Path(args.path))) - - args = parser.parse_args() - args.func(args) - - main() - diff --git a/tests/test_repo_io.py b/tests/test_repo_io.py index 9356030..5035c2b 100755 --- a/tests/test_repo_io.py +++ b/tests/test_repo_io.py @@ -4,7 +4,7 @@ import unittest from pathlib import Path import logging import json -import blenderpack as BP +import bpackage as BP logging.basicConfig(level=logging.DEBUG, format='%(levelname)8s: %(message)s')