def create(self): SetupProjectDatabase.create_tables() SetupProjectDatabase.initialize_data("demo") base_path = os.path.dirname(self.project_db) rel_project_db = os.path.relpath(self.project_db, base_path) rel_reference_db = os.path.relpath(self.reference_db, base_path) print("\t - project_db {}".format(self.project_db)) print("\t - base_path {}".format(base_path)) # print("rel_project_db {}".format(rel_project_db)) # print("rel_reference_db {}".format(rel_reference_db)) Project_config.get_or_create_default( editor_version=self.editor_version, project_name=self.project_name, #project_db=rel_project_db, reference_db=rel_reference_db)
def __init__(self, project_db, editor_version, project_name=None, datasets_db=None, constant_ps=True, is_lte=False, project_description=None): self.__abort = False base_path = os.path.dirname(project_db) rel_project_db = os.path.relpath(project_db, base_path) if datasets_db is None: conn = lib.open_db(project_db) if not lib.exists_table(conn, 'project_config'): sys.exit( 'No datasets database provided and the project_config table in your project database does not exist. Please provide either a datasets database file or an existing project database.' ) SetupProjectDatabase.init(project_db) try: config = Project_config.get() datasets_db = utils.full_path(project_db, config.reference_db) if project_name is None: project_name = config.project_name except Project_config.DoesNotExist: sys.exit('Could not retrieve project configuration data.') rel_datasets_db = os.path.relpath(datasets_db, base_path) ver_check = SetupDatasetsDatabase.check_version( datasets_db, editor_version) if ver_check is not None: sys.exit(ver_check) # Backup original db before beginning do_gis = False if os.path.exists(project_db): do_gis = True try: self.emit_progress(2, 'Backing up GIS database...') filename, file_extension = os.path.splitext(rel_project_db) bak_filename = filename + '_bak_' + time.strftime( '%Y%m%d-%H%M%S') + file_extension bak_dir = os.path.join(base_path, 'DatabaseBackups') if not os.path.exists(bak_dir): os.makedirs(bak_dir) backup_db_file = os.path.join(bak_dir, bak_filename) copyfile(project_db, backup_db_file) except IOError as err: sys.exit(err) try: SetupProjectDatabase.init(project_db, datasets_db) self.emit_progress(10, 'Creating database tables...') SetupProjectDatabase.create_tables() self.emit_progress(50, 'Copying data from SWAT+ datasets database...') description = project_description if project_description is not None else project_name SetupProjectDatabase.initialize_data( description, is_lte, overwrite_plants=OVERWRITE_PLANTS) config = Project_config.get_or_create_default( editor_version=editor_version, project_name=project_name, project_db=rel_project_db, reference_db=rel_datasets_db, project_directory='', is_lte=is_lte) conn = lib.open_db(project_db) plant_cols = lib.get_column_names(conn, 'plants_plt') plant_col_names = [v['name'] for v in plant_cols] if 'days_mat' not in plant_col_names: migrator = SqliteMigrator(SqliteDatabase(project_db)) migrate( migrator.rename_column('plants_plt', 'plnt_hu', 'days_mat')) for p in project_plants: dp = dataset_plants.get_or_none( dataset_plants.name == p.name) if dp is not None: p.days_mat = dp.days_mat else: p.days_mat = 0 p.save() except Exception as ex: if backup_db_file is not None: self.emit_progress(50, "Error occurred. Rolling back database...") SetupProjectDatabase.rollback(project_db, backup_db_file) self.emit_progress(100, "Error occurred.") sys.exit(str(ex)) if do_gis: api = GisImport(project_db, True, constant_ps, backup_db_file) api.insert_default()