Move data in as package data.

Closes #136.
This commit is contained in:
Chris PeBenito 2016-11-12 11:13:21 -05:00
parent 6927ea885b
commit 42c2bbd606
65 changed files with 49 additions and 66 deletions

View File

@ -1,12 +1,15 @@
include ChangeLog
include COPYING*
include data/*
include libqpol/*.h
include libqpol/*.l
include libqpol/*.y
include libqpol/include/qpol/*.h
include man/*
include qhc/*
include setools/perm_map
include setoolsui/*.ui
include setoolsui/apol/*.ui
include setoolsui/apol/apol.qhc
include tests/*.conf
include tests/*.py
include tests/perm_map

View File

@ -1 +0,0 @@
../data/icons/Add.png

View File

@ -22,6 +22,8 @@ import copy
from collections import OrderedDict
from errno import ENOENT
import pkg_resources
from . import exception
from . import policyrep
from .descriptors import PermissionMapDescriptor
@ -48,15 +50,10 @@ class PermissionMap(object):
if permmapfile:
self.load(permmapfile)
else:
for path in ["data/", sys.prefix + "/share/setools/"]:
try:
self.load(path + "perm_map")
break
except (IOError, OSError) as err:
if err.errno != ENOENT:
raise
else:
raise RuntimeError("Unable to load default permission map.")
distro = pkg_resources.get_distribution("setools")
# pylint: disable=no-member
path = "{0}/setools/perm_map".format(distro.location)
self.load(path)
def __str__(self):
return self.permmapfile

View File

@ -51,7 +51,7 @@ class BoolQueryTab(AnalysisTab):
logging.getLogger("setools.boolquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("boolquery.ui")
self.load_ui("apol/boolquery.ui")
# populate bool list
self.bool_model = SEToolsListModel(self)

View File

@ -51,7 +51,7 @@ class BoundsQueryTab(AnalysisTab):
logging.getLogger("setools.boundsquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("boundsquery.ui")
self.load_ui("apol/boundsquery.ui")
# set up results
self.table_results_model = BoundsTableModel(self)

View File

@ -51,7 +51,7 @@ class CategoryQueryTab(AnalysisTab):
logging.getLogger("setools.categoryquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("categoryquery.ui")
self.load_ui("apol/categoryquery.ui")
# populate category list
self.category_model = SEToolsListModel(self)

View File

@ -92,7 +92,7 @@ class ChooseAnalysis(SEToolsWidget, QDialog):
self.setupUi()
def setupUi(self):
self.load_ui("choose_analysis.ui")
self.load_ui("apol/choose_analysis.ui")
def show(self, mls):
analysis_map = {"Domain Transition Analysis": DomainTransitionAnalysisTab,

View File

@ -51,7 +51,7 @@ class CommonQueryTab(AnalysisTab):
logging.getLogger("setools.commonquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("commonquery.ui")
self.load_ui("apol/commonquery.ui")
# populate commons list
self.common_model = SEToolsListModel(self)

View File

@ -51,7 +51,7 @@ class ConstraintQueryTab(AnalysisTab):
logging.getLogger("setools.constraintquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("constraintquery.ui")
self.load_ui("apol/constraintquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -51,7 +51,7 @@ class DefaultQueryTab(AnalysisTab):
logging.getLogger("setools.defaultquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("defaultquery.ui")
self.load_ui("apol/defaultquery.ui")
# set up results
self.table_results_model = DefaultTableModel(self)

View File

@ -53,7 +53,7 @@ class DomainTransitionAnalysisTab(AnalysisTab):
def setupUi(self):
self.log.debug("Initializing UI.")
self.load_ui("dta.ui")
self.load_ui("apol/dta.ui")
# set up source/target autocompletion
type_completion_list = [str(t) for t in self.policy.types()]

View File

@ -40,7 +40,7 @@ class ExcludeTypes(SEToolsWidget, QDialog):
self.setupUi()
def setupUi(self):
self.load_ui("exclude_types.ui")
self.load_ui("apol/exclude_types.ui")
# populate the attribute combo box:
self.attr_model = SEToolsListModel(self)

View File

@ -50,7 +50,7 @@ class FSUseQueryTab(AnalysisTab):
logging.getLogger("setools.fsusequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("fsusequery.ui")
self.load_ui("apol/fsusequery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -50,7 +50,7 @@ class GenfsconQueryTab(AnalysisTab):
logging.getLogger("setools.genfsconquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("genfsconquery.ui")
self.load_ui("apol/genfsconquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -79,7 +79,7 @@ class InfoFlowAnalysisTab(AnalysisTab):
def setupUi(self):
self.log.debug("Initializing UI.")
self.load_ui("infoflow.ui")
self.load_ui("apol/infoflow.ui")
# set up error message for missing perm map
self.error_msg = QMessageBox(self)

View File

@ -50,7 +50,7 @@ class InitialSIDQueryTab(AnalysisTab):
logging.getLogger("setools.initsidquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("initsidquery.ui")
self.load_ui("apol/initsidquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -24,6 +24,7 @@ import logging
import json
from errno import ENOENT
import pkg_resources
from PyQt5.QtCore import pyqtSlot, Qt, QProcess
from PyQt5.QtWidgets import QApplication, QFileDialog, QLineEdit, QMainWindow, QMessageBox
from setools import __version__, PermissionMap, SELinuxPolicy
@ -57,7 +58,7 @@ class ApolMainWindow(SEToolsWidget, QMainWindow):
self.toggle_workspace_actions()
def setupUi(self):
self.load_ui("apol.ui")
self.load_ui("apol/apol.ui")
self.tab_counter = 0
@ -645,17 +646,8 @@ class ApolMainWindow(SEToolsWidget, QMainWindow):
if self.help_process.state() != QProcess.NotRunning:
return
for path in ["qhc", sys.prefix + "/share/setools"]:
helpfile = "{0}/apol.qhc".format(path)
try:
if stat.S_ISREG(os.stat(helpfile).st_mode):
break
except (IOError, OSError) as err:
if err.errno != ENOENT:
raise
else:
self.log.critical("Unable to find apol help data (apol.qhc).")
distro = pkg_resources.get_distribution("setools")
helpfile = "{0}/setoolsgui/apol/apol.qhc".format(distro.location)
self.log.debug("Starting assistant with help file {0}".format(helpfile))
self.help_process.start("assistant",

View File

@ -51,7 +51,7 @@ class MLSRuleQueryTab(AnalysisTab):
logging.getLogger("setools.mlsrulequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("mlsrulequery.ui")
self.load_ui("apol/mlsrulequery.ui")
# set up source/target autocompletion
typeattr_completion_list = [str(t) for t in self.policy.types()]

View File

@ -50,7 +50,7 @@ class NetifconQueryTab(AnalysisTab):
logging.getLogger("setools.netifconquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("netifconquery.ui")
self.load_ui("apol/netifconquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -51,7 +51,7 @@ class NodeconQueryTab(AnalysisTab):
logging.getLogger("setools.nodeconquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("nodeconquery.ui")
self.load_ui("apol/nodeconquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -51,7 +51,7 @@ class ObjClassQueryTab(AnalysisTab):
logging.getLogger("setools.objclassquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("objclassquery.ui")
self.load_ui("apol/objclassquery.ui")
# populate class list
self.class_model = SEToolsListModel(self)

View File

@ -52,7 +52,7 @@ class PermissionMapEditor(SEToolsWidget, QDialog):
self.setupUi()
def setupUi(self):
self.load_ui("permmap_editor.ui")
self.load_ui("apol/permmap_editor.ui")
# set up class list
self.class_model = SEToolsListModel(self)
@ -172,7 +172,7 @@ class PermissionMapping(SEToolsWidget, QWidget):
self.setupUi()
def setupUi(self):
self.load_ui("permmapping.ui")
self.load_ui("apol/permmapping.ui")
self.permission.setText(str(self.mapping.perm))
self.weight.setValue(self.mapping.weight)

View File

@ -51,7 +51,7 @@ class PortconQueryTab(AnalysisTab):
logging.getLogger("setools.portconquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("portconquery.ui")
self.load_ui("apol/portconquery.ui")
# set up user autocompletion
user_completion_list = [str(u) for u in self.policy.users()]

View File

@ -51,7 +51,7 @@ class RBACRuleQueryTab(AnalysisTab):
logging.getLogger("setools.rbacrulequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("rbacrulequery.ui")
self.load_ui("apol/rbacrulequery.ui")
# set up role autocompletion (source, default)
role_completion_list = [str(r) for r in self.policy.roles()]

View File

@ -51,7 +51,7 @@ class RoleQueryTab(AnalysisTab):
logging.getLogger("setools.rolequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("rolequery.ui")
self.load_ui("apol/rolequery.ui")
# populate role list
self.role_model = SEToolsListModel(self)

View File

@ -51,7 +51,7 @@ class SensitivityQueryTab(AnalysisTab):
logging.getLogger("setools.sensitivityquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("sensitivityquery.ui")
self.load_ui("apol/sensitivityquery.ui")
# populate sensitivity list
self.sensitivity_model = SEToolsListModel(self)

View File

@ -42,7 +42,7 @@ class SummaryTab(AnalysisTab):
self.setupUi(policy)
def setupUi(self, p):
self.load_ui("summary.ui")
self.load_ui("apol/summary.ui")
# Ensure settings are consistent with the initial .ui state
self.notes.setHidden(not self.notes_expander.isChecked())

View File

@ -51,7 +51,7 @@ class TERuleQueryTab(AnalysisTab):
logging.getLogger("setools.terulequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("terulequery.ui")
self.load_ui("apol/terulequery.ui")
# set up source/target autocompletion
typeattr_completion_list = [str(t) for t in self.policy.types()]

View File

@ -51,7 +51,7 @@ class TypeAttributeQueryTab(AnalysisTab):
logging.getLogger("setools.typeattrquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("typeattrquery.ui")
self.load_ui("apol/typeattrquery.ui")
# populate attr list
self.attr_model = SEToolsListModel(self)

View File

@ -51,7 +51,7 @@ class TypeQueryTab(AnalysisTab):
logging.getLogger("setools.typequery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("typequery.ui")
self.load_ui("apol/typequery.ui")
# populate type list
self.type_model = SEToolsListModel(self)

View File

@ -51,7 +51,7 @@ class UserQueryTab(AnalysisTab):
logging.getLogger("setools.userquery").removeHandler(self.handler)
def setupUi(self):
self.load_ui("userquery.ui")
self.load_ui("apol/userquery.ui")
# populate user list
self.user_model = SEToolsListModel(self)

View File

@ -19,6 +19,7 @@
import sys
from errno import ENOENT
import pkg_resources
from PyQt5.uic import loadUi
@ -39,16 +40,8 @@ QGroupBox::title {\
class SEToolsWidget(object):
def load_ui(self, filename):
# If we are in the git repo, look at the local
# UI file, otherwise look at the installed file.
for path in ["data/", sys.prefix + "/share/setools/"]:
try:
loadUi(path + filename, self)
break
except (IOError, OSError) as err:
if err.errno != ENOENT:
raise
else:
raise RuntimeError("Unable to load Qt UI file \"{0}\"".format(filename))
distro = pkg_resources.get_distribution("setools")
path = "{0}/setoolsgui/{1}".format(distro.location, filename)
loadUi(path, self)
self.setStyleSheet(stylesheet)

View File

@ -24,7 +24,7 @@ class QtHelpCommand(Command):
pass
def run(self):
command = ['qcollectiongenerator', 'apol.qhcp', '-o', 'apol.qhc']
command = ['qcollectiongenerator', 'apol.qhcp', '-o', '../setoolsgui/apol/apol.qhc']
self.announce("Building Qt help files", level=log.INFO)
self.announce(' '.join(command), level=log.INFO)
pwd = os.getcwd()
@ -182,9 +182,8 @@ setup(name='setools',
'build_qhc': QtHelpCommand},
packages=['setools', 'setools.diff', 'setools.policyrep', 'setoolsgui', 'setoolsgui.apol'],
scripts=['apol', 'sediff', 'seinfo', 'seinfoflow', 'sesearch', 'sedta'],
data_files=[(join(sys.prefix, 'share/man/man1'), glob.glob("man/*.1") ),
(join(sys.prefix, 'share/setools'), glob.glob("data/*.ui") +
["data/perm_map", "qhc/apol.qhc"] )],
data_files=[(join(sys.prefix, 'share/man/man1'), glob.glob("man/*.1"))],
package_data={'': ['*.ui', '*.qhc'], 'setools': ['perm_map']},
ext_modules=ext_py_mods,
test_suite='tests',
license='GPLv2+, LGPLv2.1+',