示例#1
0
    def createMemberarea(self, member_id):
        """
        create a member area
        """
        parent = self.aq_inner.aq_parent
        members = getattr(parent, 'Members', None)

        if members is not None and not hasattr(members, member_id):
            f_title = "%s's Home" % member_id
            members.manage_addPortalFolder(id=member_id, title=f_title)
            f = getattr(members, member_id)

            # Grant ownership to Member
            acl_users = self.__getPUS()
            user = acl_users.getUser(member_id).__of__(acl_users)
            f.changeOwnership(user)
            f.manage_setLocalRoles(member_id, ['Owner'])

            # Create Member's home page.
            # default_member_content ought to be configurable per
            # instance of MembershipTool.
            Document.addDocument(f, 'index_html', member_id + "'s Home",
                                 member_id + "'s front page",
                                 "structured-text",
                                 (default_member_content % member_id))

            f.index_html._setPortalTypeName('Document')

            # Overcome an apparent catalog bug.
            f.index_html.reindexObject()
示例#2
0
    def lockFile(self, filename):
        """currently can lock the file OU owned
            TODO: lock other OU files
            """
        Document.changeLock(self.email, filename)

        return Document.isFileLocked(self.email, filename)
示例#3
0
    def add_dataset(self, folder_path):
        ds = Dataset(folder_path)

        for doc in ds.get_contents():
            document = Document(text=doc, features=self.features)
            document.analysis = self.analyze_source(source=document)
            self.documents.append(document)
示例#4
0
	def get_link_list_objects(self, parent, link_list_type, link_list):
		""" Return list of objects based on passed link list """
		if link_list == None:
			return None
		else:
			list_objects = []

		if link_list_type == 'documents':
			for link in link_list:
				doc = Document()
				doc.load_document(link)
				list_objects.append(doc)
		elif link_list_type == 'stakeholder':
			for link in link_list:
				sth = Stakeholder()
				sth.load_config_from_file(link)
				list_objects.append(sth)
		elif link_list_type == 'requirement':
			for link in link_list:
				if link.endswith('.req'):
					req = Requirement()
					req.load_config_from_file(link)
					list_objects.append(req)
				elif link.endswith('attributes.pkg'):
					pkg = RequirementPackage()
					pkg.load_config_from_file(link)
					list_objects.append(pkg)

		return list_objects
示例#5
0
    def createMemberarea(self, member_id):
        """
        create a member area
        """
        parent = self.aq_inner.aq_parent
        members =  getattr(parent, 'Members', None)

        if members is not None and not hasattr(members, member_id):
            f_title = "%s's Home" % member_id
            members.manage_addPortalFolder( id=member_id, title=f_title )
            f=getattr(members, member_id)
 
            # Grant ownership to Member
            acl_users = self.__getPUS()
            user = acl_users.getUser(member_id).__of__(acl_users)
            f.changeOwnership(user)
            f.manage_setLocalRoles(member_id, ['Owner'])
 
            # Create Member's home page.
            # default_member_content ought to be configurable per
            # instance of MembershipTool.
            Document.addDocument( f
                                , 'index_html'
                                , member_id+"'s Home"
                                , member_id+"'s front page"
                                , "structured-text"
                                , (default_member_content % member_id)
                                )
 
            f.index_html._setPortalTypeName( 'Document' )

            # Overcome an apparent catalog bug.
            f.index_html.reindexObject()
            wftool = getToolByName( f, 'portal_workflow' )
            wftool.notifyCreated( f.index_html )
示例#6
0
 def applyfilters(self, variables, filterscs):
     '''
     This method applies the filters to the files by taking in the two list, one of which contains
     the files checked to apply, the other one contains the filters checked to apply, and this
     method will change the state string accordingly
     '''
     if GUI.fileObj == []:
         for thefile in GUI.fileName:
             GUI.fileObj.append(Document(thefile))
         for D in GUI.fileObj:
             D.generateWhole()
     elif len(GUI.fileObj) != len(GUI.fileName):
         lengthD = len(GUI.fileName) - len(GUI.fileObj)
         for i in range(lengthD)[::-1]:
             GUI.fileObj.append(Document(GUI.fileName[-(1 + i)]))
             GUI.fileObj[-1].generateWhole()
     empty = True
     for i in range(len(variables)):
         if variables[i].get() == 1:
             dofil = TextFilter(GUI.fileObj[i])
             dofil.apply([
                 self.filters[j]
                 for j in range(len(filterscs)) if filterscs[j].get() == 1
             ], GUI.fileObj[i])
             empty = False
     if empty == True:
         self.sti = 'Nothing applied'
     else:
         self.sti = 'Successfully applied'
     self.sti_text.set(self.sti)
示例#7
0
def import_file(file_content):
    doc = Document(file_content.readline())
    all = file_content.readline()
    for line in file_content:
        temp = line.rsplit(" ")
        if len(temp)==2:
            doc.dictionary[temp[0]] = int(temp[1].strip())
    return doc
示例#8
0
 def openfile(self, item):
     selectedTarget = item.text()
     Document.openfile(self.email, self.email, self.filename,
                       selectedTarget)
     em = QtWidgets.QMessageBox()
     em.setIcon(QtWidgets.QMessageBox.Information)
     em.setText("Load history file finished")
     em.setStandardButtons(QtWidgets.QMessageBox.Ok)
     em.exec_()
示例#9
0
    def read_newdata(self,dfile,wordmapfile):
        word2id = {}
        id2_id = {}
        self.read_wordmap1(wordmapfile,word2id)   # 从wordmapfile中读入word2id
        if len(word2id) <= 0 :
            print("No word map available!\n")
            return 1
        fin = open(dfile)
        if fin == None :
            print("Cannot open file ",dfile," to read!\n")
            return 1
        line = fin.readline()
        # get the number of new documents
        self.M = int(line)
        if self.M <= 0 :
            print("No document available!\n")
            return 1
        self.V = 0

        for i in range(self.M) :
            line = fin.readline()
            strtok = Strtokenizer(line,' \t\r\n')
            length = strtok.count_tokens()
            doc = []
            _doc = []
            for j in range(length) :
                found = False
                for key in word2id.keys():
                    if strtok.token(j) == key:
                        found = True
                        break
                if found:   # 找到 key
                    found2 = False
                    for value in id2_id.values() :
                        if value == word2id[strtok.token(j)] :
                            found2 = True
                            break
                    if not found2 : # 没找到 value
                        _id = len(id2_id)
                        id2_id[word2id[strtok.token(j)]] = _id
                        self._id2id[_id] = word2id[strtok.token(j)]
                    else :  # 找到
                        _id = word2id[strtok.token(j)]
                    doc.append(word2id[strtok.token(j)])
                    _doc.append(_id)
                else:           # 没找到
                    tmp = ''
                    # 没决定要做什么

            pdoc = Document(doc)
            _pdoc = Document(_doc)
            self.add_doc(pdoc,i)
            self._add_doc(_pdoc,i)

        fin.close()
        self.V = len(id2_id)
        return 0
