Advertisement
Guest User

Untitled

a guest
May 26th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.69 KB | None | 0 0
  1. import os
  2. import gtk
  3. from datetime import datetime
  4. from cmislib import CmisClient
  5. from cmislib.exceptions import UpdateConflictException, ObjectNotFoundException
  6. from urllib2 import URLError
  7. import pygtk
  8. pygtk.require('2.0')
  9.  
  10.  
  11. class CheckButton:
  12. verbose = True
  13. upload_dir = None
  14. log_file = None
  15. num_file_errors = 0
  16.  
  17. def start_upload(self, button):
  18. print('starting upload')
  19. api_url = 'http://localhost:8080/'
  20. api_url = api_url + 'alfresco/api/-default-/public/cmis/versions/1.1/atom'
  21. api_user = 'admin'
  22. api_password = 'admin'
  23. start_time = datetime.now()
  24. create_structure_boolean = True
  25. upload_files_boolean = True
  26. self.log_file = open(str(self.upload_dir) + '.log', 'w')
  27. client = CmisClient(api_url, api_user, api_password)
  28. try:
  29. default_repo = client.defaultRepository
  30. if create_structure_boolean:
  31. self.create_dir_schema(default_repo)
  32. if upload_files_boolean:
  33. self.upload_files(default_repo)
  34. stop_time = 'Total time: ' + str(datetime.now() - start_time)
  35. self.print_and_log('Number of file errors: ' + str(self.num_file_errors))
  36. self.print_and_log(stop_time)
  37. if self.verbose:
  38. print stop_time
  39. self.log_file.close()
  40. except URLError:
  41. print('Can not connect to the server.')
  42. quit()
  43.  
  44. # Our callback.
  45. # The data passed to this method is printed to stdout
  46.  
  47. def callback(self, widget, data=None):
  48. print "%s was toggled %s" % (data, ("OFF", "ON")[widget.get_active()])
  49.  
  50. # This Opens the dialog for select the folder.
  51. def OpenDialog(self, button):
  52. dialog = gtk.FileChooserDialog("Open..", None, gtk.FILE_CHOOSER_ACTION_OPEN, (
  53. gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
  54. dialog.set_default_response(gtk.RESPONSE_OK)
  55. dialog.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
  56. dialog.set_select_multiple(True)
  57. filter = gtk.FileFilter()
  58. filter.set_name("All files")
  59. filter.add_pattern("*")
  60. dialog.add_filter(filter)
  61. filter = gtk.FileFilter()
  62. filter.set_name("Images")
  63. filter.add_mime_type("image/png")
  64. filter.add_mime_type("image/jpeg")
  65. filter.add_mime_type("image/gif")
  66. filter.add_pattern("*.png")
  67. filter.add_pattern("*.jpg")
  68. filter.add_pattern("*.gif")
  69. filter.add_pattern("*.tif")
  70. filter.add_pattern("*.xpm")
  71. dialog.add_filter(filter)
  72. response = dialog.run()
  73. if response == gtk.RESPONSE_OK:
  74. self.upload_dir = dialog.get_filename()
  75. os.chdir('/'.join(dialog.get_filename().split('/')[:-1]) + '/')
  76. self.real_dir = os.getcwd()
  77. print dialog.get_filename(), 'selected'
  78. elif response == gtk.RESPONSE_CANCEL:
  79. self.print_and_log('Closed, no files selected')
  80. dialog.destroy()
  81.  
  82. def print_and_log(self, string):
  83. if self.verbose:
  84. print(string)
  85. self.log_file.write(string + '\n')
  86.  
  87. def dir_exists(self, dir_name, default_repo):
  88. try:
  89. dir_obj = default_repo.getObjectByPath(dir_name)
  90. return dir_obj
  91. except ObjectNotFoundException:
  92. return False
  93.  
  94. def create_dir_schema(self, default_repo):
  95. self.print_and_log("Creating directoy schema")
  96. dirs = []
  97. dirs_created = [] # array to know if the dir has already been created
  98. # Creating an array of all directories and subdirectories
  99. for directory, subdirectories, files in os.walk(self.upload_dir):
  100. dirs.append(directory)
  101. # print dirs
  102. for full_dir in dirs:
  103. full_dir = full_dir.split(self.real_dir)[-1][1:]
  104. print full_dir
  105. last_dir = os.sep # tmp var to hold last dir
  106. for actual_dir in full_dir.split(os.sep):
  107. full_actual = last_dir + actual_dir
  108. exists = self.dir_exists(full_actual, default_repo)
  109. if not exists and last_dir not in dirs_created:
  110. try:
  111. last_parent = default_repo.getObjectByPath(last_dir)
  112. last_parent.createFolder(actual_dir)
  113. # self.print_and_log('Creating ' + actual_dir)
  114. except UpdateConflictException:
  115. self.print_and_log(actual_dir + ' already exists.')
  116. except ObjectNotFoundException:
  117. self.print_and_log(actual_dir + ' not found.')
  118. last_dir = last_dir + actual_dir + os.sep
  119. dirs_created.append(last_dir + actual_dir)
  120.  
  121. def upload_files(self, default_repo):
  122. self.print_and_log("Uploading files.")
  123. for directory, subdirectories, files in os.walk(self.upload_dir):
  124. for file in files:
  125. try:
  126. someFile = open(directory + os.sep + file, 'r')
  127. directory_temp = directory.split(self.real_dir)[-1][1:]
  128. print str(directory)
  129. print str(directory_temp)
  130. folder = default_repo.getObjectByPath(os.sep + directory_temp)
  131. folder.createDocument(file, contentFile=someFile)
  132. except UpdateConflictException:
  133. self.print_and_log(file + ' already exists.')
  134. self.num_file_errors = self.num_file_errors + 1
  135. except URLError:
  136. self.print_and_log(file + ' generates URL error.')
  137. self.num_file_errors = self.num_file_errors + 1
  138. except UnicodeDecodeError:
  139. self.print_and_log(file + ' generates Unicode decode error.')
  140. self.num_file_errors = self.num_file_errors + 1
  141. except ObjectNotFoundException:
  142. self.print_and_log(file + ' object not found error.')
  143. self.num_file_errors = self.num_file_errors + 1
  144.  
  145. def delete_event(self, widget, event, data=None):
  146. gtk.main_quit()
  147. return False
  148.  
  149. def __init__(self):
  150.  
  151. # Create a new window
  152. self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  153.  
  154. # Set the window title
  155. self.window.set_title("Alfresco Uploader")
  156.  
  157. # Set a handler for delete_event that immediately
  158. # exits GTK.
  159. self.window.connect("delete_event", self.delete_event)
  160.  
  161. # Sets the border width of the window.
  162. self.window.set_border_width(40)
  163.  
  164. # Create a vertical box
  165. vbox = gtk.VBox(True, 2)
  166.  
  167. # Put the vbox in the main window
  168. self.window.add(vbox)
  169.  
  170. # Create first button
  171. button = gtk.CheckButton("Create Structure")
  172.  
  173. # When the button is toggled, we call the "callback" method
  174. # with a pointer to "button" as its argument
  175. button.connect("toggled", self.callback, "check button 1")
  176.  
  177. # Insert button 1
  178. vbox.pack_start(button, True, True, 2)
  179.  
  180. button.show()
  181.  
  182. # Create second button
  183.  
  184. button = gtk.CheckButton("Upload Directory")
  185.  
  186. # When the button is toggled, we call the "callback" method
  187. # with a pointer to "button 2" as its argument
  188. button.connect("toggled", self.callback, "check button 2")
  189. # Insert button 2
  190. vbox.pack_start(button, True, True, 2)
  191.  
  192. button.show()
  193.  
  194. # Create "GO" button
  195. SelectFolderButton = gtk.Button("Select Folder")
  196.  
  197. # When the button is clicked, we call the opendialog function
  198. # and the program opens the dialog
  199. SelectFolderButton.connect("clicked", self.OpenDialog)
  200.  
  201. # Insert the GO button
  202. vbox.pack_start(SelectFolderButton, True, True, 2)
  203.  
  204. StartUploadButton = gtk.Button("Start Upload")
  205. StartUploadButton.connect("clicked", self.start_upload)
  206.  
  207. # Insert the GO button
  208. vbox.pack_start(StartUploadButton, True, True, 2)
  209.  
  210. # Create "Quit" button
  211. button = gtk.Button("Quit")
  212.  
  213. # When the button is clicked, we call the mainquit function
  214. # and the program exits
  215. button.connect("clicked", lambda wid: gtk.main_quit())
  216.  
  217. # Insert the quit button
  218. vbox.pack_start(button, True, True, 2)
  219.  
  220. SelectFolderButton.show()
  221. StartUploadButton.show()
  222. button.show()
  223. vbox.show()
  224. self.window.show()
  225.  
  226.  
  227. def main():
  228. gtk.main()
  229. return 0
  230.  
  231.  
  232. if __name__ == "__main__":
  233. CheckButton()
  234. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement