예제 #1
0
 def __init__(self, reactor, oaiPath, **kwargs):
     Observable.__init__(self, **kwargs)
     self._outside = Transparent()
     oaiJsonInfo = OaiJsonInfo()
     self._dynamicHtml = DynamicHtml(
         [dynamicPath],
         reactor=reactor,
         notFoundPage='notFound',
         additionalGlobals={
             'VERSION': VERSION,
             'oaiPath': oaiPath,
             'strftime': strftime,
             'localtime': localtime,
         })
     self._internalTree = be((
         Observable(),
         (PathFilter('/', excluding=['/static', '/version', '/json']), (
             self._dynamicHtml,
             (
                 oaiJsonInfo,
                 (self._outside, ),
             ),
         )),
         (PathFilter('/json'), (
             oaiJsonInfo,
             (self._outside, ),
         )),
         (PathFilter('/static'),
          (PathRename(lambda path: path[len('/static'):]),
           (FileServer(staticPath), ))),
         (PathFilter('/version'),
          (StringServer("Meresco Oai version %s" % VERSION,
                        ContentTypePlainText), )),
     ))
 def __init__(self,
              operation='searchRetrieve',
              version='1.2',
              recordSchema=None,
              **kwargs):
     Transparent.__init__(self, **kwargs)
     self._defaults = dict(operation=[operation], version=[version])
     if recordSchema:
         self._defaults['recordSchema'] = [recordSchema]
예제 #3
0
 def __init__(self,
              cacheTimeout=1 * 60 * 60,
              returnCachedValueInCaseOfException=False,
              backoffTimeout=None,
              **kwargs):
     Transparent.__init__(self, **kwargs)
     self._cache = TimedDictionary(timeout=cacheTimeout)
     self._returnCachedValueInCaseOfException = returnCachedValueInCaseOfException
     self._backoffTimeout = backoffTimeout
     self._backoffStarted = None
예제 #4
0
 def __init__(self, namespaces=None, inlineDescriptions=False, knownTypes=None, relativeTypePositions=None, **kwargs):
     Transparent.__init__(self, **kwargs)
     namespaces=namespaces or defaultNamespaces
     self._Triples2RdfXml = partial(_Triples2RdfXml,
         namespaces=namespaces,
         createElement=partial(_createElement, namespaces=namespaces),
         createSubElement=partial(_createSubElement, namespaces=namespaces),
         inlineDescriptions=inlineDescriptions,
         nodePromotedTypes=dict((namespaces.curieToUri(t), t) for t in (NODE_PROMOTED_TYPES.union(knownTypes or []))),
         relativeTypePositions=dict(RELATIVE_TYPE_POSITIONS, **(relativeTypePositions or {}))
     )
예제 #5
0
class OaiInfo(Observable):
    def __init__(self, reactor, oaiPath, **kwargs):
        Observable.__init__(self, **kwargs)
        self._outside = Transparent()
        oaiJsonInfo = OaiJsonInfo()
        self._dynamicHtml = DynamicHtml(
            [dynamicPath],
            reactor=reactor,
            notFoundPage='notFound',
            additionalGlobals={
                'VERSION': VERSION,
                'oaiPath': oaiPath,
                'strftime': strftime,
                'localtime': localtime,
            })
        self._internalTree = be((
            Observable(),
            (PathFilter('/', excluding=['/static', '/version', '/json']), (
                self._dynamicHtml,
                (
                    oaiJsonInfo,
                    (self._outside, ),
                ),
            )),
            (PathFilter('/json'), (
                oaiJsonInfo,
                (self._outside, ),
            )),
            (PathFilter('/static'),
             (PathRename(lambda path: path[len('/static'):]),
              (FileServer(staticPath), ))),
            (PathFilter('/version'),
             (StringServer("Meresco Oai version %s" % VERSION,
                           ContentTypePlainText), )),
        ))

    def addObserver(self, *args, **kwargs):
        Observable.addObserver(self, *args, **kwargs)
        self._outside.addObserver(*args, **kwargs)

    def addStrand(self, *args, **kwargs):
        Observable.addStrand(self, *args, **kwargs)
        self._outside.addStrand(*args, **kwargs)

    def handleRequest(self, path, **kwargs):
        if '/info' in path:
            originalPath = path
            pathPrefix, _, path = path.rpartition('/info')
            yield self._internalTree.all.handleRequest(
                path=path or '/',
                originalPath=originalPath,
                pathPrefix=pathPrefix,
                **kwargs)
예제 #6
0
class OaiInfo(Observable):
    def __init__(self, reactor, oaiPath, **kwargs):
        Observable.__init__(self, **kwargs)
        self._outside = Transparent()
        oaiJsonInfo = OaiJsonInfo()
        self._dynamicHtml = DynamicHtml([dynamicPath],
                reactor=reactor,
                notFoundPage='notFound',
                additionalGlobals={
                    'VERSION': VERSION,
                    'oaiPath': oaiPath,
                    'strftime': strftime,
                    'localtime': localtime,
                }
            )
        self._internalTree = be((Observable(),
            (PathFilter('/', excluding=['/static', '/version', '/json']),
                (self._dynamicHtml,
                    (oaiJsonInfo,
                        (self._outside,),
                    ),
                )
            ),
            (PathFilter('/json'),
                (oaiJsonInfo,
                    (self._outside,),
                )
            ),
            (PathFilter('/static'),
                (PathRename(lambda path: path[len('/static'):]),
                    (FileServer(staticPath),)
                )
            ),
            (PathFilter('/version'),
                (StringServer("Meresco Oai version %s" % VERSION, ContentTypePlainText),)
            ),
        ))

    def addObserver(self, *args, **kwargs):
        Observable.addObserver(self, *args, **kwargs)
        self._outside.addObserver(*args, **kwargs)

    def addStrand(self, *args, **kwargs):
        Observable.addStrand(self, *args, **kwargs)
        self._outside.addStrand(*args, **kwargs)

    def handleRequest(self, path, **kwargs):
        if '/info' in path:
            originalPath = path
            pathPrefix, _, path = path.rpartition('/info')
            yield self._internalTree.all.handleRequest(path=path or '/', originalPath=originalPath, pathPrefix=pathPrefix, **kwargs)
예제 #7
0
    def testProcessRecordsOnCommand(self):
        self.inboxDirectory = join(self.tempdir, 'inbox2')
        self.doneDirectory = join(self.tempdir, 'done2')
        makedirs(self.inboxDirectory)
        makedirs(self.doneDirectory)

        self.moveInRecord(identifier='repo:ident:1')
        self.moveInRecord(identifier='repo:ident:2')
        self.moveInRecord(identifier='repo:ident:3')
        inbox = Inbox(self.reactor,
                      inboxDirectory=self.inboxDirectory,
                      doneDirectory=self.doneDirectory)
        dna = be((Transparent(), (inbox, )))
        dna.once.observer_init()
        self.assertEqual(
            set([
                'repo:ident:1.record', 'repo:ident:2.record',
                'repo:ident:3.record'
            ]), set(listdir(self.inboxDirectory)))

        inbox.processInboxDirectory()

        self.assertEqual(
            set([
                'repo:ident:1.record', 'repo:ident:2.record',
                'repo:ident:3.record'
            ]), set(listdir(self.doneDirectory)))
예제 #8
0
 def __init__(self, repositoryName, adminEmail, repositoryIdentifier=None, batchSize=DEFAULT_BATCH_SIZE, supportXWait=False, externalUrl=None, preciseDatestamp=False):
     self._repository = OaiRepository(
         identifier=repositoryIdentifier,
         name=repositoryName,
         adminEmail=adminEmail,
         externalUrl=externalUrl,
     )
     outside = Transparent()
     self.addObserver = outside.addObserver
     self.addStrand = outside.addStrand
     self._internalObserverTree = be(
         (Observable(),
             (OaiError(self._repository),
                 (OaiIdentify(self._repository),
                     (outside,)
                 ),
                 (OaiList(repository=self._repository, batchSize=batchSize, supportXWait=supportXWait),
                     (OaiRecord(self._repository, preciseDatestamp=preciseDatestamp),
                         (outside,)
                     )
                 ),
                 (OaiGetRecord(self._repository),
                     (OaiRecord(self._repository, preciseDatestamp=preciseDatestamp),
                         (outside,)
                     )
                 ),
                 (OaiListMetadataFormats(self._repository),
                     (outside,)
                 ),
                 (OaiListSets(self._repository),
                     (outside,)
                 ),
             )
         )
     )
예제 #9
0
 def __init__(self,
              repositoryName,
              adminEmail,
              repositoryIdentifier=None,
              batchSize=OaiList.DEFAULT_BATCH_SIZE,
              supportXWait=False,
              fixIdentifyBaseURL=False):
     outside = Transparent(
     ) if repositoryIdentifier == None else OaiIdentifierRename(
         repositoryIdentifier)
     self.addObserver = outside.addObserver
     self.addStrand = outside.addStrand
     self._internalObserverTree = be((Observable(), (
         OaiError(),
         (OaiIdentify(repositoryName=repositoryName,
                      adminEmail=adminEmail,
                      repositoryIdentifier=repositoryIdentifier,
                      fixIdentifyBaseURL=fixIdentifyBaseURL), (outside, )),
         (OaiList(batchSize=batchSize,
                  supportXWait=supportXWait), (OaiRecord(), (outside, ))),
         (OaiGetRecord(), (OaiRecord(), (outside, ))),
         (OaiListMetadataFormats(), (outside, )),
         (OaiListSets(), (outside, )),
     )))
예제 #10
0
 def __init__(self, reactor, oaiPath, **kwargs):
     Observable.__init__(self, **kwargs)
     self._outside = Transparent()
     oaiJsonInfo = OaiJsonInfo()
     self._dynamicHtml = DynamicHtml([dynamicPath],
             reactor=reactor,
             notFoundPage='notFound',
             additionalGlobals={
                 'VERSION': VERSION,
                 'oaiPath': oaiPath,
                 'strftime': strftime,
                 'localtime': localtime,
             }
         )
     self._internalTree = be((Observable(),
         (PathFilter('/', excluding=['/static', '/version', '/json']),
             (self._dynamicHtml,
                 (oaiJsonInfo,
                     (self._outside,),
                 ),
             )
         ),
         (PathFilter('/json'),
             (oaiJsonInfo,
                 (self._outside,),
             )
         ),
         (PathFilter('/static'),
             (PathRename(lambda path: path[len('/static'):]),
                 (FileServer(staticPath),)
             )
         ),
         (PathFilter('/version'),
             (StringServer("Meresco Oai version %s" % VERSION, ContentTypePlainText),)
         ),
     ))
예제 #11
0
 def __init__(self, combinations, allowMissingParts=None):
     Transparent.__init__(self)
     self._combinations = combinations
     self._allowMissingParts = allowMissingParts or []
예제 #12
0
 def __init__(self, rename):
     Transparent.__init__(self)
     self._rename = rename
 def __init__(self, method):
     Transparent.__init__(self)
     self._method = method
예제 #14
0
 def __init__(self, notFoundMethod=None, additionalHeaders=None):
     Transparent.__init__(self)
     self.notFound = self._notFound if notFoundMethod is None else notFoundMethod
     self._additionalHeaders = {} if additionalHeaders is None else additionalHeaders
예제 #15
0
 def __init__(self, cacheTimeout=1*60*60, returnCachedValueInCaseOfException=False, backoffTimeout=None, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._cache = TimedDictionary(timeout=cacheTimeout)
     self._returnCachedValueInCaseOfException = returnCachedValueInCaseOfException
     self._backoffTimeout = backoffTimeout
     self._backoffStarted = None
예제 #16
0
 def __init__(self, setsMask, name=None):
     Transparent.__init__(self, name=name)
     self._setsMask = set(setsMask)
 def __init__(self, translate):
     Transparent.__init__(self)
     self.translate = translate
예제 #18
0
 def __init__(self, setsList):
     warn("OaiSetSelect is deprecated; you probably need OaiSetMask instead.", DeprecationWarning)
     Transparent.__init__(self)
     self._setsList = setsList
예제 #19
0
 def __init__(self, unqualifiedFields, name=None, **kwargs):
     Transparent.__init__(self, name=name)
     self._additionalKwargs = kwargs
     self.updateUnqualifiedFields(unqualifiedFields)
예제 #20
0
 def __init__(self, notFoundMethod=None):
     Transparent.__init__(self)
     self.notFound = self._notFound if notFoundMethod is None else notFoundMethod
예제 #21
0
 def __init__(self, unqualifiedFields, name=None, **kwargs):
     Transparent.__init__(self, name=name)
     self._additionalKwargs = kwargs
     self.updateUnqualifiedFields(unqualifiedFields)
예제 #22
0
 def __init__(self, combinations, allowMissingParts=None):
     Transparent.__init__(self)
     self._combinations = combinations
     self._allowMissingParts = allowMissingParts or []
예제 #23
0
 def __init__(self, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._convertDict = {}
 def __init__(self, partname):
     Transparent.__init__(self)
     self._partname = partname
예제 #25
0
 def __init__(self, partname):
     Transparent.__init__(self)
     self._partname = partname
예제 #26
0
 def __init__(self, log, loggedPaths):
     Transparent.__init__(self)
     self._log = log
     self._loggedPaths = loggedPaths
예제 #27
0
 def __init__(self, defaultCore, coreConverters, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._defaultCore = defaultCore
     self._converts = dict(coreConverters)
예제 #28
0
 def __init__(self, setsMask, name=None):
     Transparent.__init__(self, name=name)
     self._setsMask = set(setsMask)
 def __init__(self, xpath):
     Transparent.__init__(self)
     self._xpath = xpath
예제 #30
0
def dna(reactor, port, dataPath, logPath, statePath, externalUrl, customerLogoUrl, deproxyIps=None, **ignored):
    environment = createEnvironment(dataPath)
    harvesterData = environment.createHarvesterData()
    harvesterDataRetrieve = environment.createHarvesterDataRetrieve()
    deproxy = Deproxy(deproxyForIps=deproxyIps)
    repositoryStatus = be(
        (RepositoryStatus(logPath, statePath),
            (harvesterData, )
        )
    )
    configDict = JsonDict(
        logPath=logPath,
        statePath=statePath,
        externaUrl=externalUrl,
        dataPath=dataPath,
    )
    print("Started Metastreams with configuration:\n" + configDict.pretty_print())

    userGroup = initializeUserGroupManagement(join(statePath, 'users'), harvesterData)
    basicHtmlLoginHelix = (BasicHtmlLoginForm(
        action="/login.action",
        loginPath="/login",
        home="/index",
        rememberMeCookie=False,
        lang="nl"),

        (userGroup.basicHtmlObserver,),
    )
    varWwwdataPath = join(statePath, 'www-data', 'var')
    isdir(varWwwdataPath) or makedirs(varWwwdataPath)

    staticFilePaths = []
    staticFiles = Transparent()
    for path, libdir in [
            ('/js/bootstrap', '/usr/share/javascript/bootstrap5/js'),
            ('/css/bootstrap', '/usr/share/javascript/bootstrap5/css'),
            ('/css/bootstrap-icons', '/usr/share/javascript/bootstrap-icons'),
            ('/js/jquery', '/usr/share/javascript/jquery'),
            ('/js/jquery-tablesorter', '/usr/share/javascript/jquery-tablesorter'),
            ('/css/jquery-tablesorter', '/usr/share/javascript/jquery-tablesorter/css'),
            ('/js/autosize', '/usr/share/javascript/autosize'),
            ('/static', staticHtmlPath),
            ('/var', varWwwdataPath),
            ]:
        staticFiles.addObserver(StaticFiles(libdir=libdir, path=path))
        staticFilePaths.append(path)

    return \
    (Observable(),
        (ObservableHttpServer(reactor, port),
            (LogCollector(),
                (ApacheLogWriter(stdout),),
                (deproxy,
                    (HandleRequestLog(),
                        (BasicHttpHandler(),
                            (SessionHandler(),
                                (CookieMemoryStore(name="meresco-harvester", timeout=2*60*60), ),
                                (UserFromSession(),
                                    (PathFilter("/info/version"),
                                        (StringServer(VERSION_STRING, ContentTypePlainText), )
                                    ),
                                    (PathFilter("/info/config"),
                                        (StringServer(configDict.dumps(), ContentTypeJson), )
                                    ),
                                    (PathFilter('/login.action'),
                                        basicHtmlLoginHelix
                                    ),
                                    (staticFiles,),
                                    (PathFilter('/', excluding=['/info/version', '/info/config', '/action', '/login.action'] + harvesterDataRetrieve.paths + staticFilePaths),
                                        (SecureZone("/login", excluding=["/index", "/invalid", "/rss", '/running.rss', '/showHarvesterStatus'], defaultLanguage="nl"),
                                            (PathFilter('/', excluding=userGroup.excludedPaths),
                                                (DynamicHtml(
                                                        [dynamicHtmlPath],
                                                        reactor=reactor,
                                                        additionalGlobals={
                                                            'externalUrl': externalUrl,
                                                            'escapeXml': escapeXml,
                                                            'compose': compose,
                                                            'dumps': dumps,
                                                            'VERSION': VERSION,
                                                            'CONFIG': configDict,
                                                            'Timeslot': Timeslot,
                                                            'ThroughputAnalyser': ThroughputAnalyser,
                                                            'dateSince': dateSince,
                                                            'callable': callable,
                                                            'OnlineHarvest': OnlineHarvest,
                                                            'StringIO': StringIO,
                                                            'okPlainText': okPlainText,
                                                            'ZuluTime': ZuluTime,
                                                            'xpathFirst': xpathFirst,
                                                            'customerLogoUrl': customerLogoUrl,
                                                            'uuid': lambda: str(uuid4()),
                                                        },
                                                        indexPage="/index",
                                                    ),
                                                    basicHtmlLoginHelix,
                                                    (harvesterData,),
                                                    (repositoryStatus,),
                                                    (userGroup.dynamicHtmlObserver,),
                                                )
                                            ),
                                            (userGroup.actions,),
                                        ),
                                    ),
                                    (PathFilter('/action'),
                                        (HarvesterDataActions(),
                                            (harvesterData,)
                                        ),
                                    ),
                                    (PathFilter(harvesterDataRetrieve.paths),
                                        (harvesterDataRetrieve,
                                            (FilterFields(),
                                                (harvesterData,),
                                            ),
                                            (repositoryStatus,),
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
예제 #31
0
 def __init__(self, metadataPrefixes=None, name=None):
     Transparent.__init__(self, name=name)
     self._metadataPrefixes = metadataPrefixes if metadataPrefixes else []
예제 #32
0
 def __init__(self, method):
     Transparent.__init__(self)
     self._method = method
예제 #33
0
 def __init__(self, metadataPrefixes=None, setSpecs=None, name=None):
     Transparent.__init__(self, name=name)
     self._setSpecs = _prepare(setSpecs)
     self._metadataPrefixes = _prepare(metadataPrefixes)
예제 #34
0
 def __init__(self, log, loggedPaths):
     Transparent.__init__(self)
     self._log = log
     self._loggedPaths = loggedPaths
예제 #35
0
 def __init__(self, rename):
     Transparent.__init__(self)
     self._rename = rename
예제 #36
0
 def __init__(self, notFoundMethod=None, additionalHeaders=None):
     Transparent.__init__(self)
     self.notFound = self._notFound if notFoundMethod is None else notFoundMethod
     self._additionalHeaders = {} if additionalHeaders is None else additionalHeaders
 def __init__(self):
     Transparent.__init__(self)
     self._namespaceEnum = NamespaceEnum()
예제 #38
0
 def __init__(self, notFoundMethod=None):
     Transparent.__init__(self)
     self.notFound = self._notFound if notFoundMethod is None else notFoundMethod
예제 #39
0
 def __init__(self, defaultCore, coreConverters, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._defaultCore = defaultCore
     self._converts = dict(coreConverters)
예제 #40
0
 def __init__(self, metadataFormats=None):
     Transparent.__init__(self)
     self._metadataFormats = metadataFormats if metadataFormats else []
예제 #41
0
 def __init__(self, repository=None, preciseDatestamp=False, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._repository = repository
     self._preciseDatestamp = preciseDatestamp
예제 #42
0
 def __init__(self, outputStream=DevNull()):
     Transparent.__init__(self)
     self._outputStream = outputStream
예제 #43
0
 def __init__(self, setsList):
     warn(
         "OaiSetSelect is deprecated; you probably need OaiSetMask instead.",
         DeprecationWarning)
     Transparent.__init__(self)
     self._setsList = setsList
예제 #44
0
 def __init__(self, repository=None, preciseDatestamp=False, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._repository = repository
     self._preciseDatestamp = preciseDatestamp
예제 #45
0
 def __init__(self, translate):
     Transparent.__init__(self)
     self.translate = translate
 def __init__(self, outputStream=DevNull()):
     Transparent.__init__(self)
     self._outputStream = outputStream
예제 #47
0
 def __init__(self, metadataPrefixes=None, setSpecs=None, name=None):
     Transparent.__init__(self, name=name)
     self._setSpecs = _prepare(setSpecs)
     self._metadataPrefixes = _prepare(metadataPrefixes)
 def __init__(self, operation='searchRetrieve', version='1.2', recordSchema=None, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._defaults = dict(operation=[operation], version=[version])
     if recordSchema:
         self._defaults['recordSchema'] = [recordSchema]
예제 #49
0
 def __init__(self, repository=None, preciseDatestamp=False, deleteInSets=False, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._repository = repository
     self._preciseDatestamp = preciseDatestamp
     self._deleteInSetsSupport = deleteInSets
예제 #50
0
 def __init__(self, repository=None, preciseDatestamp=False, deleteInSets=False, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._repository = repository
     self._preciseDatestamp = preciseDatestamp
     self._deleteInSetsSupport = deleteInSets
예제 #51
0
    def testResolveCallStackVariables(self):
        do_result = []
        call_result = []

        class StackVarHolder(Observable):
            def all_unknown(self, message, *args, **kwargs):
                __callstack_var_myvar__ = []
                yield self.all.unknown(message, *args, **kwargs)
                yield __callstack_var_myvar__

            def any_unknown(self, message, *args, **kwargs):
                __callstack_var_myvar__ = []
                yield self.any.unknown(message, *args, **kwargs)
                return __callstack_var_myvar__

            def call_unknown(self, message, *args, **kwargs):
                __callstack_var_myvar__ = []
                call_result.append(__callstack_var_myvar__)
                return self.call.unknown(message, *args, **kwargs)

            def do_unknown(self, message, *args, **kwargs):
                __callstack_var_myvar__ = []
                do_result.append(__callstack_var_myvar__)
                self.do.unknown(message, *args, **kwargs)

        class StackVarUser(Observable):
            def useVariableAll(self):
                self.ctx.myvar.append('Thingy')
                yield 'stuffed'

            def useVariableAny(self):
                self.ctx.myvar.append('Thingy')
                return
                yield

            def useVariableCall(self):
                self.ctx.myvar.append('Thingy')
                return 'called'

            def useVariableDo(self):
                self.ctx.myvar.append('Thingy')

        dna = \
            (Observable(),
                (StackVarHolder(),
                    (Transparent(),
                        (StackVarUser(),)
                    )
                )
            )
        root = be(dna)
        self.assertEqual(['stuffed', ['Thingy']],
                         list(compose(root.all.useVariableAll())))

        composed = compose(root.any.useVariableAny())
        try:
            while True:
                next(composed)
        except StopIteration as e:
            self.assertEqual((['Thingy'], ), e.args)

        self.assertEqual('called', root.call.useVariableCall())
        self.assertEqual([['Thingy']], call_result)

        self.assertEqual(None, root.do.useVariableDo())
        self.assertEqual([['Thingy']], do_result)
 def __init__(self, fromKwarg, fieldname, name=None):
     Transparent.__init__(self, name=name)
     self._fromKwarg = fromKwarg
     self._fieldname = fieldname
 def __init__(self, defaultCore, coreConverters, **kwargs):
     Transparent.__init__(self, **kwargs)
     self._defaultCore = defaultCore
     self._converts = {}
     for core, convert in coreConverters.items():
         self._converts[core] = convert