import sys
[docs]
class PowerFactory:
"""
PowerFactory Main Class.
author: IB
"""
def __init__(self, path):
self.path = path
self.app = None
self.user = None
self.project = None
[docs]
@staticmethod
def clear_path() -> None:
"""
Delete previous PowerFactory Versions in path.
"""
index = []
# iterate threw all system PATH paths
for i, path in enumerate(sys.path):
# get all paths not containing PowerFactory
if "PowerFactory" not in path:
index.append(i)
new_path = [sys.path[i] for i in index]
sys.path = new_path
[docs]
def add_path(self) -> None:
"""
Add directory of power factory module to sys.path.
"""
sys.path.append(self.path)
[docs]
def get_user(self):
"""
Get current user.
:return: **-** (powerfactory.DataObject) - application \
user instance
"""
return self.app.GetCurrentUser()
[docs]
def activate_project(self, project_name: str):
"""
Open Project.
TODO: Error Handling if inserted project name does not \
exist
TODO: Get Return Type
:param project_name: power factory project name
:type project_name: str
:return: **-** (?) - powerfactory active project
"""
# check if the get_user method has already been called
if self.user is None:
# if not get the project user
self.user = self.get_user()
# get the project object of the power factory object of the
# inserted project name
project = self.user.GetContents(project_name + ".IntPrj")[0]
return project.Activate()
[docs]
def open_app(self, project_name: str):
"""
Open PowerFactory Application and activate project.
TODO: Problem when importing powerfactory module, if several \
PowerFactory versions in sys.path! Import should be \
@toplevel.
TODO: Errorhandling if PowerFactory cannot be imported.
:param project_name: power factory project name
:type project_name: str
:return: **-** (?) - powerfactory application instance
"""
# remove all power factory versions from system path
self.clear_path()
# add the inserted power factory version to system path
self.add_path()
import powerfactory
# load the power factory application if it has not been loaded
# yet
if self.app is None:
self.app = powerfactory.GetApplicationExt()
# activate the power factory project if there is no active
# project yet
if self.project is None:
self.project = self.activate_project(project_name)
return self.app