def find_coreferences(input_file, output_dir):
    doc = Document.Document(input_file, output_dir)
    tags = doc.tags

    for anaphor_idx in range(len(tags)):

        # Finding string matches
        if tags[anaphor_idx].content.lower() not in references.pronouns:
            for antecedent_idx in range(anaphor_idx - 1, -1, -1):
                if (head_word_match(tags[anaphor_idx].content,
                                    tags[antecedent_idx].content) or
                        overlap_similarity(tags[anaphor_idx].content,
                                           tags[antecedent_idx].content) >= .5
                        or tags[anaphor_idx].content.lower() in find_acronyms(
                            tags[antecedent_idx].content)
                        or tags[antecedent_idx].content.lower()
                        in find_acronyms(tags[anaphor_idx].content)):
                    tags[anaphor_idx].ref = tags[antecedent_idx].id

                    if not tags[antecedent_idx].ref:
                        tags[antecedent_idx].ref = tags[anaphor_idx].id

                    break

        # Look for pronouns
        else:
            for antecedent_idx in range(anaphor_idx - 1,
                                        max(-1, anaphor_idx - 10), -1):
                if tags[anaphor_idx].content.lower(
                ) == tags[antecedent_idx].content.lower():
                    tags[anaphor_idx].ref = tags[antecedent_idx].id
                    if not tags[antecedent_idx].ref:
                        tags[antecedent_idx].ref = tags[anaphor_idx].id
                elif pronoun_attribute_match(
                        tags[anaphor_idx].content.lower(),
                        tags[antecedent_idx].content.lower()):
                    tags[anaphor_idx].ref = tags[antecedent_idx].id
                    if not tags[antecedent_idx].ref:
                        tags[antecedent_idx].ref = tags[anaphor_idx].id

    unmatched_tags = [t for t in doc.tags if not t.ref]
    counter = 0
    for tag in unmatched_tags:
        TAG_RE = re.compile('(?:^|[\s])(' +
                            re.escape(tag.content.lower().split()[-1]) +
                            ')(?:$|[\.\s\,\!\?])')

        matches = re.findall(TAG_RE, doc.content)

        if matches:
            for match in matches:
                new_id = 'A' + str(counter)
                doc.tags.append(Document.Tag(new_id, tag.id, match))
                tag.ref = new_id
                counter += 1

    doc.save()
示例#11
0
 def run(self):
     for text in self.documents_list:
         document = Document(text)
         summary = document.get_summary(5)
         filename = text.split('\\')[-1]
         filename = filename[:filename.index(".")]
         with codecs.open(filename + ".txt", "w",
                          "utf-8-sig") as summary_file:
             summary_file.write(summary)
             summary_file.close()
示例#12
0
    def add_source(self, data, kind):
        if SourceType.query == kind:
            query = Query(text=data, features=self.features)
            query.analysis = self.analyze_source(source=query)
            self.queries.append(query)

        elif SourceType.document == kind:
            document = Document(text=data, features=self.features)
            document.analysis = self.analyze_source(source=document)
            document.document_id = len(self.documents)
            self.documents.append(document)
示例#13
0
 def saveDoc(self, docLocation, filename):
     """
         if file is locked, save rejected
     :param docLocation:
     :param filename:
     :return:
     """
     if not Document.isFileLocked(self.email, filename):
         Document.saveDoc(self.email, docLocation, filename)
     else:
         return "File is locked, save unsuccessful"
    def clickShare(self):
        if self.lineEdit.text():
            if not Document.listallhistory(self.email, self.lineEdit.text()):
                Document.saveDoc(self.email, '../cacheModified',
                                 self.lineEdit.text(), 'private')

            self.shareOption = QtWidgets.QDialog()
            self.ui = shareOption.Ui_shareOption()
            filename = self.lineEdit.text()
            self.ui.setupUi(self.shareOption, self.email, filename)
            self.shareOption.exec_()

            if self.ui.getNgrokTunnel() is not None:
                self.ngrok = self.ui.getNgrokTunnel()
示例#15
0
    def read_file(self, file):
        #read in a single file from corpus
        #parse to sentence class and word class but fully document class
        doc_to_return = Document()
        lines = file.readlines()
        pre_sent = []
        sent_index = 0
        is_offset = 1
        doc_list = []
        for line in lines:
            if not line.startswith('#'):
                if line.isspace():
                    doc_to_return.sentences.append(
                        Sentence(pre_sent.copy(), sent_index))
                    pre_sent.clear()
                    sent_index += 1
                else:
                    entries = line.split()
                    # Set Doc Id
                    if not doc_to_return.docID:
                        doc_to_return.get_doc_id(entries[0])

                    # Construct word
                    word = Word()
                    word.set_entries(entries)
                    pre_sent.append(word)
                    # Create mapping for resolving difference in ISNotes offset and OntoNotes
                    #doc_to_return.coref_to_ISoffset[is_offset] = (doc_to_return.header, sent_index, int(entries[2]))
                    #is_offset += 1
            elif line.startswith('#begin'):
                doc_to_return = Document()
                doc_to_return.header = line
            else:
                doc_to_return.end = line
                doc_list.append(doc_to_return)
                sent_index = 0
                doc_to_return = Document()

        # for sent in doc_to_return.sentences:
        #     sent.get_names()  # May no longer be needed. since exists in make_mentions in sentence_init

        # Construct gold coreference clusters
        # for doc in doc_list:
        #     for sent in doc.sentences:
        #         for m in sent.mentions:
        #             if m.gold_cluster_id is not None:
        #                 doc.gold_clusters[m.gold_cluster_id].append(m)

        return doc_list
示例#16
0
文件: Main.py 项目: msadat3/Text_Rank
def calculate_MRR(document_directory_location, gold_label_directory_location,
                  stopwords, k, alpha, num_iterations, window):
    Reciprocal_ranks = []
    for root, dirs, files in os.walk(document_directory_location):
        for file in files:
            if p.exists(gold_label_directory_location + file):
                doc = Document(document_directory_location + file,
                               gold_label_directory_location + file, stopwords)
                doc.Preprocess()
                doc.Create_word_graph(window)
                rec = doc.get_reciprocal_rank(k, alpha, num_iterations)
                #print(file,rec)
                Reciprocal_ranks.append(rec)
    mrr = sum(Reciprocal_ranks) / len(Reciprocal_ranks)
    print('Window =', window, "K =", k, 'MRR =', mrr)
示例#17
0
def load_dataset():
    documents = []

    with open(references_path) as reference_file:
        reference_dict = json.load(reference_file)

    with open(cases_path) as json_file:
        cases_json = json.load(json_file)

        for index, case in enumerate(cases_json):

            application_number = case['appno']
            document_name = case['docname']
            document_id = case['itemid']

            multiple_appnos = False

            # Alle keys hvor application number indgår
            matching_key = [
                key for key in reference_dict.keys()
                if application_number in key.split(';')
            ]
            multi_refs = []
            temp_internal_appnos = []
            for k in matching_key:
                multi_refs.extend(reference_dict[k].keys())

                split = k.split(';')
                temp_internal_appnos.extend(split)

            # alle outgoing refs fra "matching keys"
            multi_refs = remove_dups(multi_refs)

            # alle appnos i hver "matching key"
            temp_internal_appnos = remove_dups(temp_internal_appnos)

            document = Document.Document(application_id=application_number,
                                         document_id=document_id,
                                         title=document_name,
                                         references_appno=multi_refs,
                                         internal_appnos=temp_internal_appnos,
                                         multiple_appnos=multiple_appnos
                                         )  # related_appnos=remaining_appnos
            documents.append(document)
            print(f'Loaded document: {index}')
    for count, doc in enumerate(documents):
        print(f'reffing doc {count}')
        # tjekker alle refs (internal og outgoing)
        for outgoing in doc.all_refs:
            for other_doc in documents:
                # hvis appno er i andet docs internal appno --> ref fra doc til doc
                if outgoing in other_doc.internal_appnos:
                    doc.outgoing_refs[other_doc.document_id] = 1
                    break
    documents = add_articles_and_conclusion_to_documents(documents)
    adjacency_matrix = create_adjacency_matrix_from_references(documents)

    assign_pagerank_to_documents(documents, adjacency_matrix)

    return documents
示例#18
0
    def run(self):
        # Find links on first run
        self.get_links(self.parse_webpage(self.base_url))

        # Calculate and save the word count in the document
        while self.links_to_search:
            url = heapq.heappop(self.links_to_search) # get next url in line
            heapq.heappush(self.links_searched, url) # save url as already searched
            soup = self.parse_webpage(self.base_url + url) # get webpage
            self.get_links(soup) # harvest urls to search
            clean = self.clean_text(soup) # clean webpage content
            doc = Document(url)
            doc.count_words(clean) # count number of words on webpage
            doc.save_word_count(self.base_url) # save document
            if len(self.links_searched) == 10000:  # Caps the result at X pages, for test purposes
                break
