Advertisement
Guest User

CourseFileSystem

a guest
Apr 24th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.23 KB | None | 0 0
  1. # -- IMPORTS
  2. #from User import User
  3. from CourseError import CourseError
  4. from PermissionError import PermissionError
  5. import shutil
  6. import json
  7. import os
  8.  
  9. # -- CLASS
  10. # TODO Verify users
  11. # TODO Validate parameters of methods
  12. class CourseFileSystem():
  13.  
  14. DEFAULT_COURSES_FOLDER = "Courses"
  15.  
  16. def __init__(self, user):
  17. #if not User.is_user(user):
  18. # -- throw error, not valid user
  19. # return 1
  20. self._user = user
  21.  
  22. # Permission
  23. from PermissionFileSystem import PermissionFileSystem
  24. self.permission_fs = PermissionFileSystem(self)
  25.  
  26. """
  27. TESTING EXAMPLES
  28. """
  29.  
  30. #print(self.add_course("Network Course"))
  31.  
  32. #print(self.add_lesson("ciao", "Network Course"))
  33.  
  34. #print(self.permission_fs.create_permission_file(True))
  35. print(self.is_valid_course("ciao"))
  36. #print(self.permission_fs.course_exists_by_name("Ciao"))
  37.  
  38. def is_valid_course(self, course_name):
  39. # Controllo che il corso esista nella directory
  40. if not course_name in os.listdir(CourseFileSystem.DEFAULT_COURSES_FOLDER):
  41. return False
  42.  
  43. course_id = self.permission_fs.get_id_by_course_name(course_name)
  44. if PermissionError.is_permission_error(course_id):
  45. return False
  46.  
  47. return True
  48.  
  49. # TODO: PermissionFS implementation
  50. def is_valid_lesson(self, course_name, lesson_name):
  51. if self.is_valid_course(course_name):
  52. if lesson_name in os.listdir(
  53. os.path.join(CourseFileSystem.DEFAULT_COURSES_FOLDER, course_name
  54. )):
  55. return True
  56. return False
  57.  
  58. # TODO: PermissionFS implementation
  59. def _get_available_courses(self, dir="Courses"):
  60. courses = dict()
  61. for entry in os.scandir(dir):
  62. if entry.is_dir():
  63. courses[entry.name] = self._get_available_lessons(entry.name)
  64. return courses
  65.  
  66. # Backbone
  67. # TODO: PermissionFS implementation
  68. def _get_available_lesson(self, course_name, lesson_name):
  69. res = []
  70. if self.is_valid_lesson(course_name, lesson_name):
  71. for entry in os.scandir(
  72. os.path.join(CourseFileSystem.DEFAULT_COURSES_FOLDER, course_name, lesson_name)
  73. ):
  74. if entry.is_file():
  75. res.append(entry.name)
  76. return res
  77.  
  78. # Backbone
  79. # TODO: PermissionFS implementation
  80. def _get_available_lessons(self, course_name):
  81. res = dict()
  82. if self.is_valid_course(course_name):
  83. for entry in os.scandir(
  84. os.path.join(CourseFileSystem.DEFAULT_COURSES_FOLDER, course_name)
  85. ):
  86. res[entry.name] = self._get_available_lesson(course_name, entry.name)
  87. return res
  88.  
  89. # TODO: Add try-except in case of error
  90. # This method uses the default courses folder var of the class
  91. def create_course_folder(self):
  92. if not os.path.isdir(CourseFileSystem.DEFAULT_COURSES_FOLDER):
  93. os.makedirs(CourseFileSystem.DEFAULT_COURSES_FOLDER)
  94. return True
  95. return False
  96.  
  97. # Backbone, doing stuff on the real file system
  98. def add_course(self, course_name):
  99.  
  100. self.create_course_folder()
  101.  
  102. # If it already exists you cannot overwrite it
  103. if self.is_valid_course(course_name):
  104. return False # Reminder: this should throw an exception, or not (?)
  105.  
  106. # Wait, seems like there is a course with that name in the permissions
  107. if self.permission_fs.course_exists_by_name(course_name):
  108. return False # Reminder: this should definitely throw an exception
  109.  
  110. try:
  111. os.makedirs(
  112. os.path.join(
  113. CourseFileSystem.DEFAULT_COURSES_FOLDER,
  114. course_name
  115. )
  116. )
  117. except OSError:
  118. return False # Well, could this be another future exception?
  119. # Just creating the course entry into the permissions file
  120. self.permission_fs.add_course(course_name)
  121.  
  122. return True
  123.  
  124. # Backbone, doing stuff on the real file system
  125. def remove_course(self, course_id):
  126. if not isinstance(course_id, str):
  127. return False
  128.  
  129. course_name = self.permission_fs.get_name_by_course_id(course_id)
  130. if not course_name:
  131. return False # Throw Exception, not valid course in permissions
  132.  
  133. if not self.is_valid_course(course_name):
  134. return False # Throw Exception, course deleted from directory
  135.  
  136. # Alright, removing the course from the directory
  137. try:
  138. shutil.rmtree(
  139. os.path.join(
  140. CourseFileSystem.DEFAULT_COURSES_FOLDER,
  141. course_name
  142. ),
  143. ignore_errors=True
  144. )
  145. except:
  146. return False # Exception, couldn't remove the course folder
  147.  
  148. # Alright, removing the course from the permissions
  149. if not self.permission_fs.remove_course(course_id):
  150. return False # Exception, couldn't remove the course permission
  151.  
  152. return True
  153.  
  154. def add_lesson(self, lesson_name, course_name):
  155. self.create_course_folder()
  156.  
  157. # If it already exists you cannot overwrite it
  158. if not self.is_valid_course(course_name):
  159. return CourseError("valid course", "Esiste già un corso con questo nome")
  160.  
  161. if not self.permission_fs.add_lesson(lesson_name, course_name):
  162. # TODO: Allo stato attuale non si può capire se la lezione esiste già
  163. # a livello filesystem o a livello permessi. Da implementare.
  164. return CourseError("valid lesson", "Esiste già una lezione con questo nome")
  165. return True
  166.  
  167.  
  168. def remove_lesson(self, lesson_id):
  169. self.create_course_folder()
  170.  
  171. # TODO: Remove lesson from filesystem
  172.  
  173. if not self.permission_fs.remove_lesson(lesson_id):
  174. return False
  175. return True
  176.  
  177. @staticmethod
  178. def is_course_file_system(var):
  179. if isinstance(var, CourseFileSystem):
  180. return True
  181. return False
  182.  
  183. # TODO
  184. def __str__(self):
  185. pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement