source: products/quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/utils.py @ 3566

Last change on this file since 3566 was 3566, checked in by potar, 11 years ago

fixed ping to google (timeout was set)

  • Property svn:eol-style set to native
File size: 2.8 KB
RevLine 
[3510]1from urllib import quote as urlquote
2from DateTime import DateTime
[3566]3import logging
4import urllib2
5import socket
[1593]6
7from Globals import DevelopmentMode
[3163]8#from OFS.ObjectManager import BadRequestException
[3510]9from Products.CMFCore.utils import getToolByName
[1593]10
[2246]11from quintagroup.plonegooglesitemaps import config
[1593]12
[3152]13
[3566]14logger = 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
19def 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
[1593]38def ping_google(url, sitemap_id):
39    """Ping sitemap to Google"""
[1622]40
41    resurl = url + "/" + sitemap_id
42
[2246]43    if DevelopmentMode or config.testing:
[1622]44        #prevent pinging in debug or testing mode
45        print "Pinged %s sitemap to Google" % resurl
[1593]46        return 0
47
[3566]48    request = 'http://www.google.com/webmasters/tools/ping?sitemap=' +\
49              urlquote(resurl)
50    try:
51        # BBB: Change urlopen -> socket.urlopen when
52        # compatibility with python2.4 is not important
53        g = urlopen(request)
54    except urllib2.URLError, e:
55        if hasattr(e, 'reason'):
56            logger.error('We failed to reach a server. '
57                         'Request: %s. '
58                         'Reason: %s' % (request, e.reason))
59        elif hasattr(e, 'code'):
60            logger.error('The server couldn\'t fulfill the request. '
61                         'Request: %s '
62                         'Error code: %s. ' % (request, e.code))
63    else:
64        # Reading single byte should be enough for server pinged
65        # to get our request, process it and send some response.
66        g.read(1)
67        g.close()
[1622]68
[1593]69    return 0
[3510]70
71
72def getDefaultPage(obj):
73    """ Method gets default page for object (folderish) """
74    plone_tool = getToolByName(obj, 'plone_utils')
75    return plone_tool.getDefaultPage(obj)
76
77
78def isDefaultPage(obj):
79    """ If object is default page then return True"""
80    plone_tool = getToolByName(obj, 'plone_utils')
81    return plone_tool.isDefaultPage(obj)
82
83
84def dateTime(obj):
85    """ Method gets modification date """
86    return DateTime(obj.ModificationDate())
Note: See TracBrowser for help on using the repository browser.