From e23e30ea41726f334ee46ee6698ef75e7bf1d001 Mon Sep 17 00:00:00 2001 From: WuKong Date: Fri, 17 Jul 2015 15:27:50 +0200 Subject: [PATCH] review backends Change-Id: Ic82081a421e672a3fff0559f5fbd82736316803e Signed-off-by: WuKong --- .../extensions/moon/ExceptionHierarchy-v0.2.pptx | Bin 0 -> 35111 bytes keystone-moon/keystone/contrib/moon/algorithms.py | 12 +- .../keystone/contrib/moon/backends/sql.py | 1152 ++++++++++---------- keystone-moon/keystone/contrib/moon/core.py | 42 +- .../moon/unit/test_unit_core_configuration.py | 57 + .../tests/moon/unit/test_unit_core_tenant.py | 42 +- 6 files changed, 701 insertions(+), 604 deletions(-) create mode 100644 keystone-moon/doc/source/extensions/moon/ExceptionHierarchy-v0.2.pptx create mode 100644 keystone-moon/keystone/tests/moon/unit/test_unit_core_configuration.py diff --git a/keystone-moon/doc/source/extensions/moon/ExceptionHierarchy-v0.2.pptx b/keystone-moon/doc/source/extensions/moon/ExceptionHierarchy-v0.2.pptx new file mode 100644 index 0000000000000000000000000000000000000000..f6541354975bae4070b8726525cd1d6d9ca98392 GIT binary patch literal 35111 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