__init__.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. from .asctime import _parse_date_asctime
  28. from .greek import _parse_date_greek
  29. from .hungarian import _parse_date_hungarian
  30. from .iso8601 import _parse_date_iso8601
  31. from .korean import _parse_date_onblog, _parse_date_nate
  32. from .perforce import _parse_date_perforce
  33. from .rfc822 import _parse_date_rfc822
  34. from .w3dtf import _parse_date_w3dtf
  35. _date_handlers = []
  36. def registerDateHandler(func):
  37. """Register a date handler function (takes string, returns 9-tuple date in GMT)"""
  38. _date_handlers.insert(0, func)
  39. def _parse_date(date_string):
  40. """Parses a variety of date formats into a 9-tuple in GMT"""
  41. if not date_string:
  42. return None
  43. for handler in _date_handlers:
  44. try:
  45. date9tuple = handler(date_string)
  46. except (KeyError, OverflowError, ValueError, AttributeError):
  47. continue
  48. if not date9tuple:
  49. continue
  50. if len(date9tuple) != 9:
  51. continue
  52. return date9tuple
  53. return None
  54. registerDateHandler(_parse_date_onblog)
  55. registerDateHandler(_parse_date_nate)
  56. registerDateHandler(_parse_date_greek)
  57. registerDateHandler(_parse_date_hungarian)
  58. registerDateHandler(_parse_date_perforce)
  59. registerDateHandler(_parse_date_asctime)
  60. registerDateHandler(_parse_date_iso8601)
  61. registerDateHandler(_parse_date_rfc822)
  62. registerDateHandler(_parse_date_w3dtf)