Format: text/x-python
⬇ Download File (2.7 KB)
   1  # Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
   2  # Copyright 2002-2008 Mark Pilgrim
   3  # All rights reserved.
   4  #
   5  # This file is a part of feedparser.
   6  #
   7  # Redistribution and use in source and binary forms, with or without
   8  # modification, are permitted provided that the following conditions are met:
   9  #
  10  # * Redistributions of source code must retain the above copyright notice,
  11  #   this list of conditions and the following disclaimer.
  12  # * Redistributions in binary form must reproduce the above copyright notice,
  13  #   this list of conditions and the following disclaimer in the documentation
  14  #   and/or other materials provided with the distribution.
  15  #
  16  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
  17  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19  # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  20  # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22  # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  23  # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  24  # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  25  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  26  # POSSIBILITY OF SUCH DAMAGE.
  27  
  28  from .asctime import _parse_date_asctime
  29  from .greek import _parse_date_greek
  30  from .hungarian import _parse_date_hungarian
  31  from .iso8601 import _parse_date_iso8601
  32  from .korean import _parse_date_onblog, _parse_date_nate
  33  from .perforce import _parse_date_perforce
  34  from .rfc822 import _parse_date_rfc822
  35  from .w3dtf import _parse_date_w3dtf
  36  
  37  _date_handlers = []
  38  
  39  
  40  def registerDateHandler(func):
  41      """Register a date handler function (takes string, returns 9-tuple date in GMT)"""
  42      _date_handlers.insert(0, func)
  43  
  44  
  45  def _parse_date(date_string):
  46      """Parses a variety of date formats into a 9-tuple in GMT"""
  47      if not date_string:
  48          return None
  49      for handler in _date_handlers:
  50          try:
  51              date9tuple = handler(date_string)
  52          except (KeyError, OverflowError, ValueError, AttributeError):
  53              continue
  54          if not date9tuple:
  55              continue
  56          if len(date9tuple) != 9:
  57              continue
  58          return date9tuple
  59      return None
  60  
  61  
  62  registerDateHandler(_parse_date_onblog)
  63  registerDateHandler(_parse_date_nate)
  64  registerDateHandler(_parse_date_greek)
  65  registerDateHandler(_parse_date_hungarian)
  66  registerDateHandler(_parse_date_perforce)
  67  registerDateHandler(_parse_date_asctime)
  68  registerDateHandler(_parse_date_iso8601)
  69  registerDateHandler(_parse_date_rfc822)
  70  registerDateHandler(_parse_date_w3dtf)
  71