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

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

unexpected behavior of urljoin; fixed url for sitemap

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1from urllib import quote as urlquote
2from DateTime import DateTime
3import logging
4import urllib2
5import socket
6
7from Globals import DevelopmentMode
8#from OFS.ObjectManager import BadRequestException
9from Products.CMFCore.utils import getToolByName
10
11from quintagroup.plonegooglesitemaps import config
12
13
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
38def 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
71def 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
77def 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
83def dateTime(obj):
84    """ Method gets modification date """
85    return DateTime(obj.ModificationDate())
Note: See TracBrowser for help on using the repository browser.