Best Python code snippet using localstack_python
config.py
Source:config.py
...177 else:178 setter(value)179 self.set_options.append(option_name)180 @classmethod181 def _parse_list(cls, value, separator=','):182 """Represents value as a list.183 Value is split either by separator (defaults to comma) or by lines.184 :param value:185 :param separator: List items separator character.186 :rtype: list187 """188 if isinstance(value, list): # _get_parser_compound case189 return value190 if '\n' in value:191 value = value.splitlines()192 else:193 value = value.split(separator)194 return [chunk.strip() for chunk in value if chunk.strip()]195 @classmethod196 def _parse_dict(cls, value):197 """Represents value as a dict.198 :param value:199 :rtype: dict200 """201 separator = '='202 result = {}203 for line in cls._parse_list(value):204 key, sep, val = line.partition(separator)205 if sep != separator:206 raise DistutilsOptionError(207 'Unable to parse option value to dict: %s' % value)208 result[key.strip()] = val.strip()209 return result210 @classmethod211 def _parse_bool(cls, value):212 """Represents value as boolean.213 :param value:214 :rtype: bool215 """216 value = value.lower()217 return value in ('1', 'true', 'yes')218 @classmethod219 def _exclude_files_parser(cls, key):220 """Returns a parser function to make sure field inputs221 are not files.222 Parses a value after getting the key so error messages are223 more informative.224 :param key:225 :rtype: callable226 """227 def parser(value):228 exclude_directive = 'file:'229 if value.startswith(exclude_directive):230 raise ValueError(231 'Only strings are accepted for the {0} field, '232 'files are not accepted'.format(key))233 return value234 return parser235 @classmethod236 def _parse_file(cls, value):237 """Represents value as a string, allowing including text238 from nearest files using `file:` directive.239 Directive is sandboxed and won't reach anything outside240 directory with setup.py.241 Examples:242 file: README.rst, CHANGELOG.md, src/file.txt243 :param str value:244 :rtype: str245 """246 include_directive = 'file:'247 if not isinstance(value, str):248 return value249 if not value.startswith(include_directive):250 return value251 spec = value[len(include_directive):]252 filepaths = (os.path.abspath(path.strip()) for path in spec.split(','))253 return '\n'.join(254 cls._read_file(path)255 for path in filepaths256 if (cls._assert_local(path) or True)257 and os.path.isfile(path)258 )259 @staticmethod260 def _assert_local(filepath):261 if not filepath.startswith(os.getcwd()):262 raise DistutilsOptionError(263 '`file:` directive can not access %s' % filepath)264 @staticmethod265 def _read_file(filepath):266 with io.open(filepath, encoding='utf-8') as f:267 return f.read()268 @classmethod269 def _parse_attr(cls, value, package_dir=None):270 """Represents value as a module attribute.271 Examples:272 attr: package.attr273 attr: package.module.attr274 :param str value:275 :rtype: str276 """277 attr_directive = 'attr:'278 if not value.startswith(attr_directive):279 return value280 attrs_path = value.replace(attr_directive, '').strip().split('.')281 attr_name = attrs_path.pop()282 module_name = '.'.join(attrs_path)283 module_name = module_name or '__init__'284 parent_path = os.getcwd()285 if package_dir:286 if attrs_path[0] in package_dir:287 # A custom path was specified for the module we want to import288 custom_path = package_dir[attrs_path[0]]289 parts = custom_path.rsplit('/', 1)290 if len(parts) > 1:291 parent_path = os.path.join(os.getcwd(), parts[0])292 module_name = parts[1]293 else:294 module_name = custom_path295 elif '' in package_dir:296 # A custom parent directory was specified for all root modules297 parent_path = os.path.join(os.getcwd(), package_dir[''])298 with patch_path(parent_path):299 try:300 # attempt to load value statically301 return getattr(StaticModule(module_name), attr_name)302 except Exception:303 # fallback to simple import304 module = importlib.import_module(module_name)305 return getattr(module, attr_name)306 @classmethod307 def _get_parser_compound(cls, *parse_methods):308 """Returns parser function to represents value as a list.309 Parses a value applying given methods one after another.310 :param parse_methods:311 :rtype: callable312 """313 def parse(value):314 parsed = value315 for method in parse_methods:316 parsed = method(parsed)317 return parsed318 return parse319 @classmethod320 def _parse_section_to_dict(cls, section_options, values_parser=None):321 """Parses section options into a dictionary.322 Optionally applies a given parser to values.323 :param dict section_options:324 :param callable values_parser:325 :rtype: dict326 """327 value = {}328 values_parser = values_parser or (lambda val: val)329 for key, (_, val) in section_options.items():330 value[key] = values_parser(val)331 return value332 def parse_section(self, section_options):333 """Parses configuration file section.334 :param dict section_options:335 """336 for (name, (_, value)) in section_options.items():337 try:338 self[name] = value339 except KeyError:340 pass # Keep silent for a new option may appear anytime.341 def parse(self):342 """Parses configuration file items from one343 or more related sections.344 """345 for section_name, section_options in self.sections.items():346 method_postfix = ''347 if section_name: # [section.option] variant348 method_postfix = '_%s' % section_name349 section_parser_method = getattr(350 self,351 # Dots in section names are translated into dunderscores.352 ('parse_section%s' % method_postfix).replace('.', '__'),353 None)354 if section_parser_method is None:355 raise DistutilsOptionError(356 'Unsupported distribution option section: [%s.%s]' % (357 self.section_prefix, section_name))358 section_parser_method(section_options)359 def _deprecated_config_handler(self, func, msg, warning_class):360 """ this function will wrap around parameters that are deprecated361 :param msg: deprecation message362 :param warning_class: class of warning exception to be raised363 :param func: function to be wrapped around364 """365 @wraps(func)366 def config_handler(*args, **kwargs):367 warnings.warn(msg, warning_class)368 return func(*args, **kwargs)369 return config_handler370class ConfigMetadataHandler(ConfigHandler):371 section_prefix = 'metadata'372 aliases = {373 'home_page': 'url',374 'summary': 'description',375 'classifier': 'classifiers',376 'platform': 'platforms',377 }378 strict_mode = False379 """We need to keep it loose, to be partially compatible with380 `pbr` and `d2to1` packages which also uses `metadata` section.381 """382 def __init__(self, target_obj, options, ignore_option_errors=False,383 package_dir=None):384 super(ConfigMetadataHandler, self).__init__(target_obj, options,385 ignore_option_errors)386 self.package_dir = package_dir387 @property388 def parsers(self):389 """Metadata item name to parser function mapping."""390 parse_list = self._parse_list391 parse_file = self._parse_file392 parse_dict = self._parse_dict393 exclude_files_parser = self._exclude_files_parser394 return {395 'platforms': parse_list,396 'keywords': parse_list,397 'provides': parse_list,398 'requires': self._deprecated_config_handler(399 parse_list,400 "The requires parameter is deprecated, please use "401 "install_requires for runtime dependencies.",402 DeprecationWarning),403 'obsoletes': parse_list,404 'classifiers': self._get_parser_compound(parse_file, parse_list),405 'license': exclude_files_parser('license'),406 'license_files': parse_list,407 'description': parse_file,408 'long_description': parse_file,409 'version': self._parse_version,410 'project_urls': parse_dict,411 }412 def _parse_version(self, value):413 """Parses `version` option value.414 :param value:415 :rtype: str416 """417 version = self._parse_file(value)418 if version != value:419 version = version.strip()420 # Be strict about versions loaded from file because it's easy to421 # accidentally include newlines and other unintended content422 if isinstance(parse(version), LegacyVersion):423 tmpl = (424 'Version loaded from {value} does not '425 'comply with PEP 440: {version}'426 )427 raise DistutilsOptionError(tmpl.format(**locals()))428 return version429 version = self._parse_attr(value, self.package_dir)430 if callable(version):431 version = version()432 if not isinstance(version, str):433 if hasattr(version, '__iter__'):434 version = '.'.join(map(str, version))435 else:436 version = '%s' % version437 return version438class ConfigOptionsHandler(ConfigHandler):439 section_prefix = 'options'440 @property441 def parsers(self):442 """Metadata item name to parser function mapping."""443 parse_list = self._parse_list444 parse_list_semicolon = partial(self._parse_list, separator=';')445 parse_bool = self._parse_bool446 parse_dict = self._parse_dict447 parse_cmdclass = self._parse_cmdclass448 return {449 'zip_safe': parse_bool,450 'use_2to3': parse_bool,451 'include_package_data': parse_bool,452 'package_dir': parse_dict,453 'use_2to3_fixers': parse_list,454 'use_2to3_exclude_fixers': parse_list,455 'convert_2to3_doctests': parse_list,456 'scripts': parse_list,457 'eager_resources': parse_list,458 'dependency_links': parse_list,459 'namespace_packages': parse_list,460 'install_requires': parse_list_semicolon,461 'setup_requires': parse_list_semicolon,462 'tests_require': parse_list_semicolon,463 'packages': self._parse_packages,464 'entry_points': self._parse_file,465 'py_modules': parse_list,466 'python_requires': SpecifierSet,467 'cmdclass': parse_cmdclass,468 }469 def _parse_cmdclass(self, value):470 def resolve_class(qualified_class_name):471 idx = qualified_class_name.rfind('.')472 class_name = qualified_class_name[idx+1:]473 pkg_name = qualified_class_name[:idx]474 module = __import__(pkg_name)475 return getattr(module, class_name)476 return {477 k: resolve_class(v)478 for k, v in self._parse_dict(value).items()479 }480 def _parse_packages(self, value):481 """Parses `packages` option value.482 :param value:483 :rtype: list484 """485 find_directives = ['find:', 'find_namespace:']486 trimmed_value = value.strip()487 if trimmed_value not in find_directives:488 return self._parse_list(value)489 findns = trimmed_value == find_directives[1]490 # Read function arguments from a dedicated section.491 find_kwargs = self.parse_section_packages__find(492 self.sections.get('packages.find', {}))493 if findns:494 from setuptools import find_namespace_packages as find_packages495 else:496 from setuptools import find_packages497 return find_packages(**find_kwargs)498 def parse_section_packages__find(self, section_options):499 """Parses `packages.find` configuration file section.500 To be used in conjunction with _parse_packages().501 :param dict section_options:502 """...
parse.py
Source:parse.py
...46 def _parse_none(self, obj, depth=0):47 """ Always return None; Handy for eliminating objects we don't want48 results for. """49 return None50 def _parse_list(self, obj, depth=0):51 """ Recursivly parses lists, then returns the parsed de-duped results. """52 ret = []53 for item in obj:54 ret.append(self._parser(item, depth=depth))55 try:56 return list(set(ret))57 except TypeError:58 return ret59 def _parse_simple(self, obj, depth=0):60 """ Return the object sent to us, no further parsing needed """61 return obj62 def _parse_name(self, obj, depth=0):63 """ returns the object as a string. Often a simple way to convert to64 human readable form """...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!