|
- # Copyright 2020 Huawei Technologies Co., Ltd
- #
- # 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.
- # ============================================================================
- """Source file module."""
- import os
- import shutil
- import stat
- from pathlib import Path
-
- from mindinsight.wizard.common.exceptions import OSPermissionError, TemplateFileError
-
-
- class SourceFile:
- """Network code generator."""
- file_relative_path = ''
- template_file_path = ''
- content = ''
-
- @staticmethod
- def _make_dir(directory):
- permissions = os.R_OK | os.W_OK | os.X_OK
- mode = permissions << 6
- os.makedirs(directory, mode=mode, exist_ok=True)
- return directory
-
- def write(self, project_directory):
- """Generate the network files."""
- template_file_path = Path(self.template_file_path)
- if not template_file_path.is_file():
- raise TemplateFileError("Template file %s is not exist." % self.template_file_path)
- new_file_path = os.path.join(project_directory, self.file_relative_path)
- self._make_dir(os.path.dirname(new_file_path))
- with open(new_file_path, 'w', encoding='utf-8') as fp:
- fp.write(self.content)
- try:
- shutil.copymode(self.template_file_path, new_file_path)
- os.chmod(new_file_path, stat.S_IRUSR | stat.S_IWUSR)
- self.set_writeable(new_file_path)
- if new_file_path.endswith('.sh'):
- self.set_executable(new_file_path)
- except OSError:
- raise OSPermissionError("Notice: Set permission bits failed on %s." % new_file_path)
-
- @staticmethod
- def set_writeable(file_name):
- """Add write permission."""
- if not os.access(file_name, os.W_OK):
- file_stat = os.stat(file_name)
- permissions = stat.S_IMODE(file_stat.st_mode) | stat.S_IWUSR
- os.chmod(file_name, permissions)
-
- @staticmethod
- def set_executable(file_name):
- """Add executable permission."""
- if not os.access(file_name, os.X_OK):
- file_stat = os.stat(file_name)
- permissions = stat.S_IMODE(file_stat.st_mode) | stat.S_IXUSR
- os.chmod(file_name, permissions)
|