예제 #1
0
파일: detail.py 프로젝트: Paul-Nguyen/mint
 def parseFFmpeg(self, parent):
     if parent is not None:
         object = parent.getObject()
         if object is not None:
             payload = None
             try:
                 payload = object.getPayload("ffmpeg.info")
                 # Stream the content out to string
                 out = ByteArrayOutputStream()
                 IOUtils.copy(payload.open(), out)
                 payload.close()
                 self.__ffmpegRaw = out.toString("UTF-8")
                 out.close()
                 payload.close()
                 # And parse it
                 jsonData = JsonConfigHelper(self.__ffmpegRaw)
                 if jsonData is None:
                     return False
                 else:
                     self.__ffmpegData = jsonData.getJsonMap("/outputs")
                     return True
             except:
                 if payload is not None:
                     payload.close()
     return False
예제 #2
0
 def __init__(self):
     self.__portal = Services.portalManager.get(portalId)
     self.__result = JsonConfigHelper()
     self.__pageNum = sessionState.get("pageNum", 1)
     self.__selected = []
     self.__storage = Services.storage
     uri = URLDecoder.decode(request.getAttribute("RequestURI"))
     basePath = portalId + "/" + pageName
     self.__oid = uri[len(basePath)+1:]
     slash = self.__oid.rfind("/")
     self.__pid = self.__oid[slash+1:]
     payload = self.__storage.getPayload(self.__oid, self.__pid)
     if payload is not None:
         self.__mimeType = payload.contentType
     else:
         self.__mimeType = "application/octet-stream"
     self.__metadata = JsonConfigHelper()
     print " * combined.py: uri='%s' oid='%s' pid='%s' mimeType='%s'" % (uri, self.__oid, self.__pid, self.__mimeType)
     self.__search()
예제 #3
0
파일: detail.py 프로젝트: Paul-Nguyen/mint
 def __readManifest(self, oid):
     object = self.services.getStorage().getObject(oid)
     sourceId = object.getSourceId()
     payload = object.getPayload(sourceId)
     payloadReader = InputStreamReader(payload.open(), "UTF-8")
     manifest = JsonConfigHelper(payloadReader)
     payloadReader.close()
     payload.close()
     object.close()
     return manifest
예제 #4
0
    def __getMetadata(self, oid):
        req = SearchRequest('id:%s' % oid)
        req.setParam("fq", 'item_type:"object"')

        # Make sure 'fq' has already been set in the session
        ##security_roles = self.authentication.get_roles_list();
        ##security_query = 'security_filter:("' + '" OR "'.join(security_roles) + '")'
        ##req.addParam("fq", security_query)

        out = ByteArrayOutputStream()
        indexer = self.services.getIndexer()
        indexer.search(req, out)
        result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
        #self.log.info("result={}", result.toString())
        return result.getJsonList("response/docs").get(0)
예제 #5
0
 def __getFeed(self):
     portal = self.services.getPortalManager().get(self.portalId)
     req = SearchRequest("*:*")
     req.setParam("facet", "true")
     req.setParam("rows", "1000")
     req.setParam("facet.field", portal.facetFieldList)
     req.setParam("facet.sort", "true")
     req.setParam("facet.limit", str(portal.facetCount))
     req.setParam("sort", "f_dc_title asc")
     req.setParam("fq", 'item_type:"object"')
     portalQuery = portal.getQuery()
     if portalQuery:
         req.addParam("fq", portalQuery)
     
     out = ByteArrayOutputStream()
     self.services.getIndexer().search(req, out)
     return JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
예제 #6
0
    def __getAuthorDetails(self, authorIds):
        query = " OR id:".join(authorIds)
        req = SearchRequest('id:%s' % query)
        req.setParam("fq", 'recordtype:"author"')
        req.addParam("fq", 'item_type:"object"')
        req.setParam("rows", "9999")

        # Make sure 'fq' has already been set in the session
        ##security_roles = self.authentication.get_roles_list();
        ##security_query = 'security_filter:("' + '" OR "'.join(security_roles) + '")'
        ##req.addParam("fq", security_query)

        out = ByteArrayOutputStream()
        indexer = self.services.getIndexer()
        indexer.search(req, out)
        result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
        return result.getJsonList("response/docs")
예제 #7
0
    def getAuthorities(self):
        req = SearchRequest('package_node_id:%s' % self.metadata.get("id"))
        req.setParam("fq", 'recordtype:"master"')
        req.addParam("fq", 'item_type:"object"')
        req.setParam("rows", "9999")

        # Make sure 'fq' has already been set in the session
        ##security_roles = self.authentication.get_roles_list();
        ##security_query = 'security_filter:("' + '" OR "'.join(security_roles) + '")'
        ##req.addParam("fq", security_query)

        out = ByteArrayOutputStream()
        indexer = self.services.getIndexer()
        indexer.search(req, out)
        result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))

        docs = result.getJsonList("response/docs")

        return docs
예제 #8
0
    def __activate__(self, context):
        self.auth = context["page"].authentication
        self.log = context["log"]
        self.log.info("Manual VITAL integration request received")

        response = context["response"]
        writer = response.getPrintWriter("text/plain; charset=UTF-8")

        result = JsonConfigHelper()
        result.set("status", "error")
        result.set("message", "An unknown error has occurred")

        if self.auth.is_logged_in() and self.auth.is_admin():
            self.log.info("VITAL: Valid administrative user")
            formData = context["formData"]
            func = formData.get("func")
            oid = formData.get("oid")
            if func == "refresh":
                if oid:
                    self.log.info("VITAL: Refresh event: '{}'", oid)
                    self.sendMessage(oid)
                    result.set("status", "ok")
                    result.set("message",
                               "Object '%s' queued for refresh" % oid)
                else:
                    self.log.info("VITAL: No OID provided (500)")
                    response.setStatus(500)
                    result.set("message", "No object specified for refresh")
            else:
                self.log.info("VITAL: Unknown action '{}' (500)", func)
                response.setStatus(500)
                result.set("message", "Unknown action '%s'" % func)
        else:
            self.log.info("VITAL: Not an administrative user (500)")
            response.setStatus(500)
            result.set("message",
                       "Only administrative users can access this API")
        writer.println(result.toString(True))
        writer.close()
예제 #9
0
    def getSearchTerms(self):
        searchTerms = []

        prefix = self.getSuggestionPrefix()
        query = '%(prefix)s OR %(prefix)s*' % {"prefix": prefix}
        req = SearchRequest(query)
        req.addParam("fq", self.page.getPortal().getQuery())
        req.addParam("fq", 'item_type:"object"')
        req.setParam("rows", "50")
        req.setParam("fl", "score,id,dc_title")
        req.setParam("sort", "score desc")

        out = ByteArrayOutputStream()
        indexer = self.services.getIndexer()
        indexer.search(req, out)
        result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))

        docs = result.getJsonList("response/docs")
        for doc in docs:
            dc_title = doc.getList("dc_title").get(0)
            searchTerms.append(dc_title)

        return '", "'.join(searchTerms)
