-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDatabaseManager.py
115 lines (85 loc) · 3.46 KB
/
DatabaseManager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import csv
import shutil
import os
import numpy as np
import pandas as pd
from datetime import datetime
from pprint import pprint
defaultDatabasePath = 'ReplayDB.csv'
defaultDatabaseHeader = ['Name', 'GUID', 'Path']
class CSVManager:
def __init__(self):
self.filePath = defaultDatabasePath
self.backupManager = BackupManager()
def write(self, data, header, filePath=None, createBackup=True):
if filePath is None: filePath = self.filePath
if createBackup: self.backupManager.createBackup(filePath)
data.to_csv(filePath, columns=header, index=False)
def read(self, filePath=None):
if filePath is None: filePath = self.filePath
return pd.read_csv(filePath)
class DatabaseManager:
def __init__(self):
self.csvManager = CSVManager()
self.backupManager = BackupManager(defaultDatabasePath)
def read(self, filePath=defaultDatabasePath):
self.database = self.csvManager.read(filePath)
return self.database
def write(self, data, header=defaultDatabaseHeader, filePath=defaultDatabasePath, createBackup=True):
data = self.createDataFrame(data, defaultDatabaseHeader)
self.csvManager.write(data, defaultDatabaseHeader, filePath, createBackup)
def createDataFrame(self, data, header):
return pd.DataFrame(data, columns=header)
def createEmptyDataframe(self):
database = pd.DataFrame(np.random.randint(0,100,size=(1, 3)), columns=defaultDatabaseHeader)
database['Name'] = database.Name.astype(str)
return database
def getRow(self, value, database=None, colName='Name'):
if database is None: database = self.database
if value not in database.Name.values:
return None
return database[database[colName] == value]
def getCol(self, colName, database=None):
if database is None: database = self.database
return database[colName]
def delCol(self, colName, database=None):
if database is None: database = self.database
return database.drop(columns=[colName])
def swapCols(self, newCols, database=None):
if database is None: database = self.database
return database.reindex(columns=newCols)
def delDupes(self, database):
if database is None: database = self.database
return database.drop_duplicates(keep='first')
def appendRow(self, database):
if database is None: database = self.database
def valueExists(self, value, database=None):
if database is None: database = self.database
return database.isin(value).any()
def matchValue(self, value):
pass
def createBackupCSV(self, filePath=None):
if filePath is None: filePath = defaultDatabasePath
self.backupManager.createBackup(filePath)
class BackupManager:
def __init__(self, filePath=None):
if filePath is None: self.filePath = defaultDatabasePath
else: self.filePath = filePath
self.dbExists = self.databaseExists(filePath)
def databaseExists(self, filePath=None):
if filePath is None: filePath = self.filePath
return os.path.isfile(filePath)
def getLastModifiedTime(self, filePath=None):
if filePath is None: filePath = self.filePath
epoch = os.path.getmtime(filePath)
convertedEpoch = datetime.fromtimestamp(epoch).strftime(' %Y-%m-%d %H_%M_%S')
return convertedEpoch
def getBackupFileName(self, filePath=None):
if filePath is None: filePath = self.filePath
fileNameModifier = self.getLastModifiedTime(filePath) + '.csv'
return filePath.replace('.csv', fileNameModifier)
def createBackup(self, filePath=None):
if filePath is None: filePath = defaultDatabasePath
if self.dbExists: shutil.copy2(filePath, self.getBackupFileName())
class GoogleSheetsManager:
pass