示例#19
0
    def getPermissionFile(self, permissionType):
        """

        :param permissionType: private, public, restricted, shared
        :return: return all docs with the same permission type in dict{username:[list of filename]}
        """
        return Document.getPermissionFiles(permissionType)
示例#20
0
文件: Parser.py 项目: NabilDam/RITAL
    def buildDocumentCollectionRegex(fichier):
        """
            Construit l'index a partir d'une base de documents contenus dans fichier,
        On lit le fichier en entier et on utilise des expressions régulières pour
        récupère le contenu des balises

        :type fichier: String
        :param fichier: Le fichier qui contient les documents que l'on veut indexé

        :return: Un dictionnaire de d'object Document, dont les clef sont les id des
                Document.
                {"id1": Document1, "id2": Document2, ...}
        """
        resultat = dict()
        
        f = open(fichier, 'r')
        doc = f.read()
        docs = doc.split(".I")
    
        for di in range(1, len(docs)):
            d = Document.Document()
            id_doc = re.search(r'(\d*|$)', docs[di][1:]).group(0)
            d.setID(int(id_doc))
            m = re.search(r'\.T(.*?)\.', docs[di], re.DOTALL)
            if m is not None:
                d.setTexte(m.group(1).replace('\n', ' '))
                
            else:
                d.setTexte("")
            
            resultat[id_doc] = d
        f.close()
        return resultat
示例#21
0
    def import_txt(self, txt_file):
        temp_txt = []
        for line in txt_file:
            if len(line.rstrip().split("\t")) > 1:
                label = line.rstrip().split("\t")[0]
                if label != '__label__neu':
                    sentence = line.rstrip().split("\t")[1]
                    doc = Document.Document(sentence, label)
                    self.docs.append(doc)
                    temp_txt.append(doc)
                    label_num = 0
                    if doc.label == '__label__pos':
                        label_num = 0  # positive label
                    elif doc.label == '__label__neg':
                        label_num = 1  # negative label
                    self.label_counts[label_num] += 1
                    for word in doc.words:
                        if word != '':
                            if word not in self.words:
                                value = WordValue()
                                self.words.append(word)
                                self.values.append(value)
                            self.values[int(word)].appear[label_num] += 1

        pass
示例#22
0
    def finditer(self, doc):
        """
		doc can be a Document object or a plain text to convert into one
		
		each iteration is an array of words
		
		HINT: if you would rather have a (start,end) doc range, do 
		(result[0].location[0],result[-1].location[-1])
		"""
        if type(doc) == str or type(doc) == unicode:
            doc = Document.Document(doc)
        words = doc.words()
        endi = len(words) - len(self.matchers) + 1
        for i in range(endi):
            matched = []
            for j in range(i, endi):
                for m in self.matchers:
                    if not m.match(words[j]):
                        matched = None
                        break
                    matched.append(words[j])
                if matched == None:
                    break
            if matched != None:
                yield matched
 def showHistory(self):
     allHistory = Document.listallhistory(self.email,self.filename)
     self.historyWindow = QtWidgets.QDialog()
     self.history = fileHistory.Ui_fileHistory()
     self.history.setupUi(self.historyWindow, allHistory, self.email, self.filename)
     self.historyWindow.exec_()
     self.readFile()
示例#24
0
    def buildDocumentCollectionRegex(self, chemin_doc):

        collection = {}
        file = open(chemin_doc)
        doc = file.read()
        file.close()

        docs = doc.split(".I")

        for d in range(1, len(docs)):
            doc = Document.Document()

            id = re.search(r'(\d*|$)', docs[d][1:])
            value = re.search(r'\.W(.*?)\.', docs[d], re.DOTALL)

            doc.setId(id.group(0))

            if value is not None:

                doc.setTexte(value.group(1).replace("\n", ' '))
            else:
                doc.setTexte("")

            collection[id.group(0)] = doc

        return collection
    def lockfile(self):

        if self.lockFile.text() == 'Save':
            if self.lineEdit.text():
                if Path("../cacheModified").is_file():
                    self.uploadDoc(True)
                    self.lockFile.setText("Lock")
        else:
            if self.lockFile.text() == 'Lock':
                print('lock here')
                Document.changeLock(self.email, self.lineEdit.text(), True)
                self.lockFile.setText("Unlock")
            else:
                print('unlock here')
                Document.changeLock(self.email, self.lineEdit.text(), False)
                self.lockFile.setText("Lock")
示例#26
0
    def extractWithTemplate(self, template, xOffset=0, yOffset=0):
        if not template:
            return None
        document = Document()
        for templateBox in template.boxes:
            rect = QRectF(templateBox.rect)
            rect.translate(xOffset, yOffset)

            text = self.textInRegion(rect, templateBox.recognizer)
            text = self.filter(text, templateBox.filter)
            documentBox = DocumentBox()
            documentBox.name = templateBox.name
            documentBox.text = text
            documentBox.templateBox = templateBox
            document.addBox(documentBox)
        return document
示例#27
0
 def createDocument(self, namespaceURI, qualifiedName, doctype):
     import Document
     doc = Document.Document(doctype)
     if qualifiedName:
         el = doc.createElementNS(namespaceURI, qualifiedName)
         doc.appendChild(el)
     return doc
示例#28
0
    def buildDocCollectionSimple2(self, chemin_doc):

        file = open(chemin_doc, "r")
        lignes = file.readlines()
        length = len(lignes)
        collection = {}

        i = 0

        while i < length:
            key = ""
            value = ""
            if ".I" in lignes[i]:
                key = lignes[i][3:-1]
                doc = Document.Document()
                doc.setId(key)
                i += 1
                while ".T" not in lignes[i]:
                    i += 1
                i += 1
                while i < length and "." not in lignes[i]:
                    value += lignes[i]
                    i += 1
                doc.setTexte(value[:-1])
                collection[key] = doc
            else:
                i += 1

        file.close()

        return collection
示例#29
0
	def extractWithTemplate(self, template, xOffset = 0, yOffset = 0): 
		if not template:
			return None
		document = Document()
		for templateBox in template.boxes:
			rect = QRectF( templateBox.rect )
			rect.translate( xOffset, yOffset )

			text = self.textInRegion( rect, templateBox.recognizer )
			text = self.filter( text, templateBox.filter )
			documentBox = DocumentBox()
			documentBox.name = templateBox.name
			documentBox.text = text
			documentBox.templateBox = templateBox
			document.addBox( documentBox )
		return document
示例#30
0
 def readDocuments(self):
     i = 0
     while i < self.numFiles:
         self.docDictionary[i] = Document(self.fileDictionary[i])
         self.docDictionary[i].generateWhole()
         self.wordListDictionary[i] = self.docDictionary[i].getWordList()
         i += 1
     print("Read Documents.")
示例#31
0
 def getDocument(self, text):
     docId = re.search("\.I\s(.*)", text).group(1)
     docTitle = re.search("\.T\s(.*)", text).group(1)
     docText = re.search("\.W\s(.*)", text).group(1)
     docDate = re.search("\.B\s(.*)", text).group(1)
     doc = Doc.Document(docId, docTitle+"\n"+docText+"\n"+docDate,
                        others=dict())
     return doc