예제 #10
0
 def __search(self):
     recordsPerPage = self.__portal.recordsPerPage
     
     query = None
     if query is None or query == "":
         query = formData.get("query")
     if query is None or query == "":
         query = "*:*"
     
     req = SearchRequest(query)
     req.setParam("facet", "true")
     req.setParam("rows", "1000")
     req.setParam("facet.field", self.__portal.facetFieldList)
     req.setParam("facet.sort", "true")
     req.setParam("facet.limit", str(self.__portal.facetCount))
     req.setParam("sort", "f_dc_title asc")
     
     # setup facets
     action = formData.get("verb")
     value = formData.get("value")
     fq = sessionState.get("fq")
     if fq is not None:
         self.__pageNum = 1
         req.setParam("fq", fq)
     if action == "add_fq":
         self.__pageNum = 1
         name = formData.get("name")
         print " * add_fq: %s" % value
         req.addParam("fq", URLDecoder.decode(value, "UTF-8"))
     elif action == "remove_fq":
         self.__pageNum = 1
         req.removeParam("fq", URLDecoder.decode(value, "UTF-8"))
     elif action == "clear_fq":
         self.__pageNum = 1
         req.removeParam("fq")
     elif action == "select-page":
         self.__pageNum = int(value)
     req.addParam("fq", 'item_type:"object"')
     
     portalQuery = self.__portal.query
     print " * portalQuery=%s" % portalQuery
     if portalQuery:
         req.addParam("fq", portalQuery)
     
     self.__selected = req.getParams("fq")
     
     sessionState.set("fq", self.__selected)
     sessionState.set("pageNum", self.__pageNum)
     
     req.setParam("start", str((self.__pageNum - 1) * recordsPerPage))
     
     print " * combined.py:", req.toString(), self.__pageNum
     
     out = ByteArrayOutputStream()
     Services.indexer.search(req, out)
     self.__result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
     if self.__result is not None:
         self.__paging = Pagination(self.__pageNum,
                                    int(self.__result.get("response/numFound")),
                                    self.__portal.recordsPerPage)
         print " * combined.py: updating manifest..."
         portal = self.getPortal()
         manifest = portal.getJsonMap("manifest")
         #add new items from search
         for doc in self.__result.getList("response/docs"):
             hashId = md5.new(doc.get("id")).hexdigest()
             node = portal.get("manifest//node-%s" % hashId)
             print " ********node=", node
             if node is None:
                 portal.set("manifest/node-%s/title" % hashId, doc.get("dc_title").get(0))
                 portal.set("manifest/node-%s/id" % hashId, doc.get("id"))
         #remove manifest items missing from search result
         print manifest
         for key in manifest.keySet():
             item = manifest.get(key)
             id = item.get("id")
             doc = self.__result.getList('response/docs[@id="%s"]' % id)
             if len(doc) == 0:
                 portal.removePath("manifest//%s" % key)
         Services.getPortalManager().save(portal)
예제 #11
0
 def __search(self):
     req = SearchRequest('id:"%s"' % self.__oid)
     out = ByteArrayOutputStream()
     Services.indexer.search(req, out)
     self.__json = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
     self.__metadata = SolrDoc(self.__json)
예제 #12
0
    def __processRequest(self):
        depositUrl = "%s/sword/deposit.post" % portalPath
        sword = SwordSimpleServer(depositUrl)
        try:
            p = self.vc("request").path.split(
                self.vc("portalId") + "/" + self.vc("pageName") +
                "/")[1]  # portalPath
        except:
            p = ""
        if p == "post":
            print "\n--- post ---"
            c = sword.getClient()
            c.clearProxy()
            c.clearCredentials()
            postMsg = sword.getPostMessage()
            postMsg.filetype = "application/zip"
            postMsg.filepath = "/home/ward/Desktop/Test.zip"
            depositResponse = c.postFile(postMsg)
            return str(depositResponse)
        elif p == "servicedocument":
            #print "\n--- servicedocument ---"
            sdr = sword.getServiceDocumentRequest()
            sdr.username = self.vc("formData").get("username", "test")
            sdr.password = self.vc("formData").get("password", "test")
            if self.vc("formData").get("test"):
                depositUrl += "?test=1"
            sd = sword.doServiceDocument(sdr)  # get a serviceDocument
            out = self.vc("response").getPrintWriter("text/xml; charset=UTF-8")
            out.println(str(sd))
            out.close()
            self.velocityContext["pageName"] = "-noTemplate-"
            return sd
        elif p == "deposit.post":
            #print "\n--- deposit ---  formData='%s'" % str(formData)
            inputStream = self.vc("formData").getInputStream()
            headers = {}
            for x in self.vc("formData").getHeaders().entrySet():
                headers[x.getKey()] = x.getValue()
            deposit = sword.getDeposit()
            noOp = headers.get("X-No-Op") or "false"
            deposit.noOp = (noOp.lower()=="true") or \
                (formData.get("test") is not None)
            contentDisposition = headers.get("Content-Disposition", "")
            filename = ""
            if contentDisposition != "":
                try:
                    filename = contentDisposition.split("filename=")[1]
                    deposit.filename = filename
                except:
                    pass
            slug = headers.get("Slug")
            if slug is not None and slug != "":
                deposit.slug = slug
            #elif filename!="":
            #    deposit.slug = filename

            deposit.username = "******"
            deposit.password = deposit.username
            try:
                file = File.createTempFile("tmptf", ".zip")
                file.deleteOnExit()
                fos = FileOutputStream(file.getAbsolutePath())
                IOUtils.copy(inputStream, fos)
                fos.close()
                print "copied posted data to '%s'" % file.getAbsolutePath()
            except Exception, e:
                print "--- Exception - '%s'" % str(e)
            deposit.contentDisposition = file.getAbsolutePath()  #????
            deposit.file = inputStream
            depositResponse = sword.doDeposit(deposit)
            id = str(depositResponse.getEntry().id)
            try:
                print
                #imsPlugin = PluginManager.getTransformer("ims")
                jsonConfig = JsonConfig()
                #imsPlugin.init(jsonConfig.getSystemFile())
                #harvestClient = HarvestClient(jsonConfig.getSystemFile());
                storagePlugin = PluginManager.getStorage(
                    jsonConfig.get("storage/type"))
                #storagePlugin.init(jsonConfig.getSystemFile())

                setConfigUri = self.__getPortal().getClass().getResource(
                    "/swordRule.json").toURI()
                configFile = File(setConfigUri)
                harvestConfig = JsonConfigHelper(configFile)
                tFile = File.createTempFile("harvest", ".json")
                tFile.deleteOnExit()
                harvestConfig.set("configDir", configFile.getParent())
                harvestConfig.set("sourceFile", file.getAbsolutePath())
                harvestConfig.store(FileWriter(tFile))

                zipObject = GenericDigitalObject(id)
                zipObject.addPayload(FilePayload(file, id))
                #digitalObject = imsPlugin.transform(zipObject, file)
                qStorage = QueueStorage(storagePlugin, tFile)
                qStorage.init(jsonConfig.getSystemFile())
                qStorage.addObject(zipObject)
                if deposit.noOp:
                    print "-- Testing noOp='true' --"
                else:
                    # deposit the content
                    pass
            except Exception, e:
                print "---"
                print " -- Exception - '%s'" % str(e)
                print "---"
