From 318d571c240ec19be0fad9b2415f12a529d7ea46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BF=D0=B8=D1=80=D0=B8=D0=B4=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=94=D0=B5=D0=BD=D0=B8=D1=81?= Date: Thu, 12 Jan 2012 09:53:12 +0400 Subject: [PATCH] Edit left menu, add interaction buttons & slot --- LICENCE | 202 +++++++++++++++++++++++ {gui => api}/__init__.py | 0 {gui => api/gui}/Box.py | 6 +- ClientClass.py => api/gui/ClientClass.py | 5 +- {soap => api/gui}/__init__.py | 0 {gui => api/gui}/conf_connection.py | 16 +- {gui => api/gui}/helpwidget.py | 0 api/gui/leftmenu.py | 78 +++++++++ {gui => api/gui}/mainframe.py | 0 {gui => api/gui}/mainmenu.py | 9 +- {soap => api/gui}/more.py | 22 ++- api/gui/pid_information.py | 41 +++++ {gui => api/gui}/statusfield.py | 0 {gui => api/gui}/tools.py | 0 {image => api/images}/Exit.png | Bin api/images/__init__.py | 0 {image => api/images}/help.png | Bin {image => api/images}/tool.png | Bin gui/leftmenu.py | 60 ------- client.py => scripts/client-gui | 6 +- setup.cfg | 2 + setup.py | 76 +++++++++ 22 files changed, 439 insertions(+), 84 deletions(-) create mode 100644 LICENCE rename {gui => api}/__init__.py (100%) rename {gui => api/gui}/Box.py (95%) rename ClientClass.py => api/gui/ClientClass.py (87%) rename {soap => api/gui}/__init__.py (100%) rename {gui => api/gui}/conf_connection.py (94%) rename {gui => api/gui}/helpwidget.py (100%) create mode 100644 api/gui/leftmenu.py rename {gui => api/gui}/mainframe.py (100%) rename {gui => api/gui}/mainmenu.py (71%) rename {soap => api/gui}/more.py (90%) create mode 100644 api/gui/pid_information.py rename {gui => api/gui}/statusfield.py (100%) rename {gui => api/gui}/tools.py (100%) rename {image => api/images}/Exit.png (100%) create mode 100644 api/images/__init__.py rename {image => api/images}/help.png (100%) rename {image => api/images}/tool.png (100%) delete mode 100644 gui/leftmenu.py rename client.py => scripts/client-gui (62%) mode change 100644 => 100755 create mode 100644 setup.cfg create mode 100755 setup.py diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENCE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/gui/__init__.py b/api/__init__.py similarity index 100% rename from gui/__init__.py rename to api/__init__.py diff --git a/gui/Box.py b/api/gui/Box.py similarity index 95% rename from gui/Box.py rename to api/gui/Box.py index 716bfc5..ba90139 100644 --- a/gui/Box.py +++ b/api/gui/Box.py @@ -30,17 +30,17 @@ class Example(QtGui.QMainWindow): MainMenu(self) # левое верхнее меню - topleft = LeftMenu(self) + self.topleft = LeftMenu(self, self.ClientObj) # верхнее правое self.main_frame = FrameConnection(self, self.ClientObj) - self.main_frame.resize(700,900) + self.main_frame.resize(600,700) # создание нижнего фрейма bottom = StatusField(self) bottom.resize(800,100) # объединение в один виджет splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal) - splitter1.addWidget(topleft) + splitter1.addWidget(self.topleft) splitter1.addWidget(self.main_frame) splitter1.resize(800,700) # splitter1.setGeometry(0, 0, 0, 140) diff --git a/ClientClass.py b/api/gui/ClientClass.py similarity index 87% rename from ClientClass.py rename to api/gui/ClientClass.py index 1926267..47ee410 100644 --- a/ClientClass.py +++ b/api/gui/ClientClass.py @@ -2,6 +2,7 @@ #-*- coding: utf-8 -*- from calculate.lib.cl_datavars import DataVars from calculate.api.cl_api import DataVarsApi +from Box import Example class ApiClient: def __init__(self): @@ -21,4 +22,6 @@ class ApiClient: self.default_host = 'localhost' self.default_port = '8888' - self.client = None \ No newline at end of file + self.client = None + + self.MainWidget = Example(self) \ No newline at end of file diff --git a/soap/__init__.py b/api/gui/__init__.py similarity index 100% rename from soap/__init__.py rename to api/gui/__init__.py diff --git a/gui/conf_connection.py b/api/gui/conf_connection.py similarity index 94% rename from gui/conf_connection.py rename to api/gui/conf_connection.py index d422340..af39359 100644 --- a/gui/conf_connection.py +++ b/api/gui/conf_connection.py @@ -14,8 +14,7 @@ from calculate.api.client.cert_func import * from calculate.api.client.cert_verify import get_CRL, VerifyError from calculate.api.client.sid_func import * -import soap -from soap.more import https_server, client_signal, show_msg, test +from more import https_server, client_signal, show_msg, test class Conn(QtGui.QWidget): @@ -137,15 +136,18 @@ class Conn(QtGui.QWidget): signaling = threading.Thread(target=client_signal, args = (self.ClientObj.client, )) signaling.setDaemon(True) - https_server(self.ClientObj.client, signaling) + https_server(self.ClientObj.client, signaling, self.ClientObj) #---------------------------------------------------- except WebFault, f: show_msg ("Exception: %s" %f) print f.fault - except TransportError, te: - show_msg ("Exception: %s" %te) - except Exception, e: - show_msg ("Exception: %s" %e) +# except TransportError, te: +# show_msg ("Exception: %s" %te) +# except Exception, e: +# show_msg ("Exception: %s" %e) + + + # tb.print_exc() diff --git a/gui/helpwidget.py b/api/gui/helpwidget.py similarity index 100% rename from gui/helpwidget.py rename to api/gui/helpwidget.py diff --git a/api/gui/leftmenu.py b/api/gui/leftmenu.py new file mode 100644 index 0000000..676700e --- /dev/null +++ b/api/gui/leftmenu.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +from PySide import QtGui, QtCore +from PySide.QtCore import SIGNAL + +class ButtonMap (QtGui.QPushButton): + name = "" + def __init__ (self, s, parent=None): + self.name = s + super(ButtonMap, self).__init__(s, parent) +# QtGui.QPushButton.__init__(self, str) +# self.buttonclick = QtCore.Signal(str) + +# self.connect(self, SIGNAL("clicked()"), self.buttonclick) + self.clicked.connect(self.buttonclick) + + but_click = QtCore.Signal(str) + def buttonclick(self): + self.but_click.emit(self.name) + +class left_menu(QtGui.QWidget): + + def __init__(self, parent): + super(left_menu, self).__init__() + + self.lbl = QtGui.QLabel("Welcome \n to \nCalculate", self) + self.lbl.move(30, 30) + self.setGeometry(0, 0, 150, 180) + self.show() + + + def initUI(self, results): + self.lbl.hide() + RES = 0 # Access to result + COM = 0 # Getting command line + METH = 1 # Getting method line + self.lable_list = [] + self.button_list = [] + self.layout = QtGui.QVBoxLayout() + for num in range (0, len(results)): + self.lable_list.append(QtGui.QLabel('-- '+results[num][RES][COM], self)) + + button_text = results[num][RES][METH] + Button = ButtonMap(button_text) + + Button.but_click.connect(self.onActivated) + + self.button_list.append(Button) + self.layout.addWidget(self.lable_list[num]) + self.layout.addWidget(self.button_list[num]) + + self.setLayout(self.layout) + self.show() + + def refresh(self, results): + self.initUI(results) + + def onActivated(self, text): + print text + + +class LeftMenu(QtGui.QFrame): + def __init__(self, parent, ClientObj): + QtGui.QFrame.__init__(self) + # верхнее левое меню +# topleft = QtGui.QFrame(self) +# self.setFrameShape(QtGui.QFrame.NoFrame) + + self.menu = left_menu(self) + + self.scrollArea1 = QtGui.QScrollArea() + self.scrollArea1.setWidget(self.menu) + + tempbox = QtGui.QHBoxLayout(self) + tempbox.addWidget(self.scrollArea1) + self.setLayout(tempbox) + +# self.resize(100,900) \ No newline at end of file diff --git a/gui/mainframe.py b/api/gui/mainframe.py similarity index 100% rename from gui/mainframe.py rename to api/gui/mainframe.py diff --git a/gui/mainmenu.py b/api/gui/mainmenu.py similarity index 71% rename from gui/mainmenu.py rename to api/gui/mainmenu.py index 77dd411..ba19cd7 100644 --- a/gui/mainmenu.py +++ b/api/gui/mainmenu.py @@ -4,23 +4,24 @@ from PySide import QtGui class MainMenu(): def __init__(self, parent): - exitAction = QtGui.QAction(QtGui.QIcon('image/Exit.png'), \ + image_path = '/usr/share/icons/hicolor/48x48/client-gui/' + exitAction = QtGui.QAction(QtGui.QIcon(image_path + 'Exit.png'), \ '&Exit', parent) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(parent.close) - toolAction = QtGui.QAction(QtGui.QIcon('image/tool.png'), \ + toolAction = QtGui.QAction(QtGui.QIcon(image_path + 'tool.png'), \ '&Tool', parent) toolAction.setShortcut('Ctrl+T') toolAction.setStatusTip('Tool application') toolAction.triggered.connect(parent.tools) - helpAction = QtGui.QAction(QtGui.QIcon('image/help.png'), \ + helpAction = QtGui.QAction(QtGui.QIcon(image_path + 'help.png'), \ '&Help', parent) helpAction.setShortcut('Ctrl+H') helpAction.setStatusTip('Help') - helpAction.triggered.connect(parent.help) + helpAction.triggered.connect(parent.help) parent.toolbar = parent.addToolBar('Main') diff --git a/soap/more.py b/api/gui/more.py similarity index 90% rename from soap/more.py rename to api/gui/more.py index 937b7a4..36e04c0 100644 --- a/soap/more.py +++ b/api/gui/more.py @@ -1,17 +1,19 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from PySide import QtGui, QtCore +from PySide import QtGui import os, time, sys from calculate.api.client.cert_func import client_post_auth from calculate.api.cl_api import DataVarsApi -from calculate.api.client.pid_information import client_list_methods, \ +from pid_information import client_list_methods, \ client_list_pid from calculate.api.client.function import get_entire_frame, create_obj, \ get_sid, analysis from calculate.api.client.sid_func import client_del_sid +from leftmenu import left_menu + def _(s): return s @@ -42,15 +44,23 @@ def client_signal(client): except: print _('no connection to server!') sys.exit() - print 1111111111 time.sleep(float(client_active)) -def https_server(client, signaling): +def https_server(client, signaling, ClientObj): global url client_post_auth(client) signaling.start() - client_list_methods(client) - + ClientObj.methods_list = client_list_methods(client) + if ClientObj.methods_list == 1: + show_msg ('No methods available!') + else: + RES = 0 # Access to result + COM = 0 # Getting command line + METH = 1 # Getting method line + for num in range (0, len(ClientObj.methods_list)): + print " %s - %s" % (ClientObj.methods_list[num][RES][COM],\ + ClientObj.methods_list[num][RES][METH]) + ClientObj.MainWidget.topleft.menu.refresh(ClientObj.methods_list) get_entire_frame(client) #create_obj(client, "install_system") diff --git a/api/gui/pid_information.py b/api/gui/pid_information.py new file mode 100644 index 0000000..4fdb3ce --- /dev/null +++ b/api/gui/pid_information.py @@ -0,0 +1,41 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +client_types = "gui" + +def client_list_methods(client): + """ get & show all available methods for this certificate """ + DAT = 0 # Access to data soap structure + RES = 0 # Access to result + COM = 0 # Getting command group + METH = 1 # Getting method line + + results = client.service.get_methods(client_types) + if not results: + print _('no methods available') + return 1 + try: + if results[DAT][RES][RES][COM] == '0': + print _('no methods available') + return 1 + except: + pass + print _("\nYou can execute:") + + return results[DAT] + +def client_list_pid(client): + """ get all process id for this session """ + sid = get_sid(client.SID_FILE) + + try: + list_pid = client.service.list_pid(sid = sid) + if list_pid[0][0] == 0: + print _("Not found pid for this session!") + return 0 + else: + for i in list_pid[0]: + print "pid - %d" %i + except: + print _("Server get pids error") + return 1 + return len(list_pid[0]) \ No newline at end of file diff --git a/gui/statusfield.py b/api/gui/statusfield.py similarity index 100% rename from gui/statusfield.py rename to api/gui/statusfield.py diff --git a/gui/tools.py b/api/gui/tools.py similarity index 100% rename from gui/tools.py rename to api/gui/tools.py diff --git a/image/Exit.png b/api/images/Exit.png similarity index 100% rename from image/Exit.png rename to api/images/Exit.png diff --git a/api/images/__init__.py b/api/images/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/image/help.png b/api/images/help.png similarity index 100% rename from image/help.png rename to api/images/help.png diff --git a/image/tool.png b/api/images/tool.png similarity index 100% rename from image/tool.png rename to api/images/tool.png diff --git a/gui/leftmenu.py b/gui/leftmenu.py deleted file mode 100644 index 4c333ae..0000000 --- a/gui/leftmenu.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -from PySide import QtGui - -class Checkbox(QtGui.QWidget): - - def __init__(self): - super(Checkbox, self).__init__() - - self.initUI() - - def initUI(self): - - self.lbl = QtGui.QLabel("Moscow", self) - combo = QtGui.QComboBox(self) - combo.addItem("Moscow") - combo.addItem("Piter") - combo.addItem("London") - combo.addItem("New York") - combo.addItem("Brazilia") - - combo.move(50, 50) - self.lbl.move(50, 150) - - combo.activated[str].connect(self.onActivated) - - self.setGeometry(0, 0, 150, 180) - self.show() - - def onActivated(self, text): - if text == 'Brazilia': - if hasattr (self, 'lbl'): #if 'lbl' in self: - self.lbl.hide() - del self.lbl - else: - if not hasattr (self, 'lbl'): - self.lbl = QtGui.QLabel(text, self) - self.lbl.move(50, 150) - self.lbl.show() - self.lbl.setText(text) - self.lbl.adjustSize() - - -class LeftMenu(QtGui.QFrame): - def __init__(self, parent): - QtGui.QFrame.__init__(self) - # верхнее левое меню -# topleft = QtGui.QFrame(self) -# self.setFrameShape(QtGui.QFrame.NoFrame) - - check1 = Checkbox() - - self.scrollArea1 = QtGui.QScrollArea() - self.scrollArea1.setWidget(check1) - - tempbox = QtGui.QHBoxLayout(self) - tempbox.addWidget(self.scrollArea1) - self.setLayout(tempbox) - -# self.resize(100,900) \ No newline at end of file diff --git a/client.py b/scripts/client-gui old mode 100644 new mode 100755 similarity index 62% rename from client.py rename to scripts/client-gui index f9ffa0d..6d9507c --- a/client.py +++ b/scripts/client-gui @@ -3,13 +3,13 @@ import sys from PySide import QtGui -from gui.Box import Example -from ClientClass import ApiClient +from calculate.api.gui.Box import Example +from calculate.api.gui.ClientClass import ApiClient app = QtGui.QApplication(sys.argv) ClientObj = ApiClient() -ex = Example(ClientObj) +ex = ClientObj.MainWidget #f = QtGui.QStyleFactory().create('Motif') #ex.setStyle(f) #ex.setStyle('Windows') diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..607091d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[install] +install-scripts=/usr/bin diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..8c31f96 --- /dev/null +++ b/setup.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +# setup.py --- Setup script for calculate-ldap + +# Copyright 2010 Calculate Ltd. http://www.calculate-linux.org +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import stat +from distutils.core import setup +from distutils.command.install_data import install_data + +data_files = [] + +var_data_files = [] + +data_files += [('/usr/share/icons/hicolor/48x48/client-gui',['api/images/tool.png'])] +data_files += [('/usr/share/icons/hicolor/48x48/client-gui',['api/images/Exit.png'])] +data_files += [('/usr/share/icons/hicolor/48x48/client-gui',['api/images/help.png'])] + +__version__ = "0.1" +__app__ = "caqlculate-api" + +class cl_api_data(install_data): + def run (self): + install_data.run(self) + data_file = [("/usr/lib/python2.7/site-packages/calculate/api/images/tool.png",0755)] + fileNames = map(lambda x: os.path.split(x[0])[1], data_file) + listNames = map(lambda x: filter(lambda y: y, x[0].split("/")), + data_file) + data_find = {} + for i in range(len(fileNames)): + listNames[i].reverse() + data_find[fileNames[i]] =[listNames[i],data_file[i][1]] + + for path in self.get_outputs(): + nameFile = os.path.split(path)[1] + if nameFile in data_find.keys(): + data = data_find[nameFile][0] + mode = data_find[nameFile][1] + flagFound = True + iMax = len(data) + pathFile = path + for i in range(iMax): + if data[i] != os.path.split(pathFile)[1]: + flagFound = False + break + pathFile = os.path.split(pathFile)[0] + if flagFound: + os.chmod(path, mode) + +setup( + name = __app__, + version = __version__, + description = "GUI client for WSDL server", + author = "Calculate Ltd.", + author_email = "support@calculate.ru", + url = "http://calculate-linux.org", + license = "http://www.apache.org/licenses/LICENSE-2.0", + data_files = data_files, + package_dir = {'calculate.api': "api"}, + packages = ['calculate.api','calculate.api.gui', 'calculate.api.images'], + scripts = ['./scripts/client-gui'], + cmdclass={'cl_api_data': cl_api_data} +)