da53f143ee
below issures are removed from ignore cases: E114 indentation is not a multiple of four (comment) E116 unexpected indentation (comment) E121 continuation line under-indented for hanging indent E122 continuation line missing indentation or outdented E123 closing bracket does not match indentation of opening bracket's line E124 closing bracket does not match visual indentation E125 continuation line with same indent as next logical line E126 continuation line over-indented for hanging indent E127 continuation line over-indented for visual indent E128 continuation line under-indented for visual indent E129 visually indented line with same indent as next logical line E131 continuation line unaligned for hanging indent E201 whitespace after '(' E228 missing whitespace around modulo operator E231 missing whitespace after ',' E241 multiple spaces after ':' E251 unexpected spaces around keyword / parameter equals E265 block comment should start with '#' E271 multiple spaces after keyword E302 expected 2 blank lines, found 1 E303 too many blank lines E305 expected 2 blank lines after class or function definition, found 1 E704 multiple statements on one line (def) E713 test for membership should be 'not in' E714 test for object identity should be 'is not' E722 do not use bare except' E731 do not assign a lambda expression, use a def E999 SyntaxError: invalid syntax (this is likely python3) F401 <foo> imported but unused F841 local variable 'foo' is assigned to but never used H201: no 'except:' H233: Python 3.x incompatible use of print operator B001 Do not use bare `except:` B004 Using `hasattr(x, '__call__')` to test if `x` is callable is unreliable. B305 `.next()` is not a thing on Python 3. Use the `next()` builtin. B306 `BaseException.message` has been deprecated as of Python 2.6 and is removed in Python 3. B007 Loop control variable 'key' not used within the loop body. remain below issues in ignores: E402 module level import not at top of file ./service-mgmt-api/sm-api/sm_api/cmd/__init__.py:25 Hxxx since which are related with document format F811 redefinition of unused '<foo>' from line <x> ./service-mgmt-tools/sm-tools/sm_tools/sm_configure.py:18 F821 undefined name 'e' ./service-mgmt-api/sm-api/sm_api/common/utils.py:448 B006 Do not use mutable data structures for argument defaults. ./service-mgmt-api/sm-api/sm_api/common/service.py:59 B008 Do not perform calls in argument defaults. ./service-mgmt-api/sm-api/sm_api/openstack/common/timeutils.py:117 Test have been done:Build,Deploy,some smc command,such as smc service-list, smc service-show, sm-dump, etc Story: 2003430 Task: 26524 Change-Id: I3e2a4a31f87e3ff66cfce86f54285e830ee1c3dc Signed-off-by: Sun Austin <austin.sun@intel.com>
132 lines
3.4 KiB
Python
132 lines
3.4 KiB
Python
# Copyright 2013 IBM Corp.
|
|
#
|
|
# 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.
|
|
#
|
|
# Copyright (c) 2013-2014 Wind River Systems, Inc.
|
|
#
|
|
|
|
|
|
"""Utility methods for objects"""
|
|
|
|
import ast
|
|
import datetime
|
|
import iso8601
|
|
import netaddr
|
|
import six
|
|
|
|
from sm_api.openstack.common import timeutils
|
|
|
|
|
|
def datetime_or_none(dt):
|
|
"""Validate a datetime or None value."""
|
|
if dt is None:
|
|
return None
|
|
elif isinstance(dt, datetime.datetime):
|
|
if dt.utcoffset() is None:
|
|
# NOTE(danms): Legacy objects from sqlalchemy are stored in UTC,
|
|
# but are returned without a timezone attached.
|
|
# As a transitional aid, assume a tz-naive object is in UTC.
|
|
return dt.replace(tzinfo=iso8601.iso8601.Utc())
|
|
else:
|
|
return dt
|
|
raise ValueError('A datetime.datetime is required here')
|
|
|
|
|
|
def datetime_or_str_or_none(val):
|
|
if isinstance(val, six.string_types):
|
|
return timeutils.parse_isotime(val)
|
|
return datetime_or_none(val)
|
|
|
|
|
|
def int_or_none(val):
|
|
"""Attempt to parse an integer value, or None."""
|
|
if val is None:
|
|
return val
|
|
else:
|
|
return int(val)
|
|
|
|
|
|
def int_or_zero(val):
|
|
"""Attempt to parse an integer value, if None return zero."""
|
|
if val is None:
|
|
return int(0)
|
|
else:
|
|
return int(val)
|
|
|
|
|
|
def str_or_none(val):
|
|
"""Attempt to stringify a value, or None."""
|
|
if val is None:
|
|
return val
|
|
else:
|
|
return str(val)
|
|
|
|
|
|
def dict_or_none(val):
|
|
"""Attempt to dictify a value, or None."""
|
|
if val is None:
|
|
return {}
|
|
elif isinstance(val, str):
|
|
return dict(ast.literal_eval(val))
|
|
else:
|
|
try:
|
|
return dict(val)
|
|
except ValueError:
|
|
return {}
|
|
|
|
|
|
def ip_or_none(version):
|
|
"""Return a version-specific IP address validator."""
|
|
def validator(val, version=version):
|
|
if val is None:
|
|
return val
|
|
else:
|
|
return netaddr.IPAddress(val, version=version)
|
|
return validator
|
|
|
|
|
|
def nested_object_or_none(objclass):
|
|
def validator(val, objclass=objclass):
|
|
if val is None or isinstance(val, objclass):
|
|
return val
|
|
raise ValueError('An object of class %s is required here' % objclass)
|
|
return validator
|
|
|
|
|
|
def dt_serializer(name):
|
|
"""Return a datetime serializer for a named attribute."""
|
|
|
|
def serializer(self, name=name):
|
|
if getattr(self, name) is not None:
|
|
return timeutils.isotime(getattr(self, name))
|
|
else:
|
|
return None
|
|
return serializer
|
|
|
|
|
|
def dt_deserializer(instance, val):
|
|
"""A deserializer method for datetime attributes."""
|
|
if val is None:
|
|
return None
|
|
else:
|
|
return timeutils.parse_isotime(val)
|
|
|
|
|
|
def obj_serializer(name):
|
|
def serializer(self, name=name):
|
|
if getattr(self, name) is not None:
|
|
return getattr(self, name).obj_to_primitive()
|
|
else:
|
|
return None
|
|
return serializer
|