示例#32
0
    def addMember(self, id, password, roles, domains, properties=None):
        '''Adds a new member to the user folder.  Security checks will have
        already been performed.  Called by portal_registration.
        '''
        Products.CMFCore.MembershipTool.MembershipTool.addMember( self
                                                                , id
                                                                , password
                                                                , roles
                                                                , domains
                                                                , properties
                                                                )
        member = self.getMemberById(id)
        if hasattr(getattr(member, 'aq_base', member), 'getUser'):
            user = member.getUser()
        else:
            user = member

        if hasattr(self, 'Members'):
            # Create Member's home folder
            manage_addPortalFolder(self.Members, id)
            f=getattr(self.Members, id)

            f.manage_permission('View',
                                ['Owner','Manager','Reviewer'], 0)
            f.manage_permission('Access contents information',
                                ['Owner','Manager','Reviewer'], 0)
            
            # Grant ownership to Member
            try: f.changeOwnership(user)
            except AttributeError: pass  # Zope 2.1.x compatibility
            f.manage_setLocalRoles(id, ['Owner'])

            # Create Member's home page.
            # default_member_content ought to be configurable per
            # instance of MembershipTool.
            Document.addDocument(
                f,
                'index_html',
                id+"'s Home",
                id+"'s front page",
                "structured-text",
                (default_member_content % id)
                )
            # Overcome an apparent catalog bug.
            f.index_html.reindexObject()
示例#33
0
    def setPermission(self, filename, permissionINT):
        """each document default permission is private"""
        """
            permission: 1: public 2: restrict 3: shared 4: private
        """

        if permissionINT == 1:
            permission = "public"
        elif permissionINT == 2:
            permission = "restrict"
        elif permissionINT == 3:
            permission = "shared"
        elif permissionINT == 4:
            permission = "private"
        else:
            return False

        Document.setPermission(self.email, filename, permission)
 def displayHistory(self):
     if self.lineEdit.text():
         allHistory = Document.listallhistory(self.email, self.filename)
         self.historyWindow = QtWidgets.QDialog()
         self.history = fileHistory.Ui_fileHistory()
         self.history.setupUi(self.historyWindow, allHistory, self.email,
                              self.filename)
         self.historyWindow.exec_()
         self.webView.reload()
示例#35
0
def getAllDocuments():
    files = os.listdir("./Docs")
    for i in range(len(files)):
        files[i] = "./Docs/" + files[i]
    docs = []
    for single_file in files:
        docs.append(Document(single_file))
    docs = sorted(docs)
    return docs
示例#36
0
def getTechDocuments():
    files = os.listdir("./Docs3/Technology")
    for i in range(len(files)):
        files[i] = "./Docs3/Technology/" + files[i]
    docs: List[Document.Document] = []
    for single_file in files:
        x = Document.Document(single_file, 0)
        docs.append(x)
    docs = sorted(docs)
    return docs
示例#37
0
    def __init__(self, parent=None):
        super(ScriptBook, self).__init__(parent)

        self.setWidgetIndexSignal.connect(self.set_widget_index)
        self.setPreviousIndexSignal.connect(self.set_previous_index)

        self.document = Document()
        self.handler = DocumentXmlHandler.DocumentXmlHandler()

        ## Set values for the store/restore settings system
        QtCore.QCoreApplication.setOrganizationName("EMR")
        QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no")
        QtCore.QCoreApplication.setApplicationName("ScriptBook")

        ## The button controller
        self.buttonController = NavigationController()
        self.buttonController.buttonClicked.connect(self.buttonClicked)

        ## The tools controller
        self.toolsController = ToolsController()
        self.toolsController.toolsClicked.connect(self.toolsClicked)

        ## The ftp login controller
        self.ftpController = FtpController()
        self.ftpController.connectSignal.connect(self.ftpConnect)
        self.ftpController.cancelSignal.connect(self.ftpCancel)

        ## The ftp entry list controller
        self.ftpEntryListController = FtpEntryListController()
        self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone)
        self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone)
        self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone)
        self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading)
        self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead)


        ## Set up UI components
        self.setupUI()
示例#38
0
from Dictionary import *
from Document import *



teste = Dictionary("asdf")
#print("eh assim msm"+teste.dicionario[0])
teste.structureDictionary()
print(teste.dictionaryMatrix)
print(teste.dictionaryList)

#print("teste")

