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()) |
---|