| 1 | from urllib import quote as urlquote |
|---|
| 2 | from DateTime import DateTime |
|---|
| 3 | import logging |
|---|
| 4 | import urllib2 |
|---|
| 5 | import socket |
|---|
| 6 | |
|---|
| 7 | from Globals import DevelopmentMode |
|---|
| 8 | #from OFS.ObjectManager import BadRequestException |
|---|
| 9 | from Products.CMFCore.utils import getToolByName |
|---|
| 10 | |
|---|
| 11 | from quintagroup.plonegooglesitemaps import config |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | logger = logging.getLogger(__name__) |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | # BBB: 'timeout' was added to urlopen in python2.6. |
|---|
| 18 | # Method dedicated to compatibility with python2.4 and python2.5 |
|---|
| 19 | def urlopen(request, timeout=5.0, data=None, marker=[]): |
|---|
| 20 | global_timeout = marker |
|---|
| 21 | try: |
|---|
| 22 | try: |
|---|
| 23 | urllib2.urlopen(request, data, timeout=timeout) |
|---|
| 24 | except TypeError, e: |
|---|
| 25 | logger.info('TypeError: %s. You use python < 2.6. ' |
|---|
| 26 | 'Ugly socket.setdefaulttimeout hack applied ' |
|---|
| 27 | 'to avoid it upgrade your Plone.' % e) |
|---|
| 28 | # socket.getdefaulttimeout() -> None. |
|---|
| 29 | # It indicates that new socket objects have no timeout. |
|---|
| 30 | global_timeout = socket.getdefaulttimeout() |
|---|
| 31 | socket.setdefaulttimeout(timeout) |
|---|
| 32 | urllib2.urlopen(request) |
|---|
| 33 | finally: |
|---|
| 34 | if global_timeout is not marker: |
|---|
| 35 | socket.setdefaulttimeout(global_timeout) |
|---|
| 36 | |
|---|
| 37 | |
|---|
| 38 | def ping_google(plone_home, sitemap_relative_path): |
|---|
| 39 | """Ping sitemap to Google""" |
|---|
| 40 | resurl = plone_home + '/' + sitemap_relative_path |
|---|
| 41 | |
|---|
| 42 | if DevelopmentMode or config.testing: |
|---|
| 43 | #prevent pinging in debug or testing mode |
|---|
| 44 | print "Pinged %s sitemap to Google" % resurl |
|---|
| 45 | return 0 |
|---|
| 46 | |
|---|
| 47 | request = 'http://www.google.com/webmasters/tools/ping?sitemap=' +\ |
|---|
| 48 | urlquote(resurl) |
|---|
| 49 | try: |
|---|
| 50 | # BBB: Change urlopen -> socket.urlopen when |
|---|
| 51 | # compatibility with python2.4 is not important |
|---|
| 52 | g = urlopen(request) |
|---|
| 53 | except urllib2.URLError, e: |
|---|
| 54 | if hasattr(e, 'reason'): |
|---|
| 55 | logger.error('We failed to reach a server. ' |
|---|
| 56 | 'Request: %s. ' |
|---|
| 57 | 'Reason: %s' % (request, e.reason)) |
|---|
| 58 | elif hasattr(e, 'code'): |
|---|
| 59 | logger.error('The server couldn\'t fulfill the request. ' |
|---|
| 60 | 'Request: %s ' |
|---|
| 61 | 'Error code: %s. ' % (request, e.code)) |
|---|
| 62 | else: |
|---|
| 63 | # Reading single byte should be enough for server pinged |
|---|
| 64 | # to get our request, process it and send some response. |
|---|
| 65 | g.read(1) |
|---|
| 66 | g.close() |
|---|
| 67 | |
|---|
| 68 | return 0 |
|---|
| 69 | |
|---|
| 70 | |
|---|
| 71 | def getDefaultPage(obj): |
|---|
| 72 | """ Method gets default page for object (folderish) """ |
|---|
| 73 | plone_tool = getToolByName(obj, 'plone_utils') |
|---|
| 74 | return plone_tool.getDefaultPage(obj) |
|---|
| 75 | |
|---|
| 76 | |
|---|
| 77 | def isDefaultPage(obj): |
|---|
| 78 | """ If object is default page then return True""" |
|---|
| 79 | plone_tool = getToolByName(obj, 'plone_utils') |
|---|
| 80 | return plone_tool.isDefaultPage(obj) |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | def dateTime(obj): |
|---|
| 84 | """ Method gets modification date """ |
|---|
| 85 | return DateTime(obj.ModificationDate()) |
|---|