From 0386a2766fbbf92a78cb8f373fef5753d02d51a3 Mon Sep 17 00:00:00 2001 From: Peter Lomakin Date: Tue, 22 Oct 2013 19:42:37 +0400 Subject: [PATCH] [pep8][doc] Fixes in pep8 issues and comment in readme --- README.md | 1 + .../lib.linux-x86_64-2.7/joker/__init__.py | 53 ------- .../build/lib.linux-x86_64-2.7/joker/nodes.py | 136 ------------------ joker/dist/joker-0.1-py2.7.egg | Bin 8225 -> 0 bytes joker/joker.egg-info/PKG-INFO | 10 -- joker/joker.egg-info/SOURCES.txt | 8 -- joker/joker.egg-info/dependency_links.txt | 1 - joker/joker.egg-info/not-zip-safe | 1 - joker/joker.egg-info/top_level.txt | 1 - rubick/config_formats/ini.py | 19 ++- rubick/config_formats/test_ini.py | 6 +- rubick/discovery.py | 14 +- rubick/inspections/__init__.py | 3 +- rubick/model.py | 10 +- rubick/resource.py | 6 +- rubick/schema.py | 32 +++-- rubick/test_configuration.py | 3 +- rubick/test_type_validators.py | 9 +- 18 files changed, 71 insertions(+), 242 deletions(-) delete mode 100644 joker/build/lib.linux-x86_64-2.7/joker/__init__.py delete mode 100644 joker/build/lib.linux-x86_64-2.7/joker/nodes.py delete mode 100644 joker/dist/joker-0.1-py2.7.egg delete mode 100644 joker/joker.egg-info/PKG-INFO delete mode 100644 joker/joker.egg-info/SOURCES.txt delete mode 100644 joker/joker.egg-info/dependency_links.txt delete mode 100644 joker/joker.egg-info/not-zip-safe delete mode 100644 joker/joker.egg-info/top_level.txt diff --git a/README.md b/README.md index 8395cd5..ea86442 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Deployment 3. After that you can access application on http://:8000/validation ### Heroku deployment +This steps is already depricated, because of mongo-db usage. 1. $ git clone git@github.com:MirantisLabs/rubick.git 2. $ cd rubick 3. $ heroku git:remote -a diff --git a/joker/build/lib.linux-x86_64-2.7/joker/__init__.py b/joker/build/lib.linux-x86_64-2.7/joker/__init__.py deleted file mode 100644 index 2f2e703..0000000 --- a/joker/build/lib.linux-x86_64-2.7/joker/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -#from nodes import NodesDict -import sys - -# yaml.load(sys.stdin.read()); - -VAGRANT_DEFAULT_KEY = "-----BEGIN RSA PRIVATE KEY----\ -MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI\ -w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP\ -kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2\ -hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO\ -Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW\ -yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd\ -ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1\ -Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf\ -TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK\ -iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A\ -sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf\ -4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP\ -cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk\ -EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN\ -CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX\ -3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG\ -YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj\ -3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+\ -dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz\ -6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC\ -P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF\ -llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ\ -kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH\ -+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ\ -NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=\ ------END RSA PRIVATE KEY-----" - -class Joker(): - - def __init__(self, key = VAGRANT_DEFAULT_KEY, *args, **kwargs): - self.default_key = key - - def addNode(self, name, host, port, user): - return - - def genStub(self, hostname, ip, port, user, key): - return {"name": hostname, "ip": ip, "user": user, - "key": key, "port": 22} - - def discover(self): - return [self.genStub( - "controller", "192.168.28.100", 22, "vagrant", self.default_key), - self.genStub( - "compute1", "192.168.28.101", 22, "vagrant", self.default_key), - self.genStub( - "compute2", "192.168.30.101", 22, "vagrant", self.default_key) - ] diff --git a/joker/build/lib.linux-x86_64-2.7/joker/nodes.py b/joker/build/lib.linux-x86_64-2.7/joker/nodes.py deleted file mode 100644 index 164d8e0..0000000 --- a/joker/build/lib.linux-x86_64-2.7/joker/nodes.py +++ /dev/null @@ -1,136 +0,0 @@ -import collections -import paramiko - - -class TransformedDict(collections.MutableMapping): - - def __init__(self, *args, **kwargs): - self.store = dict() - self.update(dict(*args, **kwargs)) # use the free update to set keys - - def __getitem__(self, key): - return self.store[self.__keytransform__(key)] - - def __setitem__(self, key, value): - self.store[self.__keytransform__(key)] = value - - def __delitem__(self, key): - del self.store[self.__keytransform__(key)] - - def __iter__(self): - return iter(self.store) - - def __len__(self): - return len(self.store) - - def __keytransform__(self, key): - return key - - -class NodesDict(TransformedDict): - - def add(self, element): - return self.__setitem__(element, element) - - def __keytransform__(self, key): - try: - # now uniq for hash is only hwaddr key - # print 'hwaddr = ' + key['hwaddr'] - return key['hwaddr'] - except KeyError: - raise - - -class Node(): - - def __init__(self, name, ip): - - self.ssh = paramiko.SSHClient() - self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - self.setHostName(ip) - self.setName(name) - self.connected = False - - self.neighbours = NodesDict() - - def prepare(self): - self.runCommand( - "[ ! -x arp-scan ] && sudo apt-get --force-yes install arp-scan") - # install arp-scan on node - return True - - def infect(self): - # infect node - return True - - def setName(self, name): - self.name = name - - def setHostName(self, hostname): - self.hostName = hostname - - def setAccessPort(self, port): - self.accessPort = port - - def assignCredential(self, user, password, key): - self.user = user - self.password = password - self.key = key - - def setProxyCommand(self, proxyCommand): - self.proxyCommand = proxyCommand - - def connect(self): - if self.connected is True: - raise assertionError(self.connected is True) - try: - self.ssh.connect(self.hostName, self.accessPort, self.user, - key_filename=self.key) - self.connected = True - return True - except paramiko.BadHostKeyException, e: - print "Host key could not be verified: ", e - return False - except paramiko.AuthenticationException, e: - print "Error unable to authenticate: ", e - return False - except paramiko.SSHException, e: - print e - return False - - def runCommand(self, command): - if (command == ""): - assertionError(command == "") - - if (self.connected is False): - self.connect() - - stdin, stdout, stderr = self.ssh.exec_command(command) - - return (stdout.readlines(), stderr.readlines()) - - def discovery(self): - self.prepare() - - (self.discovery_data, _) = self.runCommand( - "ip link | awk -F: '/^[0-9]+?: / {print $2}' |\ - sudo xargs -I% arp-scan -l -I % 2>&1 | grep -E '^[0-9]+?\.'") - - for node in self.discovery_data: - ( node['ip'], node['hwAddr'] ) = node.split("\t") - - return True - - - # ssh -p2301 -i /home/ryabin/.vagrant.d/insecure_private_key - # vagrant@127.0.0.1 " link | grep -B1 link/ether | awk -F: '/^[0-9]+?: - # / {print \$2}' | sudo xargs -I% arp-scan -l -I % 2>&1 | grep -E - # '^[0-9]+?\.' - -n = Node("controller", "127.0.0.1") -n.assignCredential( - "vagrant", None, "/home/ryabin/.vagrant.d/insecure_private_key") -n.setAccessPort(2301) - -n.discovery() -print n.discovery_data diff --git a/joker/dist/joker-0.1-py2.7.egg b/joker/dist/joker-0.1-py2.7.egg deleted file mode 100644 index 82254f0f0f48dd8a0d2cb6e523e06cbacd712d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8225 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 0 and (value[0] == value[-1] and value[0] in "\"'"): + if len(value) > 0 and (value[0] == value[-1] + and value[0] in "\"'"): quotechar = value[0] value = value[1:-1] diff --git a/rubick/config_formats/test_ini.py b/rubick/config_formats/test_ini.py index b499416..2f7be57 100644 --- a/rubick/config_formats/test_ini.py +++ b/rubick/config_formats/test_ini.py @@ -14,7 +14,8 @@ class IniConfigParserTests(unittest.TestCase): lines = lines[1:-1] first_line = lines[0] margin_size = 0 - while margin_size < len(first_line) and first_line[margin_size].isspace(): + while margin_size < len(first_line) \ + and first_line[margin_size].isspace(): margin_size += 1 stripped_lines = [line[margin_size:] for line in lines] @@ -219,7 +220,8 @@ class IniConfigParserTests(unittest.TestCase): for attr, expected in attribute_values.items(): actual = self._getattr(subject, attr) self.assertEqual( - expected, actual, "%s expected to have %s = %s, but the value was %s" % + expected, actual, + "%s expected to have %s = %s, but the value was %s" % (subject, attr, expected, actual)) def assertParameter(self, name, value, o): diff --git a/rubick/discovery.py b/rubick/discovery.py index e884fdd..1bd7e9d 100644 --- a/rubick/discovery.py +++ b/rubick/discovery.py @@ -188,7 +188,8 @@ class OpenstackDiscovery(object): client.run(['echo', 'test']) except: - self.logger.exception("Can't connect to host %s" % node_info['host']) + self.logger.exception("Can't connect to host %s" + % node_info['host']) openstack.report_issue( Issue( Issue.WARNING, @@ -253,7 +254,9 @@ class OpenstackDiscovery(object): def _find_python_package_version(self, client, package): result = client.run( ['python', '-c', - 'import pkg_resources; version = pkg_resources.get_provider(pkg_resources.Requirement.parse("%s")).version; print(version)' % + 'import pkg_resources; version = pkg_resources' + '.get_provider(pkg_resources.Requirement.parse("%s"))' + '.version; print(version)' % package]) s = result.output.strip() @@ -271,7 +274,8 @@ class OpenstackDiscovery(object): def _get_processes(self, client): return ( [line.split() - for line in client.run(['ps', '-Ao', 'cmd', '--no-headers']).output.split("\n")] + for line in client.run(['ps', '-Ao', 'cmd', + '--no-headers']).output.split("\n")] ) def _collect_host_id(self, client): @@ -571,7 +575,9 @@ class OpenstackDiscovery(object): mysql.config_files = [] config_locations_result = client.run( ['bash', '-c', - 'mysqld --help --verbose | grep "Default options are read from the following files in the given order" -A 1']) + 'mysqld --help --verbose ' + '| grep "Default options are read from the following files in ' + 'the given order" -A 1']) config_locations = config_locations_result.output.strip().split( "\n")[-1].split() for path in config_locations: diff --git a/rubick/inspections/__init__.py b/rubick/inspections/__init__.py index ec22622..d43f900 100644 --- a/rubick/inspections/__init__.py +++ b/rubick/inspections/__init__.py @@ -1,3 +1,4 @@ -from rubick.inspections.keystone_authtoken import KeystoneAuthtokenSettingsInspection +from rubick.inspections.keystone_authtoken \ + import KeystoneAuthtokenSettingsInspection from rubick.inspections.keystone_endpoints import KeystoneEndpointsInspection from rubick.inspections.lettuce_runner import LettuceRunnerInspection diff --git a/rubick/model.py b/rubick/model.py index 0e41ce1..ddb5202 100644 --- a/rubick/model.py +++ b/rubick/model.py @@ -1,5 +1,5 @@ -import logging from itertools import groupby +import logging from rubick.common import Mark, Issue, MarkedIssue from rubick.schema import ConfigSchemaRegistry, TypeValidatorRegistry @@ -243,7 +243,8 @@ class OpenstackComponent(Service): type_validation_result = type_validator.validate( parameter.value.text) if isinstance(type_validation_result, Issue): - type_validation_result.mark = parameter.value.start_mark.merge( + type_validation_result.mark = parameter\ + .value.start_mark.merge( type_validation_result.mark) type_validation_result.message = \ 'Property "%s" in section "%s": %s' % ( @@ -260,7 +261,10 @@ class OpenstackComponent(Service): config.set(parameter_fullname, value) # if value == parameter_schema.default: - # report_issue(MarkedIssue(Issue.INFO, 'Explicit value equals default: section "%s" parameter "%s"' % (section_name, parameter.name.text), parameter.start_mark)) + # report_issue(MarkedIssue(Issue.INFO, + # 'Explicit value equals default: section "%s" + # parameter "%s"' % (section_name, + # parameter.name.text), parameter.start_mark)) if parameter_schema.deprecation_message: report_issue( MarkedIssue( diff --git a/rubick/resource.py b/rubick/resource.py index 2be97ce..8ef05e4 100644 --- a/rubick/resource.py +++ b/rubick/resource.py @@ -113,7 +113,8 @@ class FilesystemSnapshot(object): group=group, permissions=permissions) elif resource_type == 'file': - source_path, local_path, owner, group, permissions = line.split('|')[1:] + source_path, local_path, owner, group, \ + permissions = line.split('|')[1:] self._resources[source_path] = FileResource( os.path.basename(source_path), path=os.path.join(self.basedir, @@ -147,7 +148,8 @@ class ConfigSnapshotResourceLocator(object): else: return ( [HostResource(os.path.basename(host_path), self) - for host_path in glob.glob(os.path.join(self.basedir, '*')) if os.path.isdir(host_path)] + for host_path in glob.glob(os.path.join( + self.basedir, '*')) if os.path.isdir(host_path)] ) if resource_type == Resource.FILE: if not host: diff --git a/rubick/schema.py b/rubick/schema.py index f948874..5c006f5 100644 --- a/rubick/schema.py +++ b/rubick/schema.py @@ -91,7 +91,8 @@ class SchemaBuilder(object): def _ensure_version(self): if not self.current_version: raise Error( - 'Schema version is not specified. Please call version() method first') + 'Schema version is not specified. Please call version() ' + 'method first') class ConfigSchemaRegistry: @@ -118,7 +119,8 @@ class ConfigSchemaRegistry: records = self.__schemas[fullname] i = len(records) - 1 # Find latest checkpoint prior given version - while i >= 0 and not (records[i].operation == 'checkpoint' and records[i].version <= version): + while i >= 0 and not (records[i].operation == 'checkpoint' + and records[i].version <= version): i -= 1 if i < 0: @@ -203,8 +205,14 @@ class ConfigParameterSchema: def __repr__(self): return ( - '' % ' '.join(['%s=%s' % (attr, getattr(self, attr)) - for attr in ['section', 'name', 'type', 'description', 'default', 'required']]) + '' % ' '.join( + ['%s=%s' % (attr, getattr(self, attr)) + for attr in ['section', + 'name', + 'type', + 'description', + 'default', + 'required']]) ) @@ -304,7 +312,8 @@ def validate_ipv4_network(s): if len(parts) != 2: return ( InvalidValueError( - 'Should have "/" character separating address and prefix length') + 'Should have "/" character separating address and prefix ' + 'length') ) address, prefix = parts @@ -339,8 +348,8 @@ def validate_host_label(s): if not s[0].isalpha(): return ( InvalidValueError( - 'Host label should start with a letter, but it starts with "%s"' % - s[0]) + 'Host label should start with a letter, but it starts with ' + '"%s"' % s[0]) ) if len(s) == 1: @@ -349,7 +358,8 @@ def validate_host_label(s): if not (s[-1].isdigit() or s[-1].isalpha()): return ( InvalidValueError( - 'Host label should end with letter or digit, but it ends with "%s"' % + 'Host label should end with letter or digit, but it ends ' + 'with "%s"' % s[-1], Mark('', 0, len(s) - 1)) ) @@ -360,7 +370,8 @@ def validate_host_label(s): if not (c.isalpha() or c.isdigit() or c == '-'): return ( InvalidValueError( - 'Host label should contain only letters, digits or hypens, but it contains "%s"' % + 'Host label should contain only letters, digits or hypens,' + ' but it contains "%s"' % c, Mark('', 0, i + 1)) ) @@ -426,7 +437,8 @@ def validate_string(s): @type_validator('integer') def validate_integer(s, min=None, max=None): leading_whitespace_len = 0 - while leading_whitespace_len < len(s) and s[leading_whitespace_len].isspace(): + while leading_whitespace_len < len(s) \ + and s[leading_whitespace_len].isspace(): leading_whitespace_len += 1 s = s.strip() diff --git a/rubick/test_configuration.py b/rubick/test_configuration.py index cc3eb1d..0bd90f7 100644 --- a/rubick/test_configuration.py +++ b/rubick/test_configuration.py @@ -124,7 +124,8 @@ class ConfigurationTests(unittest.TestCase): c.set_default('%s.param2' % self.section, 'value2') self.assertEqual( - [('param1', 'value1'), ('param2', 'value2')], sorted(c.section(self.section).items())) + [('param1', 'value1'), ('param2', 'value2')], + sorted(c.section(self.section).items())) def test_subsection_get(self): c = Configuration() diff --git a/rubick/test_type_validators.py b/rubick/test_type_validators.py index fd0bb8b..3b3203b 100644 --- a/rubick/test_type_validators.py +++ b/rubick/test_type_validators.py @@ -83,7 +83,8 @@ class IntegerTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): self.assertEqual(123, v) -class HostAddressTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): +class HostAddressTypeValidatorTests(TypeValidatorTestHelper, + unittest.TestCase): type_name = 'host_address' def test_ipv4_address(self): @@ -135,7 +136,8 @@ class HostAddressTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): self.assertEqual(8, e.mark.column) -class NetworkAddressTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): +class NetworkAddressTypeValidatorTests(TypeValidatorTestHelper, + unittest.TestCase): type_name = 'network_address' def test_ipv4_network(self): @@ -200,7 +202,8 @@ class PortTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): self.assertEqual(123, v) -class HostAndPortTypeValidatorTests(TypeValidatorTestHelper, unittest.TestCase): +class HostAndPortTypeValidatorTests(TypeValidatorTestHelper, + unittest.TestCase): type_name = 'host_and_port' def test_ipv4_address(self):