예제 #1
0
파일: __init__.py 프로젝트: point97/madrona
def validateStream(aFile, firstOccurrenceOnly=0, contentType=None, base=""):
    loggedEvents = []

    if contentType:
        (mediaType, charset) = mediaTypes.checkValid(contentType, loggedEvents)
    else:
        (mediaType, charset) = (None, None)

    rawdata = aFile.read(MAXDATALENGTH)
    if aFile.read(1):
        raise ValidationFailure(
            logging.ValidatorLimit(
                {'limit': 'feed length > ' + str(MAXDATALENGTH) + ' bytes'}))

    encoding, rawdata = xmlEncoding.decode(mediaType,
                                           charset,
                                           rawdata,
                                           loggedEvents,
                                           fallback='utf-8')

    validator = _validate(rawdata,
                          firstOccurrenceOnly,
                          loggedEvents,
                          base,
                          encoding,
                          mediaType=mediaType)

    if mediaType and validator.feedType:
        mediaTypes.checkAgainstFeedType(mediaType, validator.feedType,
                                        validator.loggedEvents)

    return {
        "feedType": validator.feedType,
        "loggedEvents": validator.loggedEvents
    }
예제 #2
0
def validateStream(aFile, firstOccurrenceOnly=0, contentType=None, base=""):
  loggedEvents = []

  if contentType:
    (mediaType, charset) = mediaTypes.checkValid(contentType, loggedEvents)
  else:
    (mediaType, charset) = (None, None)

  rawdata = aFile.read(MAXDATALENGTH)
  if aFile.read(1):
    raise ValidationFailure(logging.ValidatorLimit({'limit': 'feed length > ' + str(MAXDATALENGTH) + ' bytes'}))

  encoding, rawdata = xmlEncoding.decode(mediaType, charset, rawdata, loggedEvents, fallback='utf-8')

  validator = _validate(rawdata, firstOccurrenceOnly, loggedEvents, base, encoding)

  if mediaType and validator.feedType:
    mediaTypes.checkAgainstFeedType(mediaType, validator.feedType, validator.loggedEvents)

  return {"feedType":validator.feedType, "loggedEvents":validator.loggedEvents}
예제 #3
0
    usock.close()
    usock = None
  
    mediaTypes.contentSniffing(mediaType, rawdata, loggedEvents)
    
    encoding, rawdata = xmlEncoding.decode(mediaType, charset, rawdata, loggedEvents, fallback='utf-8')
  
    if rawdata is None:
      return {'loggedEvents': loggedEvents}
  
    rawdata = rawdata.replace('\r\n', '\n').replace('\r', '\n') # normalize EOL
    validator = _validate(rawdata, firstOccurrenceOnly, loggedEvents, baseURI, encoding, selfURIs)
  
    # Warn about mismatches between media type and feed version
    if mediaType and validator.feedType:
      mediaTypes.checkAgainstFeedType(mediaType, validator.feedType, validator.loggedEvents)
  
    params = {"feedType":validator.feedType, "loggedEvents":validator.loggedEvents}
    if wantRawData:
      params['rawdata'] = rawdata
    return params

  finally:
    try:
      if usock: usock.close()
    except:
      pass
  
__all__ = ['base',
           'channel',
           'compatibility',