Skip to content

Commit

Permalink
ydkgen: run autopep8 on all ydkgen py files
Browse files Browse the repository at this point in the history
  • Loading branch information
shmuelhazan committed Mar 16, 2021
1 parent 5863206 commit e5c17c1
Show file tree
Hide file tree
Showing 53 changed files with 781 additions and 420 deletions.
100 changes: 65 additions & 35 deletions ydkgen/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@
import glob
import json
import logging
import os, sys, shutil
import os
import sys
import shutil
import tarfile
import tempfile
import re

from .common import YdkGenException, iscppkeyword, ispythonkeyword, isgokeyword
from ydkgen.builder import (ApiModelBuilder, PyangModelBuilder, SubModuleBuilder)
from ydkgen.builder import (
ApiModelBuilder, PyangModelBuilder, SubModuleBuilder)
from .resolver import bundle_resolver, bundle_translator
from ydkgen.printer import printer_factory

Expand Down Expand Up @@ -96,7 +99,8 @@ def generate(self, description_file):
elif self.package_type == 'core':
return self._generate_core()
else:
raise YdkGenException('Invalid package type specified: %s' % self.package_type)
raise YdkGenException(
'Invalid package type specified: %s' % self.package_type)

def _generate_bundle(self, profile_file):
""" Generate ydk bundle package. First translate profile file to
Expand All @@ -114,36 +118,42 @@ def _generate_bundle(self, profile_file):
self.package_name = profile.get('name')
self.version = profile.get('version')
if self.package_name is None or self.version is None:
raise YdkGenException("Attribute 'name' and/or 'version' is not defined in the profile")

raise YdkGenException(
"Attribute 'name' and/or 'version' is not defined in the profile")

tmp_file = tempfile.mkstemp(suffix='.bundle')[-1]
bundle_translator.translate(profile_file, tmp_file, self.ydk_root)

resolver = bundle_resolver.Resolver(self.output_dir, self.ydk_root, self.iskeyword)
resolver = bundle_resolver.Resolver(
self.output_dir, self.ydk_root, self.iskeyword)
curr_bundle, all_bundles = resolver.resolve(tmp_file)
assert isinstance(curr_bundle, bundle_resolver.Bundle)
for x in all_bundles:
assert isinstance(x, bundle_resolver.Bundle)

packages = self._get_packages(curr_bundle)
if len(packages) == 0:
raise YdkGenException('No YANG models were found. Please check your JSON profile file to make sure it is valid')
raise YdkGenException(
'No YANG models were found. Please check your JSON profile file to make sure it is valid')

_set_original_bundle_name_for_packages(all_bundles, packages, curr_bundle)
_set_original_bundle_name_for_packages(
all_bundles, packages, curr_bundle)
gen_api_root = self._init_bundle_directories(packages, curr_bundle)

bundle_name = curr_bundle.fqn
if self.language == 'cpp':
t = bundle_name.split('@')
cpp_version, cpp_build = get_cpp_version_and_build(t[1])
bundle_name = "%s@%s" % (t[0], cpp_version)
yang_models = _create_models_archive(curr_bundle, gen_api_root, bundle_name)
yang_models = _create_models_archive(
curr_bundle, gen_api_root, bundle_name)

generated_files = self._print_packages(packages, gen_api_root, curr_bundle)
generated_files = self._print_packages(
packages, gen_api_root, curr_bundle)

if self.language == 'cpp':
_modify_cpp_cmake(gen_api_root, curr_bundle.name, cpp_version, cpp_build,
curr_bundle.str_core_version, generated_files[0], generated_files[1], yang_models)
_modify_cpp_cmake(gen_api_root, curr_bundle.name, cpp_version, cpp_build,
curr_bundle.str_core_version, generated_files[0], generated_files[1], yang_models)

os.remove(tmp_file)

Expand All @@ -162,14 +172,17 @@ def _generate_service(self, profile_file):
self.package_name = profile.get('name')
self.version = profile.get('version')
if self.package_name is None or self.version is None:
raise YdkGenException("Attribute 'name' and/or 'version' is not defined in the profile")
raise YdkGenException(
"Attribute 'name' and/or 'version' is not defined in the profile")
dependency = profile.get('dependency')

package_name = 'ydk-service-%s' % self.package_name
gen_api_root = self._initialize_gen_api_directories(package_name, self.package_type)
gen_api_root = self._initialize_gen_api_directories(
package_name, self.package_type)

if self.language != 'go':
update_setup_file_version(self.language, gen_api_root, self.package_name, package_name, self.version)
update_setup_file_version(
self.language, gen_api_root, self.package_name, package_name, self.version)

return gen_api_root

Expand All @@ -180,7 +193,8 @@ def _generate_core(self):
Returns:
gen_api_root (str): Root directory for generated APIs.
"""
gen_api_root = self._initialize_gen_api_directories(package_name='ydk', package_type='core')
gen_api_root = self._initialize_gen_api_directories(
package_name='ydk', package_type='core')

