-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject_manager.py
More file actions
89 lines (65 loc) · 2.75 KB
/
project_manager.py
File metadata and controls
89 lines (65 loc) · 2.75 KB
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
import os
import json
from datetime import datetime
import shortuuid
from logger import Logger, INFO, WARNING, ERROR
class ProjectManager:
def __init__(self, project_file = "data/projects.json"):
self.project_file = project_file
self.projects = {}
self.logger = Logger(True, "logs/project_logs.txt")
os.makedirs("data", exist_ok=True)
os.makedirs("logs", exist_ok=True)
self._load_projects()
def _load_projects(self):
if os.path.exists(self.project_file):
try:
with open(self.project_file, "r") as f:
self.projects = json.load(f)
self.logger.log("Loaded projects from file", INFO)
return True
except Exception as e:
self.logger.log(f"Error loading projects: {e}", ERROR)
self.projects = {}
return False
else:
self.projects = {}
return False
def _save_projects(self):
try:
with open(self.project_file, 'w') as f:
json.dump(self.projects, f, indent=4)
self.logger.log("Saved projects to file", INFO)
return True
except Exception as e:
self.logger.log(f"Error saving projects: {e}", ERROR)
return False
def _username_in_project(self, username):
return username in self.projects
def add_project(self, username, name, description=""):
if not name.strip():
self.logger.log("Project name cannot be empty.", WARNING)
return False, "Invalid project name"
if not self._username_in_project(username):
self.projects[username] = {}
project_id = shortuuid.uuid()[:8]
timestamp = datetime.now().isoformat()
self.projects[username][project_id] = {
"name": name,
"description": description,
"created": timestamp
}
self.logger.log(f"Project added for user '{username}': {name} ({project_id})")
self._save_projects()
return project_id, None
def delete_project(self, username, project_id):
if self._username_in_project(username) and project_id in self.projects[username]:
del self.projects[username][project_id]
self.logger.log(f"Deleted project {project_id} for {username}", INFO)
self._save_projects()
return True, None
self.logger.log(f"Attempt to delete non-existent project {project_id} for user {username}", WARNING)
return False, "Project not found"
def list_projects(self, username):
return self.projects.get(username, {})
""" TESTING """