Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove ViewerUser / viewer_mode #1447

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 56 additions & 93 deletions pyiron_base/database/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import re
import os
from datetime import datetime
from pyiron_base.utils.deprecate import deprecate
import pandas
from sqlalchemy import (
create_engine,
Expand Down Expand Up @@ -229,28 +228,6 @@ def _create_table():
delay=0.1,
delay_factor=2,
)
self._view_mode = False

def _get_view_mode(self):
return self._view_mode

@IsDatabase.view_mode.setter
def view_mode(self, value):
"""
Set view_mode - if view_mode is enable pyiron has read only access to the database.

Args:
value (bool): TRUE or FALSE
"""
if isinstance(value, bool):
self._view_mode = value
else:
raise TypeError("Viewmode can only be TRUE or FALSE.")

@IsDatabase.viewer_mode.setter
@deprecate("use view_mode")
def viewer_mode(self, value):
self.view_mode = value

def _job_dict(
self,
Expand Down Expand Up @@ -451,20 +428,17 @@ def add_column(self, col_name, col_type):
Returns:

"""
if not self._view_mode:
if isinstance(col_name, list):
col_name = col_name[-1]
if isinstance(col_type, list):
col_type = col_type[-1]
self.conn.execute(
text(
"ALTER TABLE %s ADD COLUMN %s %s"
% (self.simulation_table.name, col_name, col_type)
)
if isinstance(col_name, list):
col_name = col_name[-1]
if isinstance(col_type, list):
col_type = col_type[-1]
self.conn.execute(
text(
"ALTER TABLE %s ADD COLUMN %s %s"
% (self.simulation_table.name, col_name, col_type)
)
self.conn.commit()
else:
raise PermissionError("Not avilable in viewer mode.")
)
self.conn.commit()

def change_column_type(self, col_name, col_type):
"""
Expand All @@ -477,20 +451,17 @@ def change_column_type(self, col_name, col_type):
Returns:

"""
if not self._view_mode:
if isinstance(col_name, list):
col_name = col_name[-1]
if isinstance(col_type, list):
col_type = col_type[-1]
self.conn.execute(
text(
"ALTER TABLE %s ALTER COLUMN %s TYPE %s"
% (self.simulation_table.name, col_name, col_type)
)
if isinstance(col_name, list):
col_name = col_name[-1]
if isinstance(col_type, list):
col_type = col_type[-1]
self.conn.execute(
text(
"ALTER TABLE %s ALTER COLUMN %s TYPE %s"
% (self.simulation_table.name, col_name, col_type)
)
self.conn.commit()
else:
raise PermissionError("Not avilable in viewer mode.")
)
self.conn.commit()

def get_items_sql(self, where_condition=None, sql_statement=None):
"""
Expand Down Expand Up @@ -626,23 +597,20 @@ def add_item_dict(self, par_dict):
Returns:
int: Database ID of the item created as an int, like: 3
"""
if not self._view_mode:
try:
par_dict = self._check_chem_formula_length(par_dict)
par_dict = dict(
(key.lower(), value) for key, value in par_dict.items()
) # make keys lowercase
result = self.conn.execute(
self.simulation_table.insert().values(**par_dict)
).inserted_primary_key[-1]
self.conn.commit()
if not self._keep_connection:
self.conn.close()
return result
except Exception as except_msg:
raise ValueError("Error occurred: " + str(except_msg))
else:
raise PermissionError("Not avilable in viewer mode.")
try:
par_dict = self._check_chem_formula_length(par_dict)
par_dict = dict(
(key.lower(), value) for key, value in par_dict.items()
) # make keys lowercase
result = self.conn.execute(
self.simulation_table.insert().values(**par_dict)
).inserted_primary_key[-1]
self.conn.commit()
if not self._keep_connection:
self.conn.close()
return result
except Exception as except_msg:
raise ValueError("Error occurred: " + str(except_msg))

def __get_items(self, col_name, var):
"""
Expand Down Expand Up @@ -708,32 +676,29 @@ def _item_update(self, par_dict, item_id):
Returns:

"""
if not self._view_mode:
if np.issubdtype(type(item_id), np.integer):
item_id = int(item_id)
# all items must be lower case, ensured here
par_dict = dict((key.lower(), value) for key, value in par_dict.items())
query = (
self.simulation_table.update()
.where(self.simulation_table.c["id"] == item_id)
.values()
)
try:
self.conn.execute(query, par_dict)
self.conn.commit()
except (OperationalError, DatabaseError):
if not self._sql_lite:
self.conn = AutorestoredConnection(self._engine)
else:
self.conn = self._engine.connect()
self.conn.connection.create_function("like", 2, self.regexp)
if np.issubdtype(type(item_id), np.integer):
item_id = int(item_id)
# all items must be lower case, ensured here
par_dict = dict((key.lower(), value) for key, value in par_dict.items())
query = (
self.simulation_table.update()
.where(self.simulation_table.c["id"] == item_id)
.values()
)
try:
self.conn.execute(query, par_dict)
self.conn.commit()
except (OperationalError, DatabaseError):
if not self._sql_lite:
self.conn = AutorestoredConnection(self._engine)
else:
self.conn = self._engine.connect()
self.conn.connection.create_function("like", 2, self.regexp)

self.conn.execute(query, par_dict)
self.conn.commit()
if not self._keep_connection:
self.conn.close()
else:
raise PermissionError("Not avilable in viewer mode.")
self.conn.execute(query, par_dict)
self.conn.commit()
if not self._keep_connection:
self.conn.close()

def delete_item(self, item_id: int):
"""
Expand All @@ -745,8 +710,6 @@ def delete_item(self, item_id: int):
Returns:

"""
if self._view_mode:
raise PermissionError("Not avilable in viewer mode.")

res = self.conn.execute(
self.simulation_table.delete().where(
Expand Down
13 changes: 1 addition & 12 deletions pyiron_base/database/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ class IsDatabase(ABC):
Captures common interface for all database types in pyiron, e.g. SQL/SQLite/FileTable.
"""

@abstractmethod
def _get_view_mode(self):
pass

@property
def view_mode(self):
"""
Expand All @@ -47,14 +43,7 @@ def view_mode(self):
Returns:
bool: True when view_mode is enabled
"""
return self._get_view_mode()

@property
@deprecate("use view_mode")
def viewer_mode(self):
return self.view_mode

viewer_mode.__doc__ = view_mode.__doc__
return False

@abstractmethod
def _get_job_table(
Expand Down
44 changes: 6 additions & 38 deletions pyiron_base/database/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,6 @@ def sql_view_connection_string(self):
def sql_table_name(self):
return s.configuration["sql_table_name"]

@property
def sql_view_table_name(self):
return s.configuration["sql_view_table_name"]

def open_connection(self):
"""
Internal function to open the connection to the database. Only after this function is called the database is
Expand Down Expand Up @@ -169,45 +165,17 @@ def switch_to_viewer_mode(self):
"""
Switch from user mode to viewer mode - if view_mode is enable pyiron has read only access to the database.
"""
if (
self.sql_view_connection_string is not None
and not self.database_is_disabled
):
if self._database.view_mode:
logger.info("Database is already in viewer mode!")
else:
from pyiron_base.database.generic import DatabaseAccess

self.close_connection()
self._database = DatabaseAccess(
self.sql_view_connection_string,
self.sql_view_table_name,
)
self._database.view_mode = True
else:
print("Viewer Mode is not available on this pyiron installation.")
logger.info("Viewer Mode is not available any more!")
raise DeprecationWarning("Viewer Mode is not available any more!")

def switch_to_user_mode(self):
"""
Switch from viewer mode to user mode - if view_mode is enable pyiron has read only access to the database.
"""
if (
self.sql_view_connection_string is not None
and not self.database_is_disabled
):
if self._database.view_mode:
from pyiron_base.database.generic import DatabaseAccess

self.close_connection()
self._database = DatabaseAccess(
self.sql_connection_string,
self.sql_table_name,
)
self._database.view_mode = False
else:
logger.info("Database is already in user mode!")
else:
print("Viewer Mode is not available on this pyiron installation.")
logger.info("Database is already in user mode!")
raise DeprecationWarning(
"Viewer Mode is not available any more: already in user_mode!"
)

def close_connection(self):
"""
Expand Down
Loading
Loading