return gen_api_root

Expand All @@ -200,7 +214,8 @@ def _get_packages(self, bundle):
modules = pyang_builder.parse_and_return_modules()

# build api model packages
packages = ApiModelBuilder(self.iskeyword, self.language, bundle.name).generate(modules)
packages = ApiModelBuilder(
self.iskeyword, self.language, bundle.name).generate(modules)
packages.extend(
SubModuleBuilder().generate(pyang_builder.get_submodules(), self.iskeyword, self.language, bundle.name))

Expand All @@ -217,10 +232,12 @@ def _print_packages(self, pkgs, output_dir, bundle):
global classes_per_source_file
factory = printer_factory.PrinterFactory()
bundle_packages = _filter_bundle_from_packages(pkgs, bundle)
ydk_printer = factory.get_printer(self.language)(output_dir, bundle, self.generate_tests, self.one_class_per_module)
if self.language =='python':
ydk_printer = factory.get_printer(self.language)(
output_dir, bundle, self.generate_tests, self.one_class_per_module)
if self.language == 'python':
ydk_printer.generate_meta = self.generate_meta
generated_files = ydk_printer.emit(bundle_packages, classes_per_source_file)
generated_files = ydk_printer.emit(
bundle_packages, classes_per_source_file)
return generated_files

# Initialize generated API directory ######################################
Expand Down Expand Up @@ -257,7 +274,8 @@ def _init_bundle_directories(self, packages, bundle):
Returns:
gen_api_root (str): Root directory for generated APIs.
"""
gen_api_root = self._initialize_gen_api_directories(bundle.name + '-bundle', 'packages')
gen_api_root = self._initialize_gen_api_directories(
bundle.name + '-bundle', 'packages')

if self.language == 'python':
_modify_python_setup(gen_api_root,
Expand Down Expand Up @@ -327,12 +345,14 @@ def _get_yang_models_filenames_from_directory(path, prefix):
if file.endswith(".yang"):
yang_models.append(os.path.join(prefix, file))
elif os.path.islink(file_path):
yang_models.extend(_get_yang_models_filenames_from_directory(file_path, file))
yang_models.extend(
_get_yang_models_filenames_from_directory(file_path, file))
return yang_models


def _create_tar(resolved_models_dir, tar_file_path):
yang_models = _get_yang_models_filenames_from_directory(resolved_models_dir, '')
yang_models = _get_yang_models_filenames_from_directory(
resolved_models_dir, '')
with tarfile.open(tar_file_path, 'w:gz') as tar:
for y in yang_models:
yang_model_path = os.path.join(resolved_models_dir, y)
Expand Down Expand Up @@ -378,25 +398,29 @@ def _set_original_bundle_name_for_packages(bundles, packages, curr_bundle):
if pkg.name == module.pkg_name:
pkg.bundle_name = bundle.name


def get_cpp_version_and_build(version):
m = re.match('(\d+).(\d+).(\d+)', version)
if m:
ver = '.'.join(m.group(i) for i in range(1,4))
ver = '.'.join(m.group(i) for i in range(1, 4))
rest = version.split(ver)[1]
build = '1'
if len(rest)>0:
if len(rest) > 0:
b = re.match('[-_.a-z]+(\d+)', rest)
if b:
build = b.group(1)
return ver, build
else:
raise YdkGenException('Invalid version format %s\n\nExpected format: <major>.<minor>.<patch>[[.|-|_\w]+<build>]' % version)
raise YdkGenException(
'Invalid version format %s\n\nExpected format: <major>.<minor>.<patch>[[.|-|_\w]+<build>]' % version)


def normalize_version(version):
version = version.replace('_', '.')
version = version.replace('-', '.')
return version


def _modify_python_setup(gen_api_root, package_name, version, core_version, dependencies, description, long_description):
""" Modify setup.py template for python packages. Replace package name
and version number in setup.py located in <gen_api_root>/setup.py.
Expand Down Expand Up @@ -428,13 +452,15 @@ def _modify_python_setup(gen_api_root, package_name, version, core_version, depe
print(line.replace("$VERSION$", normalize_version(version)), end='')
elif not replaced_core_version and "$CORE_VERSION$" in line:
replaced_core_version = True
print(line.replace("$CORE_VERSION$", normalize_version(core_version)), end='')
print(line.replace("$CORE_VERSION$",
normalize_version(core_version)), end='')
elif not replaced_dependencies and "$DEPENDENCY$" in line:
replaced_dependencies = True
if dependencies:
additional_requires = ["'ydk-models-%s>=%s'" % (d.name, normalize_version(d.str_version))
for d in dependencies]
print(line.replace("'$DEPENDENCY$'", ", ".join(additional_requires)))
print(line.replace("'$DEPENDENCY$'",
", ".join(additional_requires)))
else:
print(line.replace("'$DEPENDENCY$'", ""))
elif not replaced_description and "$DESCRIPTION$" in line:
Expand All @@ -458,21 +484,22 @@ def _modify_python_manifest(gen_api_root, bundle_name):

def update_setup_file_version(language, gen_api_root, name, package_name, version):
cpp_version, cpp_build = get_cpp_version_and_build(version)
replacer_table = {} # KEY is file name; VALUE is dictionary: substr match: replacement template
# KEY is file name; VALUE is dictionary: substr match: replacement template
replacer_table = {}
if language == 'python':
replacer_table = {
'setup.py': {'NAME =': "NAME = '%s'\n" % package_name,
'VERSION =': "VERSION = '%s'\n" % normalize_version(version),
},
},
'CMakeLists.txt': {'project(path VERSION': 'project(path VERSION %s LANGUAGES C CXX)\n' % cpp_version,
'set (CPACK_PACKAGE_RELEASE': 'set (CPACK_PACKAGE_RELEASE "%s")\n' % cpp_build,
}
}
}
elif language == 'cpp':
replacer_table = {
'CMakeLists.txt': {'project(ydk_%s VERSION' % name: 'project(ydk_%s VERSION %s LANGUAGES C CXX)\n' % (name, cpp_version),
'set (CPACK_PACKAGE_RELEASE': 'set (CPACK_PACKAGE_RELEASE "%s")\n' % cpp_build,
}
}
}
else:
raise Exception('Language {0} has no setup file'.format(language))
Expand Down Expand Up @@ -501,8 +528,10 @@ def _modify_cpp_cmake(gen_api_root, bundle_name, cpp_version, cpp_build, core_ve
"""
cmake_file = os.path.join(gen_api_root, 'CMakeLists.txt')

source_files = ['ydk/models/{}/'.format(bundle_name) + s for s in source_files]
header_files = ['ydk/models/{}/'.format(bundle_name) + s for s in header_files]
source_files = [
'ydk/models/{}/'.format(bundle_name) + s for s in source_files]
header_files = [
'ydk/models/{}/'.format(bundle_name) + s for s in header_files]
source_file_names = ' '.join(source_files)
header_file_names = ' '.join(header_files)
model_file_names = ' '.join(model_names)
Expand All @@ -523,7 +552,8 @@ def _modify_cpp_cmake(gen_api_root, bundle_name, cpp_version, cpp_build, core_ve
line = line.replace("@YANG_FILES@", model_file_names)
print(line, end='')
elif "@BRIEF_NAME_WITH_DASHES@" in line:
line = line.replace("@BRIEF_NAME_WITH_DASHES@", bundle_name.replace('_', '-'))
line = line.replace("@BRIEF_NAME_WITH_DASHES@",
bundle_name.replace('_', '-'))
print(line, end='')
elif "@BUILD_NUMBER@" in line:
line = line.replace("@BUILD_NUMBER@", cpp_build)
Expand Down
21 changes: 14 additions & 7 deletions ydkgen/api_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,8 @@ def go_name(self):
if hasattr(self, 'goName'):
return self.goName

stmt_name = escape_name(stmt.unclashed_arg if hasattr(stmt, 'unclashed_arg') else stmt.arg)
stmt_name = escape_name(stmt.unclashed_arg if hasattr(
stmt, 'unclashed_arg') else stmt.arg)
name = camel_case(stmt_name)
if stmt_name[-1] == '_':
name = '%s_' % name
Expand Down Expand Up @@ -297,6 +298,7 @@ def is_augment(self):
@property
def augments_other(self):
return self._augments_other

@augments_other.setter
def augments_other(self, augments_other):
self._augments_other = augments_other
Expand Down Expand Up @@ -463,7 +465,8 @@ def imported_types(self):
prop_types = [p.property_type]
if isinstance(p.property_type, UnionTypeSpec):
for child_type_stmt in p.property_type.types:
prop_types.extend(self._get_union_types(child_type_stmt, p))
prop_types.extend(
self._get_union_types(child_type_stmt, p))
for prop_type in prop_types:
if isinstance(prop_type, Class) or isinstance(prop_type, Enum) or isinstance(prop_type, Bits):
if prop_type.get_package() != package:
Expand Down Expand Up @@ -543,7 +546,8 @@ def module(self):

@stmt.setter
def stmt(self, stmt):
name = escape_name(stmt.unclashed_arg if hasattr(stmt, 'unclashed_arg') else stmt.arg)
name = escape_name(stmt.unclashed_arg if hasattr(
stmt, 'unclashed_arg') else stmt.arg)
name = camel_case(name)

if self.iskeyword(name):
Expand Down Expand Up @@ -733,7 +737,8 @@ def stmt(self):
def stmt(self, stmt):
self._stmt = stmt
# name = snake_case(stmt.arg)
name = snake_case(stmt.unclashed_arg if hasattr(stmt, 'unclashed_arg') else stmt.arg)
name = snake_case(stmt.unclashed_arg if hasattr(
stmt, 'unclashed_arg') else stmt.arg)

if self.iskeyword(name) or self.iskeyword(name.lower()):
name = '%s_' % name
Expand Down Expand Up @@ -806,7 +811,8 @@ def go_name(self):
while stmt.parent is not None and not stmt.keyword in ('leaf', 'leaf-list', 'typedef'):
stmt = stmt.parent

name = escape_name(stmt.unclashed_arg if hasattr(stmt, 'unclashed_arg') else stmt.arg)
name = escape_name(stmt.unclashed_arg if hasattr(
stmt, 'unclashed_arg') else stmt.arg)
name = camel_case(name)
if self.iskeyword(name):
name = '%s%s' % ('Y', name)
Expand Down Expand Up @@ -956,7 +962,8 @@ def snake_case(input_text):


def get_property_name(element, iskeyword):
name = snake_case(element.stmt.unclashed_arg if hasattr(element.stmt, 'unclashed_arg') else element.stmt.arg)
name = snake_case(element.stmt.unclashed_arg if hasattr(
element.stmt, 'unclashed_arg') else element.stmt.arg)
if iskeyword(name) or iskeyword(name.lower()) or (
element.owner is not None and element.stmt.arg.lower() == element.owner.stmt.arg.lower()):
name = '%s_' % name
Expand All @@ -975,7 +982,7 @@ def _capitalize(s):
result = ''.join([_capitalize(word) for word in input_text.split('-')])
result = ''.join([_capitalize(word) for word in result.split('_')])
if input_text.startswith('_'):
result = '_'+result;
result = '_'+result
return result


Expand Down
Loading

0 comments on commit e5c17c1

Please sign in to comment.