예제 #13
0
    def getSuggestedNames(self):
        # search common forms
        lookupNames = []
        surname = self.__metadata.getList("surname").get(0)
        firstName = self.__metadata.getList("firstName").get(0)
        firstInitial = firstName[0].upper()
        secondName = self.__metadata.getList("secondName")
        if not secondName.isEmpty():
            secondName = secondName.get(0)
        if secondName and secondName != "":
            secondInitial = secondName[0].upper()
            lookupNames.append("%s, %s. %s." %
                               (surname, firstInitial, secondInitial))
            lookupNames.append("%s, %s %s." %
                               (surname, firstName, secondInitial))
            lookupNames.append("%s, %s %s" % (surname, firstName, secondName))
            lookupNames.append("%s %s %s" % (firstName, secondName, surname))
        lookupNames.append("%s, %s." % (surname, firstInitial))
        lookupNames.append("%s, %s" % (surname, firstName))
        lookupNames.append("%s %s" % (firstName, surname))
        query = '" OR dc_title:"'.join(lookupNames)

        # general word search from each part of the name
        parts = [p for p in self.getPackageTitle().split(" ") if len(p) > 0]
        query2 = " OR dc_title:".join(parts)

        req = SearchRequest('(dc_title:"%s")^2.5 OR (dc_title:%s)^0.5' %
                            (query, query2))
        self.log.info("suggestedNames query={}", req.query)
        req.setParam("fq", 'recordtype:"author"')
        req.addParam("fq", 'item_type:"object"')
        req.setParam("rows", "9999")
        req.setParam("fl", "score")
        req.setParam("sort", "score desc")

        # Make sure 'fq' has already been set in the session
        ##security_roles = self.authentication.get_roles_list();
        ##security_query = 'security_filter:("' + '" OR "'.join(security_roles) + '")'
        ##req.addParam("fq", security_query)

        out = ByteArrayOutputStream()
        indexer = self.services.getIndexer()
        indexer.search(req, out)
        result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))

        #self.log.info("result={}", result.toString())
        docs = result.getJsonList("response/docs")

        map = LinkedHashMap()
        for doc in docs:
            authorName = doc.getList("dc_title").get(0)
            if map.containsKey(authorName):
                authorDocs = map.get(authorName)
            else:
                authorDocs = ArrayList()
                map.put(authorName, authorDocs)
            authorDocs.add(doc)

        self.__maxScore = max(1.0, float(result.get("response/maxScore")))

        return map