From d79cd180ea616cfe12a600cb41cbb898751b0117 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Fri, 5 Aug 2016 13:42:46 +0200 Subject: [PATCH 1/8] First steps --- populate_oc/GUI/Readme.md | 26 ++++++ populate_oc/GUI/oc_populator.py | 21 +++++ populate_oc/GUI/oc_populator.ui | 134 +++++++++++++++++++++++++++++ populate_oc/GUI/ui_oc_populator.py | 86 ++++++++++++++++++ 4 files changed, 267 insertions(+) create mode 100644 populate_oc/GUI/Readme.md create mode 100644 populate_oc/GUI/oc_populator.py create mode 100644 populate_oc/GUI/oc_populator.ui create mode 100644 populate_oc/GUI/ui_oc_populator.py diff --git a/populate_oc/GUI/Readme.md b/populate_oc/GUI/Readme.md new file mode 100644 index 0000000..0cb5a2f --- /dev/null +++ b/populate_oc/GUI/Readme.md @@ -0,0 +1,26 @@ + +This requires python3, pyqt5 and Qt creator to modify the interface. + +Install steps required (OS X): + +*** +TO DO +xcode-select --install +brew install python3 +pip3 install pyqt5 +*** + +To compile .ui files do + +``` +pyuic5 -o ui_oc_populator.py oc_populator.ui +``` + +To run do + +``` +python3 oc_populator.py +``` + + + diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py new file mode 100644 index 0000000..f50ab03 --- /dev/null +++ b/populate_oc/GUI/oc_populator.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import sys +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from ui_oc_populator import Ui_MainWindow + +class MyApp(QMainWindow, Ui_MainWindow): + parse_triggered = pyqtSignal() + + def __init__(self, parent=None, name=None): + super(MyApp, self).__init__(parent) + self.setupUi(self) + +if __name__ == "__main__": + + app = QApplication(sys.argv) + window = MyApp() + window.show() + sys.exit(app.exec_()) diff --git a/populate_oc/GUI/oc_populator.ui b/populate_oc/GUI/oc_populator.ui new file mode 100644 index 0000000..7313ab4 --- /dev/null +++ b/populate_oc/GUI/oc_populator.ui @@ -0,0 +1,134 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 20 + 10 + 771 + 521 + + + + 0 + + + + Tab 1 + + + + + 79 + 56 + 251 + 141 + + + + + + + + + Host + + + + + + + Admin User + + + + + + + Admin Password + + + + + + + + + + + + + + + + + + + + + + + + 50 + 220 + 171 + 51 + + + + Store Credentials + + + + + + 220 + 220 + 171 + 51 + + + + 9 + + + Check connection + + + + + + Tab 2 + + + + + + + + 0 + 0 + 800 + 22 + + + + + + + + diff --git a/populate_oc/GUI/ui_oc_populator.py b/populate_oc/GUI/ui_oc_populator.py new file mode 100644 index 0000000..8a64150 --- /dev/null +++ b/populate_oc/GUI/ui_oc_populator.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'oc_populator.ui' +# +# Created by: PyQt5 UI code generator 5.7 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(800, 600) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) + self.tabWidget.setGeometry(QtCore.QRect(20, 10, 771, 521)) + self.tabWidget.setObjectName("tabWidget") + self.tab = QtWidgets.QWidget() + self.tab.setObjectName("tab") + self.horizontalLayoutWidget = QtWidgets.QWidget(self.tab) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(79, 56, 251, 141)) + self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.verticalLayout_2 = QtWidgets.QVBoxLayout() + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.label_host = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_host.setObjectName("label_host") + self.verticalLayout_2.addWidget(self.label_host) + self.label_admin_user = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_admin_user.setObjectName("label_admin_user") + self.verticalLayout_2.addWidget(self.label_admin_user) + self.label_admin_pw = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_admin_pw.setObjectName("label_admin_pw") + self.verticalLayout_2.addWidget(self.label_admin_pw) + self.horizontalLayout.addLayout(self.verticalLayout_2) + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.lineEdit_host = QtWidgets.QLineEdit(self.horizontalLayoutWidget) + self.lineEdit_host.setObjectName("lineEdit_host") + self.verticalLayout.addWidget(self.lineEdit_host) + self.lineEdit_admin_user = QtWidgets.QLineEdit(self.horizontalLayoutWidget) + self.lineEdit_admin_user.setObjectName("lineEdit_admin_user") + self.verticalLayout.addWidget(self.lineEdit_admin_user) + self.lineEdit_admin_pw = QtWidgets.QLineEdit(self.horizontalLayoutWidget) + self.lineEdit_admin_pw.setObjectName("lineEdit_admin_pw") + self.verticalLayout.addWidget(self.lineEdit_admin_pw) + self.horizontalLayout.addLayout(self.verticalLayout) + self.pushButton_store_credentials = QtWidgets.QPushButton(self.tab) + self.pushButton_store_credentials.setGeometry(QtCore.QRect(50, 220, 171, 51)) + self.pushButton_store_credentials.setObjectName("pushButton_store_credentials") + self.pushButton_check_connection = QtWidgets.QPushButton(self.tab) + self.pushButton_check_connection.setGeometry(QtCore.QRect(220, 220, 171, 51)) + self.pushButton_check_connection.setToolTipDuration(9) + self.pushButton_check_connection.setObjectName("pushButton_check_connection") + self.tabWidget.addTab(self.tab, "") + self.tab_2 = QtWidgets.QWidget() + self.tab_2.setObjectName("tab_2") + self.tabWidget.addTab(self.tab_2, "") + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) + self.menubar.setObjectName("menubar") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + self.tabWidget.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.label_host.setText(_translate("MainWindow", "Host")) + self.label_admin_user.setText(_translate("MainWindow", "Admin User")) + self.label_admin_pw.setText(_translate("MainWindow", "Admin Password")) + self.pushButton_store_credentials.setText(_translate("MainWindow", "Store Credentials")) + self.pushButton_check_connection.setText(_translate("MainWindow", "Check connection")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) + From ddab74ae0eb6680d17adeedcbe10ab8108d6e107 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Mon, 8 Aug 2016 13:49:48 +0200 Subject: [PATCH 2/8] Added database using tinyDB and populator, just copied from non-gui version --- populate_oc/GUI/DatabaseHandler.py | 30 ++++++ populate_oc/GUI/Populator.py | 142 +++++++++++++++++++++++++++++ populate_oc/GUI/oc_populator.py | 30 +++++- 3 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 populate_oc/GUI/DatabaseHandler.py create mode 100644 populate_oc/GUI/Populator.py diff --git a/populate_oc/GUI/DatabaseHandler.py b/populate_oc/GUI/DatabaseHandler.py new file mode 100644 index 0000000..41c0626 --- /dev/null +++ b/populate_oc/GUI/DatabaseHandler.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +from tinydb import TinyDB, where + +class DatabaseHandler(): + def __init__(self): + self.db = TinyDB('database.json') + self.admin_table = self.db.table('admin') + self.users_table = self.db.table('users') + + def insert_admin_values(self, login, password, host): + if (len(self.admin_table) == 0): + self.admin_table.insert({'login': login, 'password': password, 'host': host}) + else: + self.admin_table.update({'login': login, 'password': password, 'host': host}, eids=[1]) + + def insert_user(self, login, password): + self.users_table.insert({'login': login, 'password': password}) + + def get_admin_values(self): + if (len(self.admin_table) == 0): + return None + else: + return self.admin_table.all()[0] + + + +'''if __name__ == "__main__": + dbhandler = DatabaseHandler() + dbhandler.insert_admin_values('manolo', 'pp', 'localhost')''' \ No newline at end of file diff --git a/populate_oc/GUI/Populator.py b/populate_oc/GUI/Populator.py new file mode 100644 index 0000000..81839db --- /dev/null +++ b/populate_oc/GUI/Populator.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python + +from termcolor import colored +import sys +sys.path.append('../pyocclient') +import owncloud +import datetime +import random +import shutil +import os +import logging + +class Populator: + """It populates owncloud""" + + def __init__(self, host, oc_user, oc_password, number_users, number_groups): + logging.basicConfig(level=logging.ERROR) + self.logger = logging.getLogger(__name__) + self.oc = owncloud.Client(host) + self.users = {} + self.groups = [] + self.users_groups = {} + self.oc_user = oc_user + self.oc_password = oc_password + self.fill_users_array(number_users) + self.fill_groups_array(number_groups) + + def check_connection(self): + try: + self.oc.login(self.oc_user, self.oc_password) + self.oc.mkdir('testdir') + self.oc.put_file('testdir/remotefile.txt', 'localfile.txt') + link_info = self.oc.share_file_with_link('testdir/remotefile.txt') + print (colored("Here is your link: " + link_info.get_link(), 'green')) + self.oc.delete('testdir') + self.oc.logout() + except: + print (colored("Connection failed", 'red')) + + def fill_users_array(self, number): + for i in xrange(number): + current_user = 'user' + str(i) + self.users[current_user] = current_user + + def fill_groups_array(self, number): + for i in xrange(number): + current_group = 'group' + str(i) + self.groups.append(current_group) + + def create_users(self): + try: + self.oc.login(self.oc_user, self.oc_password) + for user in self.users: + self.oc.create_user(user, self.users[user]) + self.logger.info('Creating user ' + user) + self.oc.logout() + print (colored("Created users", 'green')) + except: + print (colored("Users couln't be created", 'red')) + + + def remove_users(self): + try: + self.oc.login(self.oc_user, self.oc_password) + for user in self.users: + self.oc.delete_user(user) + self.oc.logout() + print (colored("Users removed", 'green')) + except: + print (colored("Users couln't be removed", 'red')) + + def remove_groups(self): + try: + self.oc.login(self.oc_user, self.oc_password) + for group in self.groups: + self.oc.delete_group(group) + self.oc.logout() + print (colored("Groups removed", 'green')) + except: + print (colored("Groups couln't be removed", 'red')) + + def create_groups(self): + try: + self.oc.login(self.oc_user, self.oc_password) + for group in self.groups: + self.oc.create_group(group) + self.logger.info('Creating group ' + group) + self.oc.logout() + print (colored("Groups created", 'green')) + except: + print (colored("Groups couln't be created", 'red')) + + def assign_group_to_users(self): + try: + self.oc.login(self.oc_user, self.oc_password) + for user in self.users: + self.users_groups[user] = random.choice(self.groups) + self.oc.add_user_to_group(user, self.users_groups[user]) + self.oc.logout() + print (colored("Every user assigned to a group", 'green')) + except: + print (colored("Groups couln't be assigned to users", 'red')) + + def name_generator(self): + #r = random.Random(500) + one = ['AA', 'BB', 'CC', 'DD'] + two = ['ZZ', 'YY', 'XX', 'WW'] + return str(random.choice(one)) + str(random.choice(one)) +str(random.randint(1,999999)) + + + def create_deep_structure(self, user, password, depth): + self.logger.info('Creating deep structure for ' + user) + self.oc.login(user, password) + current_path = '' + for i in xrange(depth): + current_path = current_path + '/' + self.name_generator() + self.oc.mkdir(current_path) + self.oc.put_file(current_path + '/' + REMOTEFILE, LOCALFILE) + self.oc.logout() + + def create_modified_textfile(self): + new_name = self.name_generator() + '.txt' + shutil.copy2(LOCALFILE, new_name) + modified_localfile = open (new_name, 'w') + with open(new_name, "a") as modified_localfile: + modified_localfile.write(new_name) + return new_name + + def remove_modified_textfile(self, filename): + if os.path.isfile(filename): + os.remove(filename) + else: + print("Error: %s file not found" % filename) + + def upload_many_textfiles(self, user, password, number): + self.oc.login(user, password) + self.oc.mkdir(FOLDER) + for i in xrange(number): + current_filename = self.create_modified_textfile() + self.oc.put_file(FOLDER + '/' + current_filename, current_filename) + self.remove_modified_textfile(current_filename) + self.oc.logout() diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index f50ab03..f049420 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -5,6 +5,8 @@ from PyQt5.QtWidgets import * from PyQt5.QtGui import * from ui_oc_populator import Ui_MainWindow +from DatabaseHandler import DatabaseHandler +from Populator import Populator class MyApp(QMainWindow, Ui_MainWindow): parse_triggered = pyqtSignal() @@ -12,9 +14,35 @@ class MyApp(QMainWindow, Ui_MainWindow): def __init__(self, parent=None, name=None): super(MyApp, self).__init__(parent) self.setupUi(self) + self.pushButton_store_credentials.clicked.connect(self.handle_button) + self.dbhandler = DatabaseHandler() + #self.populator = Populator() + self.read_database() + self.init_populator() -if __name__ == "__main__": + def read_database(self): + self.admin_values = self.dbhandler.get_admin_values() + if (self.admin_values != None): + self.lineEdit_admin_user.setText(self.admin_values['login']) + self.lineEdit_admin_pw.setText(self.admin_values['password']) + self.lineEdit_host.setText(self.admin_values['host']) + + def init_populator(self): + if (self.admin_values != None): + self.populator = Populator(self.admin_values['host'], + self.admin_values['login'], + self.admin_values['password'], 0, 0) + def handle_button(self): + #self.label_host.setText("BUTTON CLICKED!!") + admin_user = self.lineEdit_admin_user.text() + admin_pw = self.lineEdit_admin_pw.text() + host = self.lineEdit_host.text() + self.dbhandler.insert_admin_values(admin_user, admin_pw, host) + +if __name__ == "__main__": + + app = QApplication(sys.argv) window = MyApp() window.show() From d0a5e22b20f34a4d557dcfb9cf947d5dd7efc159 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Tue, 9 Aug 2016 18:08:02 +0200 Subject: [PATCH 3/8] Started user creation tab --- populate_oc/GUI/DatabaseHandler.py | 21 ++++++--- populate_oc/GUI/Populator.py | 4 +- populate_oc/GUI/oc_populator.py | 28 +++++++++++- populate_oc/GUI/oc_populator.ui | 70 +++++++++++++++++++++++++++++- populate_oc/GUI/ui_oc_populator.py | 28 +++++++++++- 5 files changed, 138 insertions(+), 13 deletions(-) diff --git a/populate_oc/GUI/DatabaseHandler.py b/populate_oc/GUI/DatabaseHandler.py index 41c0626..0f258a4 100644 --- a/populate_oc/GUI/DatabaseHandler.py +++ b/populate_oc/GUI/DatabaseHandler.py @@ -17,14 +17,21 @@ def insert_admin_values(self, login, password, host): def insert_user(self, login, password): self.users_table.insert({'login': login, 'password': password}) + def insert_users(self, elements): + for user,password in elements: + self.users_table.insert({'login': login, 'password': password}) + + def delete_all_users(self): + self.users_table.purge() + + def get_users_values(self): + if (len(self.users_table) == 0): + return None + else: + return self.users_table.all() + def get_admin_values(self): if (len(self.admin_table) == 0): return None else: - return self.admin_table.all()[0] - - - -'''if __name__ == "__main__": - dbhandler = DatabaseHandler() - dbhandler.insert_admin_values('manolo', 'pp', 'localhost')''' \ No newline at end of file + return self.admin_table.all()[0] \ No newline at end of file diff --git a/populate_oc/GUI/Populator.py b/populate_oc/GUI/Populator.py index 81839db..93620fd 100644 --- a/populate_oc/GUI/Populator.py +++ b/populate_oc/GUI/Populator.py @@ -22,8 +22,8 @@ def __init__(self, host, oc_user, oc_password, number_users, number_groups): self.users_groups = {} self.oc_user = oc_user self.oc_password = oc_password - self.fill_users_array(number_users) - self.fill_groups_array(number_groups) + #self.fill_users_array(number_users) + #self.fill_groups_array(number_groups) def check_connection(self): try: diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index f049420..f88fe3d 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -14,10 +14,12 @@ class MyApp(QMainWindow, Ui_MainWindow): def __init__(self, parent=None, name=None): super(MyApp, self).__init__(parent) self.setupUi(self) - self.pushButton_store_credentials.clicked.connect(self.handle_button) + self.pushButton_store_credentials.clicked.connect(self.handle_button_store_credentials) + self.pushButton_create_users.clicked.connect(self.handle_button_create_users) self.dbhandler = DatabaseHandler() #self.populator = Populator() self.read_database() + self.fill_users_table() self.init_populator() def read_database(self): @@ -26,6 +28,7 @@ def read_database(self): self.lineEdit_admin_user.setText(self.admin_values['login']) self.lineEdit_admin_pw.setText(self.admin_values['password']) self.lineEdit_host.setText(self.admin_values['host']) + self.users_values = self.dbhandler.get_users_values() def init_populator(self): if (self.admin_values != None): @@ -33,13 +36,34 @@ def init_populator(self): self.admin_values['login'], self.admin_values['password'], 0, 0) - def handle_button(self): + def fill_users_table(self): + users_number = len(self.users_values) + for row_number in range(0,users_number): + print (row_number) + self.tableWidget_users.setItem(row_number, 0, QTableWidgetItem(self.users_values[row_number]['login'])) + self.tableWidget_users.setItem(row_number, 1, QTableWidgetItem(self.users_values[row_number]['password'])) + + def handle_button_store_credentials(self): #self.label_host.setText("BUTTON CLICKED!!") admin_user = self.lineEdit_admin_user.text() admin_pw = self.lineEdit_admin_pw.text() host = self.lineEdit_host.text() self.dbhandler.insert_admin_values(admin_user, admin_pw, host) + def handle_button_create_users(self): + #self.label_host.setText("BUTTON CLICKED!!") + allRows = self.tableWidget_users.rowCount() + #print ('allRows are ' + str(allRows)) + self.dbhandler.delete_all_users() + for row in range(0,allRows): + twi0 = self.tableWidget_users.item(row,0) + twi1 = self.tableWidget_users.item(row,1) + if ((twi0 != None) and (twi1 != None)): + self.dbhandler.insert_user(twi0.text(), twi1.text()) + #print (twi0.text()+' '+twi1.text()) + + #self.dbhandler.insert_admin_values(admin_user, admin_pw, host) + if __name__ == "__main__": diff --git a/populate_oc/GUI/oc_populator.ui b/populate_oc/GUI/oc_populator.ui index 7313ab4..13291cd 100644 --- a/populate_oc/GUI/oc_populator.ui +++ b/populate_oc/GUI/oc_populator.ui @@ -24,7 +24,7 @@ - 0 + 1 @@ -114,6 +114,74 @@ Tab 2 + + + + 30 + 20 + 241 + 401 + + + + + 0 + 0 + + + + 10 + + + 2 + + + + + + + + + + + + + + Username + + + + + Password + + + + + + + 80 + 430 + 113 + 32 + + + + Add row + + + + + + 290 + 340 + 171 + 81 + + + + Create users + + diff --git a/populate_oc/GUI/ui_oc_populator.py b/populate_oc/GUI/ui_oc_populator.py index 8a64150..31adc21 100644 --- a/populate_oc/GUI/ui_oc_populator.py +++ b/populate_oc/GUI/ui_oc_populator.py @@ -59,6 +59,26 @@ def setupUi(self, MainWindow): self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") + self.tableWidget_users = QtWidgets.QTableWidget(self.tab_2) + self.tableWidget_users.setGeometry(QtCore.QRect(30, 20, 241, 401)) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tableWidget_users.sizePolicy().hasHeightForWidth()) + self.tableWidget_users.setSizePolicy(sizePolicy) + self.tableWidget_users.setRowCount(10) + self.tableWidget_users.setColumnCount(2) + self.tableWidget_users.setObjectName("tableWidget_users") + item = QtWidgets.QTableWidgetItem() + self.tableWidget_users.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_users.setHorizontalHeaderItem(1, item) + self.pushButton_new_element = QtWidgets.QPushButton(self.tab_2) + self.pushButton_new_element.setGeometry(QtCore.QRect(80, 430, 113, 32)) + self.pushButton_new_element.setObjectName("pushButton_new_element") + self.pushButton_create_users = QtWidgets.QPushButton(self.tab_2) + self.pushButton_create_users.setGeometry(QtCore.QRect(290, 340, 171, 81)) + self.pushButton_create_users.setObjectName("pushButton_create_users") self.tabWidget.addTab(self.tab_2, "") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) @@ -70,7 +90,7 @@ def setupUi(self, MainWindow): MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): @@ -82,5 +102,11 @@ def retranslateUi(self, MainWindow): self.pushButton_store_credentials.setText(_translate("MainWindow", "Store Credentials")) self.pushButton_check_connection.setText(_translate("MainWindow", "Check connection")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) + item = self.tableWidget_users.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Username")) + item = self.tableWidget_users.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Password")) + self.pushButton_new_element.setText(_translate("MainWindow", "Add row")) + self.pushButton_create_users.setText(_translate("MainWindow", "Create users")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) From a7c6270a6e3f0939e16b7ca1b0d013aa80b64843 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Wed, 10 Aug 2016 11:02:34 +0200 Subject: [PATCH 4/8] Added users tab behaviour and shares part widgets --- populate_oc/GUI/oc_populator.py | 15 ++- populate_oc/GUI/oc_populator.ui | 204 ++++++++++++++++++++++++++++- populate_oc/GUI/ui_oc_populator.py | 89 ++++++++++++- 3 files changed, 293 insertions(+), 15 deletions(-) diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index f88fe3d..cd0573d 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -16,6 +16,8 @@ def __init__(self, parent=None, name=None): self.setupUi(self) self.pushButton_store_credentials.clicked.connect(self.handle_button_store_credentials) self.pushButton_create_users.clicked.connect(self.handle_button_create_users) + self.pushButton_new_element.clicked.connect(self.handle_button_add_row) + self.pushButton_new_row_shares.clicked.connect(self.handle_button_new_row_shares) self.dbhandler = DatabaseHandler() #self.populator = Populator() self.read_database() @@ -38,8 +40,9 @@ def init_populator(self): def fill_users_table(self): users_number = len(self.users_values) + self.tableWidget_users.setRowCount(users_number) + self.tableWidget_users.setColumnCount(2) for row_number in range(0,users_number): - print (row_number) self.tableWidget_users.setItem(row_number, 0, QTableWidgetItem(self.users_values[row_number]['login'])) self.tableWidget_users.setItem(row_number, 1, QTableWidgetItem(self.users_values[row_number]['password'])) @@ -59,10 +62,16 @@ def handle_button_create_users(self): twi0 = self.tableWidget_users.item(row,0) twi1 = self.tableWidget_users.item(row,1) if ((twi0 != None) and (twi1 != None)): - self.dbhandler.insert_user(twi0.text(), twi1.text()) + if ((twi0.text() != '') and (twi1.text != '')): + self.dbhandler.insert_user(twi0.text(), twi1.text()) + self.textBrowser_info.append('Created user ' + twi0.text()) #print (twi0.text()+' '+twi1.text()) - #self.dbhandler.insert_admin_values(admin_user, admin_pw, host) + def handle_button_add_row(self): + self.tableWidget_users.insertRow(self.tableWidget_users.rowCount()) + + def handle_button_new_row_shares(self): + self.tableWidget_shares.insertRow(self.tableWidget_users.rowCount()) if __name__ == "__main__": diff --git a/populate_oc/GUI/oc_populator.ui b/populate_oc/GUI/oc_populator.ui index 13291cd..33f80bd 100644 --- a/populate_oc/GUI/oc_populator.ui +++ b/populate_oc/GUI/oc_populator.ui @@ -6,7 +6,7 @@ 0 0 - 800 + 1013 600 @@ -19,16 +19,16 @@ 20 10 - 771 + 691 521 - 1 + 2 - Tab 1 + Connection @@ -112,7 +112,7 @@ - Tab 2 + Create users @@ -183,14 +183,206 @@ + + + Create shares + + + + + 30 + 20 + 441 + 401 + + + + + 0 + 0 + + + + true + + + 10 + + + 4 + + + + + + + + + + + + + + Sharer + + + + + Sharee + + + + + Path + + + + + Type + + + + + + + 480 + 350 + 171 + 81 + + + + Create shares + + + + + + 180 + 430 + 113 + 32 + + + + Add row + + + + + + + + 730 + 50 + 256 + 481 + + + + + + + + + 254 + 255 + 165 + + + + + + + 31 + 8 + 83 + + + + + + + + + 254 + 255 + 165 + + + + + + + 31 + 8 + 83 + + + + + + + + + 127 + 127 + 127 + + + + + + + 236 + 236 + 236 + + + + + + + + + + + 730 + 20 + 251 + 16 + + + + + 75 + true + false + + + + Qt::LeftToRight + + + false + + + Information + + + Qt::AlignCenter + + textBrowser_info + label_info + tabWidget 0 0 - 800 + 1013 22 diff --git a/populate_oc/GUI/ui_oc_populator.py b/populate_oc/GUI/ui_oc_populator.py index 31adc21..0bf1577 100644 --- a/populate_oc/GUI/ui_oc_populator.py +++ b/populate_oc/GUI/ui_oc_populator.py @@ -11,11 +11,11 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(800, 600) + MainWindow.resize(1013, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) - self.tabWidget.setGeometry(QtCore.QRect(20, 10, 771, 521)) + self.tabWidget.setGeometry(QtCore.QRect(20, 10, 691, 521)) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") @@ -80,9 +80,74 @@ def setupUi(self, MainWindow): self.pushButton_create_users.setGeometry(QtCore.QRect(290, 340, 171, 81)) self.pushButton_create_users.setObjectName("pushButton_create_users") self.tabWidget.addTab(self.tab_2, "") + self.tab_3 = QtWidgets.QWidget() + self.tab_3.setObjectName("tab_3") + self.tableWidget_shares = QtWidgets.QTableWidget(self.tab_3) + self.tableWidget_shares.setGeometry(QtCore.QRect(30, 20, 441, 401)) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tableWidget_shares.sizePolicy().hasHeightForWidth()) + self.tableWidget_shares.setSizePolicy(sizePolicy) + self.tableWidget_shares.setShowGrid(True) + self.tableWidget_shares.setRowCount(10) + self.tableWidget_shares.setColumnCount(4) + self.tableWidget_shares.setObjectName("tableWidget_shares") + item = QtWidgets.QTableWidgetItem() + self.tableWidget_shares.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_shares.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_shares.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_shares.setHorizontalHeaderItem(3, item) + self.pushButton_create_shares = QtWidgets.QPushButton(self.tab_3) + self.pushButton_create_shares.setGeometry(QtCore.QRect(480, 350, 171, 81)) + self.pushButton_create_shares.setObjectName("pushButton_create_shares") + self.pushButton_new_row_shares = QtWidgets.QPushButton(self.tab_3) + self.pushButton_new_row_shares.setGeometry(QtCore.QRect(180, 430, 113, 32)) + self.pushButton_new_row_shares.setObjectName("pushButton_new_row_shares") + self.tabWidget.addTab(self.tab_3, "") + self.textBrowser_info = QtWidgets.QTextBrowser(self.centralwidget) + self.textBrowser_info.setGeometry(QtCore.QRect(730, 50, 256, 481)) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(254, 255, 165)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(31, 8, 83)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(254, 255, 165)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(31, 8, 83)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(127, 127, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(236, 236, 236)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + self.textBrowser_info.setPalette(palette) + self.textBrowser_info.setObjectName("textBrowser_info") + self.label_info = QtWidgets.QLabel(self.centralwidget) + self.label_info.setGeometry(QtCore.QRect(730, 20, 251, 16)) + font = QtGui.QFont() + font.setBold(True) + font.setUnderline(False) + font.setWeight(75) + self.label_info.setFont(font) + self.label_info.setLayoutDirection(QtCore.Qt.LeftToRight) + self.label_info.setAutoFillBackground(False) + self.label_info.setAlignment(QtCore.Qt.AlignCenter) + self.label_info.setObjectName("label_info") + self.textBrowser_info.raise_() + self.label_info.raise_() + self.tabWidget.raise_() MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1013, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) @@ -90,7 +155,7 @@ def setupUi(self, MainWindow): MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) - self.tabWidget.setCurrentIndex(1) + self.tabWidget.setCurrentIndex(2) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): @@ -101,12 +166,24 @@ def retranslateUi(self, MainWindow): self.label_admin_pw.setText(_translate("MainWindow", "Admin Password")) self.pushButton_store_credentials.setText(_translate("MainWindow", "Store Credentials")) self.pushButton_check_connection.setText(_translate("MainWindow", "Check connection")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Connection")) item = self.tableWidget_users.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Username")) item = self.tableWidget_users.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Password")) self.pushButton_new_element.setText(_translate("MainWindow", "Add row")) self.pushButton_create_users.setText(_translate("MainWindow", "Create users")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Create users")) + item = self.tableWidget_shares.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "Sharer")) + item = self.tableWidget_shares.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "Sharee")) + item = self.tableWidget_shares.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "Path")) + item = self.tableWidget_shares.horizontalHeaderItem(3) + item.setText(_translate("MainWindow", "Type")) + self.pushButton_create_shares.setText(_translate("MainWindow", "Create shares")) + self.pushButton_new_row_shares.setText(_translate("MainWindow", "Add row")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Create shares")) + self.label_info.setText(_translate("MainWindow", "Information")) From 700a5b3f0cfab4b421f9136928281e9cf8734016 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Wed, 10 Aug 2016 13:57:41 +0200 Subject: [PATCH 5/8] Making check connection works --- populate_oc/GUI/Populator.py | 8 ++++++++ populate_oc/GUI/oc_populator.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/populate_oc/GUI/Populator.py b/populate_oc/GUI/Populator.py index 93620fd..47b2b48 100644 --- a/populate_oc/GUI/Populator.py +++ b/populate_oc/GUI/Populator.py @@ -25,6 +25,7 @@ def __init__(self, host, oc_user, oc_password, number_users, number_groups): #self.fill_users_array(number_users) #self.fill_groups_array(number_groups) + ''' def check_connection(self): try: self.oc.login(self.oc_user, self.oc_password) @@ -36,6 +37,13 @@ def check_connection(self): self.oc.logout() except: print (colored("Connection failed", 'red')) + ''' + + def check_connection(self): + try: + self.oc.login(self.oc_user, self.oc_password) + except HTTPResponseError as e: + raise e def fill_users_array(self, number): for i in xrange(number): diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index cd0573d..88578e4 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -18,6 +18,7 @@ def __init__(self, parent=None, name=None): self.pushButton_create_users.clicked.connect(self.handle_button_create_users) self.pushButton_new_element.clicked.connect(self.handle_button_add_row) self.pushButton_new_row_shares.clicked.connect(self.handle_button_new_row_shares) + self.pushButton_check_connection.clicked.connect(self.handle_button_check_connection) self.dbhandler = DatabaseHandler() #self.populator = Populator() self.read_database() @@ -46,6 +47,17 @@ def fill_users_table(self): self.tableWidget_users.setItem(row_number, 0, QTableWidgetItem(self.users_values[row_number]['login'])) self.tableWidget_users.setItem(row_number, 1, QTableWidgetItem(self.users_values[row_number]['password'])) + def show_info(self, text, color='lightYellow'): + destination = self.textBrowser_info + destination.setTextColor(QColor(color)) + destination.append(text) + + def show_info_red(self, text): + self.show_info(text, 'red') + + def show_info_green(self, text): + self.show_info(text, 'lightGreen') + def handle_button_store_credentials(self): #self.label_host.setText("BUTTON CLICKED!!") admin_user = self.lineEdit_admin_user.text() @@ -73,6 +85,14 @@ def handle_button_add_row(self): def handle_button_new_row_shares(self): self.tableWidget_shares.insertRow(self.tableWidget_users.rowCount()) + def handle_button_check_connection(self): + try: + self.populator.check_connection() + except: + self.show_info_red('Connection failed') + else: + self.show_info_green('Connection works!') + if __name__ == "__main__": From 553b5718726ed02586a2ded0b0e8044d9ce33d2d Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Wed, 10 Aug 2016 18:48:18 +0200 Subject: [PATCH 6/8] Improved creation of users, it is showing failing lies --- populate_oc/GUI/Populator.py | 20 +++ populate_oc/GUI/oc_populator.py | 41 ++++++- populate_oc/GUI/oc_populator.ui | 190 ++++++++++++++++++++++++++++- populate_oc/GUI/ui_oc_populator.py | 76 +++++++++++- 4 files changed, 313 insertions(+), 14 deletions(-) diff --git a/populate_oc/GUI/Populator.py b/populate_oc/GUI/Populator.py index 47b2b48..19e98da 100644 --- a/populate_oc/GUI/Populator.py +++ b/populate_oc/GUI/Populator.py @@ -55,6 +55,26 @@ def fill_groups_array(self, number): current_group = 'group' + str(i) self.groups.append(current_group) + def pop_create_user(self, login, password): + self.oc.login(self.oc_user, self.oc_password) + self.oc.create_user(login, password) + self.logger.info('Creating user ' + user) + self.oc.logout() + + def pop_delete_user(self, login): + self.oc.login(self.oc_user, self.oc_password) + self.oc.delete_user(login) + self.logger.info('Deleting user ' + user) + self.oc.logout() + + def pop_upload_file(self, login, password): + self.oc.login(login, password) + current_path = '' + REMOTEFILE = 'prueba.txt' + LOCALFILE = '/tmp/prueba.txt' + self.oc.put_file(current_path + '/' + REMOTEFILE, LOCALFILE) + self.oc.logout() + def create_users(self): try: self.oc.login(self.oc_user, self.oc_password) diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index 88578e4..b91b8d1 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -15,7 +15,9 @@ def __init__(self, parent=None, name=None): super(MyApp, self).__init__(parent) self.setupUi(self) self.pushButton_store_credentials.clicked.connect(self.handle_button_store_credentials) + self.pushButton_store_users.clicked.connect(self.handle_button_store_users) self.pushButton_create_users.clicked.connect(self.handle_button_create_users) + self.pushButton_delete_users.clicked.connect(self.handle_button_delete_users) self.pushButton_new_element.clicked.connect(self.handle_button_add_row) self.pushButton_new_row_shares.clicked.connect(self.handle_button_new_row_shares) self.pushButton_check_connection.clicked.connect(self.handle_button_check_connection) @@ -59,16 +61,16 @@ def show_info_green(self, text): self.show_info(text, 'lightGreen') def handle_button_store_credentials(self): - #self.label_host.setText("BUTTON CLICKED!!") admin_user = self.lineEdit_admin_user.text() admin_pw = self.lineEdit_admin_pw.text() host = self.lineEdit_host.text() self.dbhandler.insert_admin_values(admin_user, admin_pw, host) + self.admin_values = self.dbhandler.get_admin_values() + self.show_info(str(self.admin_values) + " Stored") + self.init_populator() - def handle_button_create_users(self): - #self.label_host.setText("BUTTON CLICKED!!") + def handle_button_store_users(self): allRows = self.tableWidget_users.rowCount() - #print ('allRows are ' + str(allRows)) self.dbhandler.delete_all_users() for row in range(0,allRows): twi0 = self.tableWidget_users.item(row,0) @@ -76,8 +78,35 @@ def handle_button_create_users(self): if ((twi0 != None) and (twi1 != None)): if ((twi0.text() != '') and (twi1.text != '')): self.dbhandler.insert_user(twi0.text(), twi1.text()) - self.textBrowser_info.append('Created user ' + twi0.text()) - #print (twi0.text()+' '+twi1.text()) + self.show_info('Users stored in database') + + def handle_button_create_users(self): + self.create_users() + + def handle_button_delete_users(self): + self.delete_users() + + def create_users(self): + self.users_values = self.dbhandler.get_users_values() + for user in self.users_values: + try: + self.populator.pop_create_user(user['login'],user['password']) + except Exception as e: + print (str(e)) + self.show_info_red('user ' + str(user['login']) + ' creation failed') + else: + self.show_info_green('Created user ' + str(user['login'])) + + def delete_users(self): + self.users_values = self.dbhandler.get_users_values() + for user in self.users_values: + try: + self.populator.pop_delete_user(user['login']) + except Exception as e: + print (str(e)) + self.show_info_red('user ' + str(user['login']) + ' deletion failed') + else: + self.show_info_green('Deleted user ' + str(user['login'])) def handle_button_add_row(self): self.tableWidget_users.insertRow(self.tableWidget_users.rowCount()) diff --git a/populate_oc/GUI/oc_populator.ui b/populate_oc/GUI/oc_populator.ui index 33f80bd..4191c65 100644 --- a/populate_oc/GUI/oc_populator.ui +++ b/populate_oc/GUI/oc_populator.ui @@ -11,7 +11,7 @@ - MainWindow + ownCloud Populator @@ -23,8 +23,14 @@ 521 + + QTabWidget::North + + + QTabWidget::Rounded + - 2 + 0 @@ -172,16 +178,190 @@ - 290 - 340 + 280 + 60 171 - 81 + 31 Create users + + + + 280 + 20 + 171 + 31 + + + + Store users + + + + + + 280 + 100 + 171 + 31 + + + + Delete users + + + + + + Files and Folders + + + + + 90 + 70 + 401 + 161 + + + + 4 + + + 123 + + + + + + + + User + + + + + File Path Origin + + + + + File Path Destination + + + + + + + 510 + 100 + 121 + 31 + + + + Upload files + + + + + + 510 + 70 + 121 + 31 + + + + Store uploads + + + + + + 210 + 240 + 161 + 31 + + + + Add row + + + + + + 90 + 280 + 281 + 161 + + + + 4 + + + 123 + + + + + + + + User + + + + + New folder + + + + + + + 210 + 450 + 161 + 31 + + + + Add row + + + + + + 380 + 280 + 121 + 31 + + + + Store folders + + + + + + 380 + 310 + 121 + 31 + + + + Create folders + + diff --git a/populate_oc/GUI/ui_oc_populator.py b/populate_oc/GUI/ui_oc_populator.py index 0bf1577..041e5f2 100644 --- a/populate_oc/GUI/ui_oc_populator.py +++ b/populate_oc/GUI/ui_oc_populator.py @@ -16,6 +16,8 @@ def setupUi(self, MainWindow): self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QtCore.QRect(20, 10, 691, 521)) + self.tabWidget.setTabPosition(QtWidgets.QTabWidget.North) + self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") @@ -77,9 +79,58 @@ def setupUi(self, MainWindow): self.pushButton_new_element.setGeometry(QtCore.QRect(80, 430, 113, 32)) self.pushButton_new_element.setObjectName("pushButton_new_element") self.pushButton_create_users = QtWidgets.QPushButton(self.tab_2) - self.pushButton_create_users.setGeometry(QtCore.QRect(290, 340, 171, 81)) + self.pushButton_create_users.setGeometry(QtCore.QRect(280, 60, 171, 31)) self.pushButton_create_users.setObjectName("pushButton_create_users") + self.pushButton_store_users = QtWidgets.QPushButton(self.tab_2) + self.pushButton_store_users.setGeometry(QtCore.QRect(280, 20, 171, 31)) + self.pushButton_store_users.setObjectName("pushButton_store_users") + self.pushButton_delete_users = QtWidgets.QPushButton(self.tab_2) + self.pushButton_delete_users.setGeometry(QtCore.QRect(280, 100, 171, 31)) + self.pushButton_delete_users.setObjectName("pushButton_delete_users") self.tabWidget.addTab(self.tab_2, "") + self.tab_4 = QtWidgets.QWidget() + self.tab_4.setObjectName("tab_4") + self.tableWidget_files = QtWidgets.QTableWidget(self.tab_4) + self.tableWidget_files.setGeometry(QtCore.QRect(90, 70, 401, 161)) + self.tableWidget_files.setRowCount(4) + self.tableWidget_files.setObjectName("tableWidget_files") + self.tableWidget_files.setColumnCount(3) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_files.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_files.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_files.setHorizontalHeaderItem(2, item) + self.tableWidget_files.horizontalHeader().setDefaultSectionSize(123) + self.pushButton_upload_files = QtWidgets.QPushButton(self.tab_4) + self.pushButton_upload_files.setGeometry(QtCore.QRect(510, 100, 121, 31)) + self.pushButton_upload_files.setObjectName("pushButton_upload_files") + self.pushButton_store_files = QtWidgets.QPushButton(self.tab_4) + self.pushButton_store_files.setGeometry(QtCore.QRect(510, 70, 121, 31)) + self.pushButton_store_files.setObjectName("pushButton_store_files") + self.pushButton_add_row_files = QtWidgets.QPushButton(self.tab_4) + self.pushButton_add_row_files.setGeometry(QtCore.QRect(210, 240, 161, 31)) + self.pushButton_add_row_files.setObjectName("pushButton_add_row_files") + self.tableWidget_folders = QtWidgets.QTableWidget(self.tab_4) + self.tableWidget_folders.setGeometry(QtCore.QRect(90, 280, 281, 161)) + self.tableWidget_folders.setRowCount(4) + self.tableWidget_folders.setObjectName("tableWidget_folders") + self.tableWidget_folders.setColumnCount(2) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_folders.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget_folders.setHorizontalHeaderItem(1, item) + self.tableWidget_folders.horizontalHeader().setDefaultSectionSize(123) + self.pushButton_add_row_folders = QtWidgets.QPushButton(self.tab_4) + self.pushButton_add_row_folders.setGeometry(QtCore.QRect(210, 450, 161, 31)) + self.pushButton_add_row_folders.setObjectName("pushButton_add_row_folders") + self.pushButton_store_folders = QtWidgets.QPushButton(self.tab_4) + self.pushButton_store_folders.setGeometry(QtCore.QRect(380, 280, 121, 31)) + self.pushButton_store_folders.setObjectName("pushButton_store_folders") + self.pushButton_create_folders = QtWidgets.QPushButton(self.tab_4) + self.pushButton_create_folders.setGeometry(QtCore.QRect(380, 310, 121, 31)) + self.pushButton_create_folders.setObjectName("pushButton_create_folders") + self.tabWidget.addTab(self.tab_4, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.tableWidget_shares = QtWidgets.QTableWidget(self.tab_3) @@ -155,12 +206,12 @@ def setupUi(self, MainWindow): MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) - self.tabWidget.setCurrentIndex(2) + self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + MainWindow.setWindowTitle(_translate("MainWindow", "ownCloud Populator")) self.label_host.setText(_translate("MainWindow", "Host")) self.label_admin_user.setText(_translate("MainWindow", "Admin User")) self.label_admin_pw.setText(_translate("MainWindow", "Admin Password")) @@ -173,7 +224,26 @@ def retranslateUi(self, MainWindow): item.setText(_translate("MainWindow", "Password")) self.pushButton_new_element.setText(_translate("MainWindow", "Add row")) self.pushButton_create_users.setText(_translate("MainWindow", "Create users")) + self.pushButton_store_users.setText(_translate("MainWindow", "Store users")) + self.pushButton_delete_users.setText(_translate("MainWindow", "Delete users")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Create users")) + item = self.tableWidget_files.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "User")) + item = self.tableWidget_files.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "File Path Origin")) + item = self.tableWidget_files.horizontalHeaderItem(2) + item.setText(_translate("MainWindow", "File Path Destination")) + self.pushButton_upload_files.setText(_translate("MainWindow", "Upload files")) + self.pushButton_store_files.setText(_translate("MainWindow", "Store uploads")) + self.pushButton_add_row_files.setText(_translate("MainWindow", "Add row")) + item = self.tableWidget_folders.horizontalHeaderItem(0) + item.setText(_translate("MainWindow", "User")) + item = self.tableWidget_folders.horizontalHeaderItem(1) + item.setText(_translate("MainWindow", "New folder")) + self.pushButton_add_row_folders.setText(_translate("MainWindow", "Add row")) + self.pushButton_store_folders.setText(_translate("MainWindow", "Store folders")) + self.pushButton_create_folders.setText(_translate("MainWindow", "Create folders")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "Files and Folders")) item = self.tableWidget_shares.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Sharer")) item = self.tableWidget_shares.horizontalHeaderItem(1) From 455503dbb2502d6460c78304a611d479b8e43556 Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Thu, 11 Aug 2016 12:42:56 +0200 Subject: [PATCH 7/8] Added support for files, folders and shares --- populate_oc/GUI/DatabaseHandler.py | 50 ++++++++++ populate_oc/GUI/Populator.py | 24 +++-- populate_oc/GUI/oc_populator.py | 149 ++++++++++++++++++++++++++++- populate_oc/GUI/oc_populator.ui | 43 ++++++--- populate_oc/GUI/ui_oc_populator.py | 18 ++-- 5 files changed, 250 insertions(+), 34 deletions(-) diff --git a/populate_oc/GUI/DatabaseHandler.py b/populate_oc/GUI/DatabaseHandler.py index 0f258a4..5d509e7 100644 --- a/populate_oc/GUI/DatabaseHandler.py +++ b/populate_oc/GUI/DatabaseHandler.py @@ -7,6 +7,9 @@ def __init__(self): self.db = TinyDB('database.json') self.admin_table = self.db.table('admin') self.users_table = self.db.table('users') + self.files_table = self.db.table('files') + self.folders_table = self.db.table('folders') + self.shares_table = self.db.table('shares') def insert_admin_values(self, login, password, host): if (len(self.admin_table) == 0): @@ -17,19 +20,66 @@ def insert_admin_values(self, login, password, host): def insert_user(self, login, password): self.users_table.insert({'login': login, 'password': password}) + def get_user_password(self, login): + return self.users_table.search(where('login') == login)[0]['password'] + def insert_users(self, elements): for user,password in elements: self.users_table.insert({'login': login, 'password': password}) + def insert_file(self, user, path, destination): + self.files_table.insert({'user': user, 'path':path, 'destination':destination}) + + def insert_files(self, elements): + for user, path, destination in elements: + self.files_table.insert({'user': user, 'path':path, 'destination':destination}) + + def insert_folder(self, user, destination): + self.folders_table.insert({'user': user, 'destination': destination}) + + def insert_folders(self, elements): + for user, path, destination in elements: + self.folders_table.insert({'user': user, 'destination': destination}) + + def insert_share(self, sharer, sharee, path, share_type): + self.shares_table.insert({'sharer': sharer, 'sharee': sharee, 'path':path, 'share_type':share_type }) + def delete_all_users(self): self.users_table.purge() + def delete_all_files(self): + self.files_table.purge() + + def delete_all_folders(self): + self.folders_table.purge() + + def delete_all_shares(self): + self.shares_table.purge() + def get_users_values(self): if (len(self.users_table) == 0): return None else: return self.users_table.all() + def get_files_values(self): + if (len(self.files_table) == 0): + return None + else: + return self.files_table.all() + + def get_folders_values(self): + if (len(self.folders_table) == 0): + return None + else: + return self.folders_table.all() + + def get_shares_values(self): + if (len(self.shares_table) == 0): + return None + else: + return self.shares_table.all() + def get_admin_values(self): if (len(self.admin_table) == 0): return None diff --git a/populate_oc/GUI/Populator.py b/populate_oc/GUI/Populator.py index 19e98da..9f1840d 100644 --- a/populate_oc/GUI/Populator.py +++ b/populate_oc/GUI/Populator.py @@ -58,21 +58,31 @@ def fill_groups_array(self, number): def pop_create_user(self, login, password): self.oc.login(self.oc_user, self.oc_password) self.oc.create_user(login, password) - self.logger.info('Creating user ' + user) + self.logger.info('Creating user ' + login) self.oc.logout() def pop_delete_user(self, login): self.oc.login(self.oc_user, self.oc_password) self.oc.delete_user(login) - self.logger.info('Deleting user ' + user) + self.logger.info('Deleting user ' + login) self.oc.logout() - def pop_upload_file(self, login, password): + def pop_upload_file(self, login, password, path, destination): self.oc.login(login, password) - current_path = '' - REMOTEFILE = 'prueba.txt' - LOCALFILE = '/tmp/prueba.txt' - self.oc.put_file(current_path + '/' + REMOTEFILE, LOCALFILE) + self.oc.put_file(destination, path) + self.oc.logout() + + def pop_create_folder(self, login, password, destination): + self.oc.login(login, password) + self.oc.mkdir(destination) + self.oc.logout() + + def pop_share_file(self, login, password, sharee, path, share_type): + self.oc.login(login, password) + if (share_type == '1'): + self.oc.share_file_with_user(path, sharee) + elif (share_type == '3'): + self.oc.share_file_with_link(path) self.oc.logout() def create_users(self): diff --git a/populate_oc/GUI/oc_populator.py b/populate_oc/GUI/oc_populator.py index b91b8d1..ef4338d 100644 --- a/populate_oc/GUI/oc_populator.py +++ b/populate_oc/GUI/oc_populator.py @@ -19,12 +19,23 @@ def __init__(self, parent=None, name=None): self.pushButton_create_users.clicked.connect(self.handle_button_create_users) self.pushButton_delete_users.clicked.connect(self.handle_button_delete_users) self.pushButton_new_element.clicked.connect(self.handle_button_add_row) - self.pushButton_new_row_shares.clicked.connect(self.handle_button_new_row_shares) self.pushButton_check_connection.clicked.connect(self.handle_button_check_connection) + self.pushButton_add_row_files.clicked.connect(lambda: self.handle_button_add_row_generico(self.tableWidget_files)) + self.pushButton_add_row_folders.clicked.connect(lambda: self.handle_button_add_row_generico(self.tableWidget_folders)) + self.pushButton_new_row_shares.clicked.connect(lambda: self.handle_button_add_row_generico(self.tableWidget_shares)) + self.pushButton_store_files.clicked.connect(self.handle_button_store_files) + self.pushButton_store_folders.clicked.connect(self.handle_button_store_folders) + self.pushButton_upload_files.clicked.connect(self.handle_button_upload_files) + self.pushButton_create_folders.clicked.connect(self.handle_button_create_folders) + self.pushButton_store_shares.clicked.connect(self.handle_button_store_shares) + self.pushButton_create_shares.clicked.connect(self.handle_button_create_shares) self.dbhandler = DatabaseHandler() #self.populator = Populator() self.read_database() self.fill_users_table() + self.fill_files_table() + self.fill_folders_table() + self.fill_shares_table() self.init_populator() def read_database(self): @@ -34,6 +45,10 @@ def read_database(self): self.lineEdit_admin_pw.setText(self.admin_values['password']) self.lineEdit_host.setText(self.admin_values['host']) self.users_values = self.dbhandler.get_users_values() + self.files_values = self.dbhandler.get_files_values() + self.folders_values = self.dbhandler.get_folders_values() + self.shares_values = self.dbhandler.get_shares_values() + def init_populator(self): if (self.admin_values != None): @@ -42,13 +57,52 @@ def init_populator(self): self.admin_values['password'], 0, 0) def fill_users_table(self): - users_number = len(self.users_values) + try: + users_number = len(self.users_values) + except: + return self.tableWidget_users.setRowCount(users_number) self.tableWidget_users.setColumnCount(2) for row_number in range(0,users_number): self.tableWidget_users.setItem(row_number, 0, QTableWidgetItem(self.users_values[row_number]['login'])) self.tableWidget_users.setItem(row_number, 1, QTableWidgetItem(self.users_values[row_number]['password'])) + def fill_files_table(self): + try: + files_number = len(self.files_values) + except: + return + self.tableWidget_files.setRowCount(files_number) + self.tableWidget_files.setColumnCount(3) + for row_number in range(0,files_number): + self.tableWidget_files.setItem(row_number, 0, QTableWidgetItem(self.files_values[row_number]['user'])) + self.tableWidget_files.setItem(row_number, 1, QTableWidgetItem(self.files_values[row_number]['path'])) + self.tableWidget_files.setItem(row_number, 2, QTableWidgetItem(self.files_values[row_number]['destination'])) + + def fill_folders_table(self): + try: + folders_number = len(self.folders_values) + except: + return + self.tableWidget_folders.setRowCount(folders_number) + self.tableWidget_folders.setColumnCount(2) + for row_number in range(0,folders_number): + self.tableWidget_folders.setItem(row_number, 0, QTableWidgetItem(self.folders_values[row_number]['user'])) + self.tableWidget_folders.setItem(row_number, 1, QTableWidgetItem(self.folders_values[row_number]['destination'])) + + def fill_shares_table(self): + try: + shares_number = len(self.shares_values) + except: + return + self.tableWidget_shares.setRowCount(shares_number) + self.tableWidget_shares.setColumnCount(4) + for row_number in range(0, shares_number): + self.tableWidget_shares.setItem(row_number, 0, QTableWidgetItem(self.shares_values[row_number]['sharer'])) + self.tableWidget_shares.setItem(row_number, 1, QTableWidgetItem(self.shares_values[row_number]['sharee'])) + self.tableWidget_shares.setItem(row_number, 2, QTableWidgetItem(self.shares_values[row_number]['path'])) + self.tableWidget_shares.setItem(row_number, 3, QTableWidgetItem(self.shares_values[row_number]['share_type'])) + def show_info(self, text, color='lightYellow'): destination = self.textBrowser_info destination.setTextColor(QColor(color)) @@ -80,6 +134,91 @@ def handle_button_store_users(self): self.dbhandler.insert_user(twi0.text(), twi1.text()) self.show_info('Users stored in database') + def handle_button_store_files(self): + allRows = self.tableWidget_files.rowCount() + self.dbhandler.delete_all_files() + for row in range(0,allRows): + twi0 = self.tableWidget_files.item(row,0) + twi1 = self.tableWidget_files.item(row,1) + twi2 = self.tableWidget_files.item(row,2) + if ((twi0 != None) and (twi1 != None) and (twi2 != None)): + if ((twi0.text() != '') and (twi1.text != '') and (twi2.text != '')): + self.dbhandler.insert_file(twi0.text(), twi1.text(), twi2.text()) + self.show_info('Files to upload stored in database') + + def handle_button_store_folders(self): + allRows = self.tableWidget_folders.rowCount() + self.dbhandler.delete_all_folders() + for row in range(0,allRows): + twi0 = self.tableWidget_folders.item(row,0) + twi1 = self.tableWidget_folders.item(row,1) + if ((twi0 != None) and (twi1 != None)): + if ((twi0.text() != '') and (twi1.text != '')): + self.dbhandler.insert_folder(twi0.text(), twi1.text()) + self.show_info('Folders to create stored in database') + + def handle_button_store_shares(self): + allRows = self.tableWidget_shares.rowCount() + self.dbhandler.delete_all_shares() + for row in range(0,allRows): + twi0 = self.tableWidget_shares.item(row,0) + twi1 = self.tableWidget_shares.item(row,1) + twi2 = self.tableWidget_shares.item(row,2) + twi3 = self.tableWidget_shares.item(row,3) + if ((twi0 != None) and (twi1 != None) and (twi2 != None) and (twi3 != None)): + if ((twi0.text() != '') and (twi2.text != '') and (twi3.text != '')): + self.dbhandler.insert_share(twi0.text(), twi1.text(), twi2.text(), twi3.text()) + self.show_info('Shares to create stored in database') + + def handle_button_upload_files(self): + self.upload_files() + + def upload_files(self): + self.files_values = self.dbhandler.get_files_values() + for file in self.files_values: + try: + passwd = self.dbhandler.get_user_password(file['user']) + self.populator.pop_upload_file(file['user'], passwd, file['path'], file['destination']) + except Exception as e: + print (str(e)) + self.show_info_red('Upload of' + str(file['path']) + ' failed') + else: + self.show_info_green('Upload of ' + str(file['path']) + ' succeed') + + def handle_button_create_folders(self): + self.create_folders() + + def create_folders(self): + self.folders_values = self.dbhandler.get_folders_values() + for folder in self.folders_values: + try: + passwd = self.dbhandler.get_user_password(folder['user']) + self.populator.pop_create_folder(folder['user'], passwd, folder['destination']) + except Exception as e: + print (str(e)) + self.show_info_red('Creation of ' + str(folder['destination']) + ' failed') + else: + self.show_info_green('Creation of ' + str(folder['destination']) + ' succeed') + + def handle_button_create_shares(self): + self.create_shares() + + def create_shares(self): + self.shares_values = self.dbhandler.get_shares_values() + for share in self.shares_values: + try: + passwd = self.dbhandler.get_user_password(share['sharer']) + self.populator.pop_share_file(share['sharer'], + passwd, + share['sharee'], + share['path'], + share['share_type']) + except Exception as e: + print (str(e)) + self.show_info_red('Sharing ' + str(share['path']) + ' failed') + else: + self.show_info_green('Sharing ' + str(share['path']) + ' succeed') + def handle_button_create_users(self): self.create_users() @@ -108,12 +247,12 @@ def delete_users(self): else: self.show_info_green('Deleted user ' + str(user['login'])) + def handle_button_add_row_generico(self, tablewidget): + tablewidget.insertRow(tablewidget.rowCount()) + def handle_button_add_row(self): self.tableWidget_users.insertRow(self.tableWidget_users.rowCount()) - def handle_button_new_row_shares(self): - self.tableWidget_shares.insertRow(self.tableWidget_users.rowCount()) - def handle_button_check_connection(self): try: self.populator.check_connection() diff --git a/populate_oc/GUI/oc_populator.ui b/populate_oc/GUI/oc_populator.ui index 4191c65..b64d5f2 100644 --- a/populate_oc/GUI/oc_populator.ui +++ b/populate_oc/GUI/oc_populator.ui @@ -30,7 +30,7 @@ QTabWidget::Rounded - 0 + 3 @@ -41,7 +41,7 @@ 79 56 - 251 + 361 141 @@ -89,10 +89,10 @@ - 50 - 220 + 80 + 210 171 - 51 + 31 @@ -102,10 +102,10 @@ - 220 - 220 + 270 + 210 171 - 51 + 31 @@ -222,9 +222,9 @@ - 90 + 20 70 - 401 + 481 161 @@ -232,7 +232,7 @@ 4 - 123 + 147 @@ -425,10 +425,10 @@ - 480 - 350 - 171 - 81 + 500 + 110 + 141 + 31 @@ -448,6 +448,19 @@ Add row + + + + 500 + 70 + 141 + 31 + + + + Store shares + + diff --git a/populate_oc/GUI/ui_oc_populator.py b/populate_oc/GUI/ui_oc_populator.py index 041e5f2..7db4854 100644 --- a/populate_oc/GUI/ui_oc_populator.py +++ b/populate_oc/GUI/ui_oc_populator.py @@ -22,7 +22,7 @@ def setupUi(self, MainWindow): self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.horizontalLayoutWidget = QtWidgets.QWidget(self.tab) - self.horizontalLayoutWidget.setGeometry(QtCore.QRect(79, 56, 251, 141)) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(79, 56, 361, 141)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) @@ -52,10 +52,10 @@ def setupUi(self, MainWindow): self.verticalLayout.addWidget(self.lineEdit_admin_pw) self.horizontalLayout.addLayout(self.verticalLayout) self.pushButton_store_credentials = QtWidgets.QPushButton(self.tab) - self.pushButton_store_credentials.setGeometry(QtCore.QRect(50, 220, 171, 51)) + self.pushButton_store_credentials.setGeometry(QtCore.QRect(80, 210, 171, 31)) self.pushButton_store_credentials.setObjectName("pushButton_store_credentials") self.pushButton_check_connection = QtWidgets.QPushButton(self.tab) - self.pushButton_check_connection.setGeometry(QtCore.QRect(220, 220, 171, 51)) + self.pushButton_check_connection.setGeometry(QtCore.QRect(270, 210, 171, 31)) self.pushButton_check_connection.setToolTipDuration(9) self.pushButton_check_connection.setObjectName("pushButton_check_connection") self.tabWidget.addTab(self.tab, "") @@ -91,7 +91,7 @@ def setupUi(self, MainWindow): self.tab_4 = QtWidgets.QWidget() self.tab_4.setObjectName("tab_4") self.tableWidget_files = QtWidgets.QTableWidget(self.tab_4) - self.tableWidget_files.setGeometry(QtCore.QRect(90, 70, 401, 161)) + self.tableWidget_files.setGeometry(QtCore.QRect(20, 70, 481, 161)) self.tableWidget_files.setRowCount(4) self.tableWidget_files.setObjectName("tableWidget_files") self.tableWidget_files.setColumnCount(3) @@ -101,7 +101,7 @@ def setupUi(self, MainWindow): self.tableWidget_files.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.tableWidget_files.setHorizontalHeaderItem(2, item) - self.tableWidget_files.horizontalHeader().setDefaultSectionSize(123) + self.tableWidget_files.horizontalHeader().setDefaultSectionSize(147) self.pushButton_upload_files = QtWidgets.QPushButton(self.tab_4) self.pushButton_upload_files.setGeometry(QtCore.QRect(510, 100, 121, 31)) self.pushButton_upload_files.setObjectName("pushButton_upload_files") @@ -153,11 +153,14 @@ def setupUi(self, MainWindow): item = QtWidgets.QTableWidgetItem() self.tableWidget_shares.setHorizontalHeaderItem(3, item) self.pushButton_create_shares = QtWidgets.QPushButton(self.tab_3) - self.pushButton_create_shares.setGeometry(QtCore.QRect(480, 350, 171, 81)) + self.pushButton_create_shares.setGeometry(QtCore.QRect(500, 110, 141, 31)) self.pushButton_create_shares.setObjectName("pushButton_create_shares") self.pushButton_new_row_shares = QtWidgets.QPushButton(self.tab_3) self.pushButton_new_row_shares.setGeometry(QtCore.QRect(180, 430, 113, 32)) self.pushButton_new_row_shares.setObjectName("pushButton_new_row_shares") + self.pushButton_store_shares = QtWidgets.QPushButton(self.tab_3) + self.pushButton_store_shares.setGeometry(QtCore.QRect(500, 70, 141, 31)) + self.pushButton_store_shares.setObjectName("pushButton_store_shares") self.tabWidget.addTab(self.tab_3, "") self.textBrowser_info = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser_info.setGeometry(QtCore.QRect(730, 50, 256, 481)) @@ -206,7 +209,7 @@ def setupUi(self, MainWindow): MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(3) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): @@ -254,6 +257,7 @@ def retranslateUi(self, MainWindow): item.setText(_translate("MainWindow", "Type")) self.pushButton_create_shares.setText(_translate("MainWindow", "Create shares")) self.pushButton_new_row_shares.setText(_translate("MainWindow", "Add row")) + self.pushButton_store_shares.setText(_translate("MainWindow", "Store shares")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Create shares")) self.label_info.setText(_translate("MainWindow", "Information")) From fd03e2882c9c48c29b95f5d1668d4eaaf367b69e Mon Sep 17 00:00:00 2001 From: SergioBertolinSG Date: Thu, 11 Aug 2016 12:50:38 +0200 Subject: [PATCH 8/8] Added requirements --- populate_oc/GUI/Readme.md | 13 ++++++------- populate_oc/GUI/requirements.txt | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 populate_oc/GUI/requirements.txt diff --git a/populate_oc/GUI/Readme.md b/populate_oc/GUI/Readme.md index 0cb5a2f..6c257b1 100644 --- a/populate_oc/GUI/Readme.md +++ b/populate_oc/GUI/Readme.md @@ -2,24 +2,23 @@ This requires python3, pyqt5 and Qt creator to modify the interface. Install steps required (OS X): - -*** -TO DO + xcode-select --install brew install python3 -pip3 install pyqt5 -*** +pip3 install -r requirements.txt + +**Development** To compile .ui files do ``` pyuic5 -o ui_oc_populator.py oc_populator.ui ``` -To run do +**Use** ``` -python3 oc_populator.py +python3 oc_populator.py & ``` diff --git a/populate_oc/GUI/requirements.txt b/populate_oc/GUI/requirements.txt new file mode 100644 index 0000000..79610b4 --- /dev/null +++ b/populate_oc/GUI/requirements.txt @@ -0,0 +1,15 @@ +get==0.0.13 +linecache2==1.0.0 +post==0.0.8 +public==0.0.34 +PyQt5==5.7 +query-string==0.0.8 +request==0.0.8 +requests==2.11.0 +sip==4.18.1 +six==1.10.0 +termcolor==1.1.0 +tinydb==3.2.1 +traceback2==1.4.0 +unittest-data-provider==1.0.1 +unittest2==1.1.0