testeDocument = Document("asdf")
testeDocument.openDocument()
print(testeDocument.document)
示例#39
0
class ScriptBook(QtGui.QStackedWidget):
    ## The set widget index signal
    setWidgetIndexSignal = QtCore.Signal(int)

    ## The set previous index signal
    setPreviousIndexSignal = QtCore.Signal()

    ## current index
    _widget_index = int(-1)

    ## previous index
    _previous_index = int(-1)

    ## set index slot
    @QtCore.Slot(QtCore.QObject, QtCore.QObject)
    def set_widget_index(self, index):
        print 'DEBUG set_widget_index', index

        self._previous_index = self._widget_index
        self.setCurrentIndex(index)
        self._widget_index = index

    ## set previous index slot
    @QtCore.Slot(QtCore.QObject)
    def set_previous_index(self):
        print 'DEBUG set_previous_index'

        self.setCurrentIndex(self._previous_index)
        previous = self._previous_index
        self._previous_index = self._widget_index
        self._widget_index = previous



    def __init__(self, parent=None):
        super(ScriptBook, self).__init__(parent)

        self.setWidgetIndexSignal.connect(self.set_widget_index)
        self.setPreviousIndexSignal.connect(self.set_previous_index)

        self.document = Document()
        self.handler = DocumentXmlHandler.DocumentXmlHandler()

        ## Set values for the store/restore settings system
        QtCore.QCoreApplication.setOrganizationName("EMR")
        QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no")
        QtCore.QCoreApplication.setApplicationName("ScriptBook")

        ## The button controller
        self.buttonController = NavigationController()
        self.buttonController.buttonClicked.connect(self.buttonClicked)

        ## The tools controller
        self.toolsController = ToolsController()
        self.toolsController.toolsClicked.connect(self.toolsClicked)

        ## The ftp login controller
        self.ftpController = FtpController()
        self.ftpController.connectSignal.connect(self.ftpConnect)
        self.ftpController.cancelSignal.connect(self.ftpCancel)

        ## The ftp entry list controller
        self.ftpEntryListController = FtpEntryListController()
        self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone)
        self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone)
        self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone)
        self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading)
        self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead)


        ## Set up UI components
        self.setupUI()


    def setupUI(self):
        ## The document view, controller and  model
        self.documentView = QtDeclarative.QDeclarativeView()
        self.documentView.setWindowTitle('Documents')
        self.documentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.documentController = DocumentController()
        self.documentController.documentClicked.connect(self.documentClicked)
        self.documentView.rootContext().setContextProperty('controller', self.documentController)
        self.documentView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.documentList = DocumentModel([])
        self.documentView.rootContext().setContextProperty('documentListModel', self.documentList)
        self.documentView.setSource(QtCore.QUrl('qml/DocumentListModel.qml'))


        ## The book view, controller and  model
        self.bookView = QtDeclarative.QDeclarativeView()
        self.bookView.setWindowTitle('Books')
        self.bookView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.bookController = BookController()
        self.bookController.bookClicked.connect(self.bookClicked)
        self.bookView.rootContext().setContextProperty('controller', self.bookController)
        self.bookView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.bookList = BookModel([])
        self.bookView.rootContext().setContextProperty('bookListModel', self.bookList)
        self.bookView.setSource(QtCore.QUrl('qml/BookListModel.qml'))

        ## The chapter view, controller and  model
        self.chapterView = QtDeclarative.QDeclarativeView()
        self.chapterView.setWindowTitle('Chapter')
        self.chapterView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.chapterController = ChapterController()
        self.chapterController.chapterClicked.connect(self.chapterClicked)
        self.chapterView.rootContext().setContextProperty('controller', self.chapterController)
        self.chapterView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.chapterList = ChapterModel([])
        self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList)
        self.chapterView.setSource(QtCore.QUrl('qml/ChapterListModel.qml'))

        ## The chapter view, controller and  model
        self.verseView = QtDeclarative.QDeclarativeView()
        self.verseView.setWindowTitle('Verse')
        self.verseView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.verseController = VerseController()
        self.verseController.verseClicked.connect(self.verseClicked)
        self.verseView.rootContext().setContextProperty('controller', self.verseController)
        self.verseView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.verseList = VerseModel([])
        self.verseView.rootContext().setContextProperty('verseListModel', self.verseList)
        self.verseView.setSource(QtCore.QUrl('qml/VerseListModel.qml'))

        ## The tools view
        self.toolsView = QtDeclarative.QDeclarativeView()
        self.toolsView.setWindowTitle('Tools')
        self.toolsView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.toolsView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.toolsView.rootContext().setContextProperty('toolsController', self.toolsController)
        self.toolsView.setSource(QtCore.QUrl('qml/Tools.qml'))

        ## The ftp login view
        self.ftpLoginView = QtDeclarative.QDeclarativeView()
        self.ftpLoginView.setWindowTitle('Ftp login')
        self.ftpLoginView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.ftpLoginView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.ftpLoginView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.ftpLoginView.setSource(QtCore.QUrl('qml/FtpLogin.qml'))

        ## The ftp directory view
        self.directoryView = QtDeclarative.QDeclarativeView()
        self.directoryView.setWindowTitle('Ftp directories')
        self.directoryView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.directoryController = DirectoryController()
        self.directoryController.directoryClicked.connect(self.directoryClicked)
        self.directoryView.rootContext().setContextProperty('controller', self.directoryController)
        self.directoryList = DirectoryModel([])
        self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList)
        self.directoryView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.directoryView.setSource(QtCore.QUrl('qml/FtpDirectoryListModel.qml'))
        self.directoryView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The ftp file view
        self.fileView = QtDeclarative.QDeclarativeView()
        self.fileView.setWindowTitle('Ftp xml files')
        self.fileView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.fileController = FileList.FileController()
        self.fileController.fileClicked.connect(self.fileClicked)
        self.fileView.rootContext().setContextProperty('controller', self.fileController)
        self.fileList = FileList.FileModel([])
        self.fileView.rootContext().setContextProperty('fileListModel', self.fileList)
        self.fileView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.fileView.setSource(QtCore.QUrl('qml/FtpFileListModel.qml'))
        self.fileView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The downloading view
        self.downloadingView = QtDeclarative.QDeclarativeView()
        self.downloadingView.setWindowTitle('Download Done')
        self.downloadingView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.downloadingView.setSource(QtCore.QUrl('qml/Downloading.qml'))
        self.downloadingView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The download done view
        self.downloadDoneView = QtDeclarative.QDeclarativeView()
        self.downloadDoneView.setWindowTitle('Download Done')
        self.downloadDoneView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.downloadDoneView.setSource(QtCore.QUrl('qml/DownloadDone.qml'))
        self.downloadDoneView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The loading document view
        self.loadingDocumentView = QtDeclarative.QDeclarativeView()
        self.loadingDocumentView.setWindowTitle('Loading Document')
        self.loadingDocumentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.loadingDocumentView.setSource(QtCore.QUrl('qml/LoadingDocument.qml'))
        self.loadingDocumentView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## Add the book, chapter and verse view's
        self.addWidget(self.documentView)
        self.addWidget(self.bookView)
        self.addWidget(self.chapterView)
        self.addWidget(self.verseView)
        self.addWidget(self.ftpLoginView)
        self.addWidget(self.directoryView)
        self.addWidget(self.fileView)
        self.addWidget(self.toolsView)
        self.addWidget(self.downloadingView)
        self.addWidget(self.downloadDoneView)
        self.addWidget(self.loadingDocumentView)

        ## Set window title, set geometry and show
        self.setWindowTitle('ScriptBook')
        self.setGeometry(400, 200, 280, 430)
        self.show()

        ## Load settings
        self.loadSettings()

        ## Load documents
        self.displayDocuments()

        print 'DEBUG emiting set widget index signal'
        self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView)


    def ftpReadyRead(self, bytes):
        print 'readyRead bytes:', bytes


    ## Reackt on Tool Button Click
    def toolsClicked(self, entry):
        if int(entry) == 0:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
        elif int(entry) == 1:
            print 'toolsClicked: Font settings - not implemented'
        elif int(entry) == 2:
            print 'toolsClicked: Bookmars - not implemented'
        else:
            print 'toolsClicked: unknonw'


    def ftpConnect(self, host, port):
        self.ftpEntryListController.setHostPort(host, port)
        self.ftpEntryListController.setDirectory(".")
        self.ftpEntryListController.directoryList()


    def ftpCancel(self):
        if self.currentWidget() == self.fileView:
            self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView)
            #self.setCurrentWidget(self.directoryView)
        elif self.currentWidget() == self.directoryView:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
        elif self.currentWidget() == self.ftpLoginView:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)
        else:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)


    def ftpDirectoryListDone(self):
        print 'ftpDirectoryListDone'
        directoryListItems = []
        directories = self.ftpEntryListController.list()
        #print 'directories', directories
        if len(directories) > int(0):
            for d in directories:
                directoryListItems.append(DirectoryListWrapper(str(d)))
                print d

            self.directoryList = DirectoryModel(directoryListItems)
            self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList)
            self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView)
            #self.setCurrentWidget(self.directoryView)


    def directoryClicked(self, name):
        print 'directoryClicked', name
        self.ftpEntryListController.setDirectory(name)
        self.ftpEntryListController.fileList()


    def ftpFileListDone(self):
        print 'ftpFileListDone'
        fileListItems = []
        files = self.ftpEntryListController.list()
        if len(files) > int(0):
            print 'Directory contains', len(files), "entries"
            for f in files:
                fileListItems.append(FileList.FileListWrapper(str(f)))
                print f

            self.fileList = FileList.FileModel(fileListItems)
            self.fileView.rootContext().setContextProperty('fileListModel', self.fileList)
            self.setWidgetIndexSignal.emit(WidgetIndex().FileView)
            #self.setCurrentWidget(self.fileView)


    def ftpDownloading(self):
        print 'ftpDownloading'
        self.setWidgetIndexSignal.emit(WidgetIndex().DownloadingView)
        #self.setCurrentWidget(self.downloadingView)


    def ftpDownloadDone(self):
        ## Get content to local variable
        self._downloadedFile = self.ftpEntryListController.getFile()

        print 'ftpDownloadDone', len(self._downloadedFile)

        ## Write content to file
        f = open(self._filename, "w")
        f.write(self._downloadedFile)
        f.close()

        ## Set Download done Widget
        self.setWidgetIndexSignal.emit(WidgetIndex().DownloadDoneView)


    def fileClicked(self, name):
        print 'fileClicked', name
        if name != str(""):
            self._filename = name
            self.ftpEntryListController.downloadFile(self._filename)


    def findXmlFiles(self):
        xmlFiles = []
        directory = QtCore.QDir()

        ## Go through directory content and look for xml files
        for e in directory.entryList():
            if e == '.' or e == '..':
                continue

            ## Split filename string on '.' and check if last part is 'xml'
            f = e.split('.')
            if len(f) == 2:
                if f[1] == 'xml':
                    ## XML file - append
                    xmlFiles.append(e)

        return xmlFiles


    def loadSettings(self):
        ## Read the settings
        settings = QtCore.QSettings()

        ## The ftp host and port
        self.ftpHost = settings.value("ScriptBook/ftpHost", "localhost")
        self.ftpPort = settings.value("ScriptBook/ftpPort", "21")

        ## Update the view through the controller
        self.ftpController.setHost(self.ftpHost)
        self.ftpController.onHostChanged.emit(str(self.ftpHost))
        self.ftpController.setPort(self.ftpPort)
        self.ftpController.onPortChanged.emit(str(self.ftpPort))

        document = settings.value("ScriptBook/document")
        book = settings.value("ScriptBook/book")
        chapter = settings.value("ScriptBook/chapter")
        vers = settings.value("ScriptBook/vers")

        ## Look for xml files in directory
        xmlFiles = self.findXmlFiles()

        ## If we don't have any xml files, load ftp login view
        if len(xmlFiles) == 0:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
            return

        ## If there are no document give we cannot preload anything
        if document == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If we don't have the requested document we cannot preload it
        if xmlFiles.__contains__(str(document)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If we fail to open the file, set document view as page
        if self.openFile(document) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If book is not give, load the book view
        if book == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
            return

        ## SHOULD GIVE PROPER ERROR PAGE HERE
        if self.loadBook(int(book)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
            return

        ## If chapter is not give, show chapter view
        if chapter == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            return

        ## SHOULD GIVE PROPER ERROR PAGE HERE
        if self.loadChapter(int(chapter)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            return

        self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
        #self.setCurrentWidget(self.verseView)
            

    def displayDocuments(self):
        documentListItems = []        
        dirFilter = []
        dirFilter.append('*.xml')
        directory = QtCore.QDir()
        dirList = directory.entryList(dirFilter)
        if len(dirList) > 0:
            count = int(1)
            for entry in directory.entryInfoList(dirFilter):
                documentListItems.append(DocumentListWrapper(str(count), str(entry.size()), str(entry.fileName())))
                count += 1

            self.documentList = DocumentModel(documentListItems)
            self.documentView.rootContext().setContextProperty('documentListModel', self.documentList)

        else:
            print 'No XML files in directory' # TBD Inform user


    def documentClicked(self, document):
        #print 'documentClicked', document

        if self.openFile(document) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)


    def loadBook(self, book):
        chapterListItems = []

        try: ## TBD inform user - rewrite this
            books = self.document.books()
            for b in books:
                if int(b.document_entry) == int(book):
                    ## Book requested found
                    self.book = b

                    ## Append chapters in book into chapterListItems
                    chapters = self.book.chap()
                    for c in chapters:
                        chapterListItems.append(ChapterListWrapper(c.no, c.verses, c.vers()[0].text))
                    break

            self.chapterList = ChapterModel(chapterListItems)
            self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList)
            return True
        except:
            return False


    def bookClicked(self, book):
        if self.loadBook(book) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            self.setWindowTitle(str("ScriptBook %s" % self.book.name))


    def loadChapter(self, chapter):
        try:
            verseListItems = []
            chapters = self.book.chap()
            for c in chapters:
                if int(c.no) == int(chapter):
                    v = c.vers()
                    for i in v:
                        textstring = str("%s %s" % (str(i.number), i.text))
                        verseListItems.append(VerseListWrapper(int(i.number), textstring))
                        #verseListItems.append(VerseListWrapper(int(i.number), str(i.text)))
                    break

            self.verseList = VerseModel(verseListItems)
            self.verseView.rootContext().setContextProperty('verseListModel', self.verseList)
            return True
        except:
            print 'loadChapter failed'
            return False


    def chapterClicked(self, chapter):
        if self.loadChapter(chapter) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
            #self.setCurrentWidget(self.verseView)

            ## Write bookmark to settings
            settings = QtCore.QSettings()
            settings.setValue("ScriptBook/verse", "1")                       ## Reset verse to first vers
            settings.setValue("ScriptBook/chapter", chapter)                 ## Write chapter
            settings.setValue("ScriptBook/book", self.book.document_entry)   ## Book is not stored before a chapter is choosen


    def verseClicked(self, verse):
        ## Write the verse to settings (needed ?)
        ## Note what verse was clicked (we wind to this place at restore) - do this more dynamic (onContenYChanged ?)
        settings = QtCore.QSettings()
        settings.setValue("ScriptBook/verse", verse)

        ## Shoud give pop up options here
        ## 1. Save bookmark
        ## 2. Save note
        ## 3. Higlight (set different font and background color)


    def buttonClicked(self, button):
        print 'buttonClicked: button', button
        if button == 0:
            self.displayDocuments()
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
        elif button == 1:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
        elif button == 2:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
        elif button == 3:
            self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
            #self.setCurrentWidget(self.verseView)
        elif button == 4:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)

        ## Back button on Donwload done
        elif button == 10:
            print 'button == 10'
            self.setWidgetIndexSignal.emit(WidgetIndex().FileView)
            #self.setCurrentWidget(self.fileView)

        ## Cancel download
        elif button == 11:
            print 'button == 11 Cancel button'
            self.setPreviousIndexSignal.emit()

        elif button == 12:
            print'button == 12 Load document (self._filename)'
            if self.openFile(self._filename) == True:
                self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
                #self.setCurrentWidget(self.bookView)


    def loadDocument(self):
        self.bookListItems = []

        books = self.document.books()
        for b in books:
            self.bookListItems.append(BookListWrapper(b.document_entry, b.name, b.chapters))

        return True


    def openFile(self, filename):

        ## Open xml file
        file = QtCore.QFile(filename)
        if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
            QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot read file \n%s:\n." % filename)
            self.setPreviousIndexSignal.emit()
            return False

        ## Initialize xml reader
        reader = QtXml.QXmlSimpleReader()

        ## Set values for the store/restore settings system
        QtCore.QCoreApplication.setOrganizationName("EMR")
        QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no")
        QtCore.QCoreApplication.setApplicationName("ScriptBook")

        ## The button controller
        self.buttonController = NavigationController()
        self.buttonController.buttonClicked.connect(self.buttonClicked)

        ## The tools controller
        self.toolsController = ToolsController()
        self.toolsController.toolsClicked.connect(self.toolsClicked)

        ## The ftp login controller
        self.ftpController = FtpController()
        self.ftpController.connectSignal.connect(self.ftpConnect)
        self.ftpController.cancelSignal.connect(self.ftpCancel)

        ## The ftp entry list controller
        self.ftpEntryListController = FtpEntryListController()
        self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone)
        self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone)
        self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone)
        self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading)
        self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead)


        ## Set up UI components
        self.setupUI()


    def setupUI(self):
        ## The document view, controller and  model
        self.documentView = QtDeclarative.QDeclarativeView()
        self.documentView.setWindowTitle('Documents')
        self.documentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.documentController = DocumentController()
        self.documentController.documentClicked.connect(self.documentClicked)
        self.documentView.rootContext().setContextProperty('controller', self.documentController)
        self.documentView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.documentList = DocumentModel([])
        self.documentView.rootContext().setContextProperty('documentListModel', self.documentList)
        self.documentView.setSource(QtCore.QUrl('qml/DocumentListModel.qml'))


        ## The book view, controller and  model
        self.bookView = QtDeclarative.QDeclarativeView()
        self.bookView.setWindowTitle('Books')
        self.bookView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.bookController = BookController()
        self.bookController.bookClicked.connect(self.bookClicked)
        self.bookView.rootContext().setContextProperty('controller', self.bookController)
        self.bookView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.bookList = BookModel([])
        self.bookView.rootContext().setContextProperty('bookListModel', self.bookList)
        self.bookView.setSource(QtCore.QUrl('qml/BookListModel.qml'))

        ## The chapter view, controller and  model
        self.chapterView = QtDeclarative.QDeclarativeView()
        self.chapterView.setWindowTitle('Chapter')
        self.chapterView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.chapterController = ChapterController()
        self.chapterController.chapterClicked.connect(self.chapterClicked)
        self.chapterView.rootContext().setContextProperty('controller', self.chapterController)
        self.chapterView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.chapterList = ChapterModel([])
        self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList)
        self.chapterView.setSource(QtCore.QUrl('qml/ChapterListModel.qml'))

        ## The chapter view, controller and  model
        self.verseView = QtDeclarative.QDeclarativeView()
        self.verseView.setWindowTitle('Verse')
        self.verseView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.verseController = VerseController()
        self.verseController.verseClicked.connect(self.verseClicked)
        self.verseView.rootContext().setContextProperty('controller', self.verseController)
        self.verseView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.verseList = VerseModel([])
        self.verseView.rootContext().setContextProperty('verseListModel', self.verseList)
        self.verseView.setSource(QtCore.QUrl('qml/VerseListModel.qml'))

        ## The tools view
        self.toolsView = QtDeclarative.QDeclarativeView()
        self.toolsView.setWindowTitle('Tools')
        self.toolsView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.toolsView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.toolsView.rootContext().setContextProperty('toolsController', self.toolsController)
        self.toolsView.setSource(QtCore.QUrl('qml/Tools.qml'))

        ## The ftp login view
        self.ftpLoginView = QtDeclarative.QDeclarativeView()
        self.ftpLoginView.setWindowTitle('Ftp login')
        self.ftpLoginView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.ftpLoginView.rootContext().setContextProperty('buttonController', self.buttonController)
        self.ftpLoginView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.ftpLoginView.setSource(QtCore.QUrl('qml/FtpLogin.qml'))

        ## The ftp directory view
        self.directoryView = QtDeclarative.QDeclarativeView()
        self.directoryView.setWindowTitle('Ftp directories')
        self.directoryView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.directoryController = DirectoryController()
        self.directoryController.directoryClicked.connect(self.directoryClicked)
        self.directoryView.rootContext().setContextProperty('controller', self.directoryController)
        self.directoryList = DirectoryModel([])
        self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList)
        self.directoryView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.directoryView.setSource(QtCore.QUrl('qml/FtpDirectoryListModel.qml'))
        self.directoryView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The ftp file view
        self.fileView = QtDeclarative.QDeclarativeView()
        self.fileView.setWindowTitle('Ftp xml files')
        self.fileView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.fileController = FileList.FileController()
        self.fileController.fileClicked.connect(self.fileClicked)
        self.fileView.rootContext().setContextProperty('controller', self.fileController)
        self.fileList = FileList.FileModel([])
        self.fileView.rootContext().setContextProperty('fileListModel', self.fileList)
        self.fileView.rootContext().setContextProperty('ftpController', self.ftpController)
        self.fileView.setSource(QtCore.QUrl('qml/FtpFileListModel.qml'))
        self.fileView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The downloading view
        self.downloadingView = QtDeclarative.QDeclarativeView()
        self.downloadingView.setWindowTitle('Download Done')
        self.downloadingView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.downloadingView.setSource(QtCore.QUrl('qml/Downloading.qml'))
        self.downloadingView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The download done view
        self.downloadDoneView = QtDeclarative.QDeclarativeView()
        self.downloadDoneView.setWindowTitle('Download Done')
        self.downloadDoneView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.downloadDoneView.setSource(QtCore.QUrl('qml/DownloadDone.qml'))
        self.downloadDoneView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## The loading document view
        self.loadingDocumentView = QtDeclarative.QDeclarativeView()
        self.loadingDocumentView.setWindowTitle('Loading Document')
        self.loadingDocumentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
        self.loadingDocumentView.setSource(QtCore.QUrl('qml/LoadingDocument.qml'))
        self.loadingDocumentView.rootContext().setContextProperty('buttonController', self.buttonController)

        ## Add the book, chapter and verse view's
        self.addWidget(self.documentView)
        self.addWidget(self.bookView)
        self.addWidget(self.chapterView)
        self.addWidget(self.verseView)
        self.addWidget(self.ftpLoginView)
        self.addWidget(self.directoryView)
        self.addWidget(self.fileView)
        self.addWidget(self.toolsView)
        self.addWidget(self.downloadingView)
        self.addWidget(self.downloadDoneView)
        self.addWidget(self.loadingDocumentView)

        ## Set window title, set geometry and show
        self.setWindowTitle('ScriptBook')
        self.setGeometry(400, 200, 280, 430)
        self.show()

        ## Load settings
        self.loadSettings()

        ## Load documents
        self.displayDocuments()

        print 'DEBUG emiting set widget index signal'
        #self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView)


    def ftpReadyRead(self, bytes):
        print 'readyRead bytes:', bytes


    ## Reackt on Tool Button Click
    def toolsClicked(self, entry):
        if int(entry) == 0:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
        elif int(entry) == 1:
            print 'toolsClicked: Font settings - not implemented'
        elif int(entry) == 2:
            print 'toolsClicked: Bookmars - not implemented'
        else:
            print 'toolsClicked: unknonw'


    def ftpConnect(self, host, port):
        self.ftpEntryListController.setHostPort(host, port)
        self.ftpEntryListController.setDirectory(".")
        self.ftpEntryListController.directoryList()


    def ftpCancel(self):
        if self.currentWidget() == self.fileView:
            self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView)
            #self.setCurrentWidget(self.directoryView)
        elif self.currentWidget() == self.directoryView:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
        elif self.currentWidget() == self.ftpLoginView:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)
        else:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)


    def ftpDirectoryListDone(self):
        print 'ftpDirectoryListDone'
        directoryListItems = []
        directories = self.ftpEntryListController.list()
        #print 'directories', directories
        if len(directories) > int(0):
            for d in directories:
                directoryListItems.append(DirectoryListWrapper(str(d)))
                print d

            self.directoryList = DirectoryModel(directoryListItems)
            self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList)
            self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView)
            #self.setCurrentWidget(self.directoryView)


    def directoryClicked(self, name):
        print 'directoryClicked', name
        self.ftpEntryListController.setDirectory(name)
        self.ftpEntryListController.fileList()


    def ftpFileListDone(self):
        print 'ftpFileListDone'
        fileListItems = []
        files = self.ftpEntryListController.list()
        if len(files) > int(0):
            print 'Directory contains', len(files), "entries"
            for f in files:
                fileListItems.append(FileList.FileListWrapper(str(f)))
                print f

            self.fileList = FileList.FileModel(fileListItems)
            self.fileView.rootContext().setContextProperty('fileListModel', self.fileList)
            self.setWidgetIndexSignal.emit(WidgetIndex().FileView)
            #self.setCurrentWidget(self.fileView)


    def ftpDownloading(self):
        print 'ftpDownloading'
        self.setWidgetIndexSignal.emit(WidgetIndex().DownloadingView)
        #self.setCurrentWidget(self.downloadingView)


    def ftpDownloadDone(self):
        ## Get content to local variable
        self._downloadedFile = self.ftpEntryListController.getFile()

        print 'ftpDownloadDone', len(self._downloadedFile)

        ## Write content to file
        f = open(self._filename, "w")
        f.write(self._downloadedFile)
        f.close()

        ## Set Download done Widget
        self.setWidgetIndexSignal.emit(WidgetIndex().DownloadDoneView)


    def fileClicked(self, name):
        print 'fileClicked', name
        if name != str(""):
            self._filename = name
            self.ftpEntryListController.downloadFile(self._filename)


    def findXmlFiles(self):
        xmlFiles = []
        directory = QtCore.QDir()

        ## Go through directory content and look for xml files
        for e in directory.entryList():
            if e == '.' or e == '..':
                continue

            ## Split filename string on '.' and check if last part is 'xml'
            f = e.split('.')
            if len(f) == 2:
                if f[1] == 'xml':
                    ## XML file - append
                    xmlFiles.append(e)

        return xmlFiles


    def loadSettings(self):
        ## Read the settings
        settings = QtCore.QSettings()

        ## The ftp host and port
        self.ftpHost = settings.value("ScriptBook/ftpHost", "localhost")
        self.ftpPort = settings.value("ScriptBook/ftpPort", "21")

        ## Update the view through the controller
        self.ftpController.setHost(self.ftpHost)
        self.ftpController.onHostChanged.emit(str(self.ftpHost))
        self.ftpController.setPort(self.ftpPort)
        self.ftpController.onPortChanged.emit(str(self.ftpPort))

        document = settings.value("ScriptBook/document")
        book = settings.value("ScriptBook/book")
        chapter = settings.value("ScriptBook/chapter")
        vers = settings.value("ScriptBook/vers")

        ## Look for xml files in directory
        xmlFiles = self.findXmlFiles()

        ## If we don't have any xml files, load ftp login view
        if len(xmlFiles) == 0:
            self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView)
            #self.setCurrentWidget(self.ftpLoginView)
            return

        ## If there are no document give we cannot preload anything
        if document == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If we don't have the requested document we cannot preload it
        if xmlFiles.__contains__(str(document)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If we fail to open the file, set document view as page
        if self.openFile(document) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
            return

        ## If book is not give, load the book view
        if book == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
            return

        ## SHOULD GIVE PROPER ERROR PAGE HERE
        if self.loadBook(int(book)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
            return

        ## If chapter is not give, show chapter view
        if chapter == None:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            return

        ## SHOULD GIVE PROPER ERROR PAGE HERE
        if self.loadChapter(int(chapter)) == False:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            return

        self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
        #self.setCurrentWidget(self.verseView)
            

    def displayDocuments(self):
        documentListItems = []        
        dirFilter = []
        dirFilter.append('*.xml')
        directory = QtCore.QDir()
        dirList = directory.entryList(dirFilter)
        if len(dirList) > 0:
            count = int(1)
            for entry in directory.entryInfoList(dirFilter):
                documentListItems.append(DocumentListWrapper(str(count), str(entry.size()), str(entry.fileName())))
                count += 1

            self.documentList = DocumentModel(documentListItems)
            self.documentView.rootContext().setContextProperty('documentListModel', self.documentList)

        else:
            print 'No XML files in directory' # TBD Inform user


    def documentClicked(self, document):
        #print 'documentClicked', document

        if self.openFile(document) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)


    def loadBook(self, book):
        chapterListItems = []

        try: ## TBD inform user - rewrite this
            books = self.document.books()
            for b in books:
                if int(b.document_entry) == int(book):
                    ## Book requested found
                    self.book = b

                    ## Append chapters in book into chapterListItems
                    chapters = self.book.chap()
                    for c in chapters:
                        chapterListItems.append(ChapterListWrapper(c.no, c.verses, c.vers()[0].text))
                    break

            self.chapterList = ChapterModel(chapterListItems)
            self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList)
            return True
        except:
            return False


    def bookClicked(self, book):
        if self.loadBook(book) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
            self.setWindowTitle(str("ScriptBook %s" % self.book.name))


    def loadChapter(self, chapter):
        try:
            verseListItems = []
            chapters = self.book.chap()
            for c in chapters:
                if int(c.no) == int(chapter):
                    v = c.vers()
                    for i in v:
                        textstring = str("%s %s" % (str(i.number), i.text))
                        verseListItems.append(VerseListWrapper(int(i.number), textstring))
                        #verseListItems.append(VerseListWrapper(int(i.number), str(i.text)))
                    break

            self.verseList = VerseModel(verseListItems)
            self.verseView.rootContext().setContextProperty('verseListModel', self.verseList)
            return True
        except:
            print 'loadChapter failed'
            return False


    def chapterClicked(self, chapter):
        if self.loadChapter(chapter) == True:
            self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
            #self.setCurrentWidget(self.verseView)

            ## Write bookmark to settings
            settings = QtCore.QSettings()
            settings.setValue("ScriptBook/verse", "1")                       ## Reset verse to first vers
            settings.setValue("ScriptBook/chapter", chapter)                 ## Write chapter
            settings.setValue("ScriptBook/book", self.book.document_entry)   ## Book is not stored before a chapter is choosen


    def verseClicked(self, verse):
        ## Write the verse to settings (needed ?)
        ## Note what verse was clicked (we wind to this place at restore) - do this more dynamic (onContenYChanged ?)
        settings = QtCore.QSettings()
        settings.setValue("ScriptBook/verse", verse)

        ## Shoud give pop up options here
        ## 1. Save bookmark
        ## 2. Save note
        ## 3. Higlight (set different font and background color)


    def buttonClicked(self, button):
        print 'buttonClicked: button', button
        if button == 0:
            self.displayDocuments()
            self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView)
            #self.setCurrentWidget(self.documentView)
        elif button == 1:
            self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
            #self.setCurrentWidget(self.bookView)
        elif button == 2:
            self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView)
            #self.setCurrentWidget(self.chapterView)
        elif button == 3:
            self.setWidgetIndexSignal.emit(WidgetIndex().VerseView)
            #self.setCurrentWidget(self.verseView)
        elif button == 4:
            self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView)
            #self.setCurrentWidget(self.toolsView)

        ## Back button on Donwload done
        elif button == 10:
            print 'button == 10'
            self.setWidgetIndexSignal.emit(WidgetIndex().FileView)
            #self.setCurrentWidget(self.fileView)

        ## Cancel download
        elif button == 11:
            print 'button == 11 Cancel button'
            self.setPreviousIndexSignal.emit()

        elif button == 12:
            print'button == 12 Load document (self._filename)'
            if self.openFile(self._filename) == True:
                self.setWidgetIndexSignal.emit(WidgetIndex().BookView)
                #self.setCurrentWidget(self.bookView)


    def loadDocument(self):
        self.bookListItems = []

        books = self.document.books()
        for b in books:
            self.bookListItems.append(BookListWrapper(b.document_entry, b.name, b.chapters))

        return True


    def openFile(self, filename):

        ## Open xml file
        file = QtCore.QFile(filename)
        if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
            QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot read file \n%s:\n." % filename)
            self.setPreviousIndexSignal.emit()
            return False

        ## Initialize xml reader
        reader = QtXml.QXmlSimpleReader()
        reader.setContentHandler(self.handler)
        reader.setErrorHandler(self.handler)

        ## xml input source
        xmlInputSource = QtXml.QXmlInputSource(file)

        ## Set loading document widget
        self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView)

        ## Parse xml file
        if reader.parse(xmlInputSource) == False:
            print "openFile Error:", self.handler.errorString()
            QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot parse file \n%s\n  %s\n" % (filename, self.handler.errorString()))
            self.setPreviousIndexSignal.emit()
            return False

        ## Copy document from the xml handler
        self.document = self.handler.document

        ## Check document
        if self.document.checkDocument() == False:
            print 'Loading documet failed'
            self.setPreviousIndexSignal.emit()
            return False

        ## Load Document
        if (self.loadDocument() == False):
            print 'openFile: loadDocument failed'
            self.setPreviousIndexSignal.emit()
            return False

        ## Populate book list
        self.bookList = BookModel(self.bookListItems)
        self.bookView.rootContext().setContextProperty('bookListModel', self.bookList)

        ## Set window title
        self.setWindowTitle(str(("ScriptBook %s" % self.document.description)))

        ## Backup settings
        settings = QtCore.QSettings()
        settings.setValue("ScriptBook/document", filename)
        settings.setValue("ScriptBook/book", None)
        settings.setValue("ScriptBook/chapter", None)
        settings.setValue("ScriptBook/verse", None)

        ## Set the previous widget (current is LoadinDocumentView), the caller should set the apropriate widget
        self.setPreviousIndexSignal.emit()

        return True
示例#40
0
from Vocabulary import *
from IndexBuilder import *
import sys
import time


if __name__ == '__main__':
    if len(sys.argv) < 3:
	print 'argument too few, need arg(lexdb, rootdir)'
    else:
	lexdb, rootdir = sys.argv[1], sys.argv[2]
	
	print 'Reading Dictionary...'
        token = Tokenizer(Dictionary(lexdb))
        reader = Reader(rootdir)
        document = Document()
        vocabulary = Vocabulary()
        indexBuilder = IndexBuilder()
	i = 1
	print 'Parsing...'
        for (filename, fullpath, filesize, create_time) in reader.txt_files(): 
            print 'Process %d: %s' % (i, fullpath)
	    i += 1
            token_stream = token.parse(fullpath)
            doc_id = document.add((filename, fullpath, filesize, create_time, len(token_stream)))
            vocabulary.add(doc_id, token_stream)
	print 'Saving vocabulary...'
        vocabulary.save()
	print 'Saving document...'
        document.save()
	print 'Building index...'
示例#41
0
def create_new_document(content):
    doc = Document("doc")
    doc.dictionary = doc.count_words(content)
    return doc