Kiln » Kiln Storage Service Read More
Clone URL:  
tasks.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import urllib2 import simplejson import urllib import indextasks from encoders import EmittableEncoder from api.repositories import Repository from httpshandler import HTTPSClientAuthHandler from webtasks import asyncpost from bugzscout import report_exception enc = EmittableEncoder() def httppost(daemon, url, data): try: if isinstance(data, dict): data = urllib.urlencode(data) key = daemon.conf.read('Daemon', 'ssl_key') cert = daemon.conf.read('Daemon', 'ssl_cert') opener = urllib2.build_opener(HTTPSClientAuthHandler(key=key, cert=cert)) opener.open(url, data) return True except urllib2.HTTPError, e: daemon.logger.error('HTTP Error while posting to %s', url) daemon.logger.error(e) daemon.logger.debug('Data: %s', data) if hasattr(e, 'fp'): daemon.logger.debug('Response:') daemon.logger.debug(e.fp.read()) return False except Exception, e: import traceback daemon.logger.error('Error while posting to %s', url) daemon.logger.error(e) daemon.logger.error(traceback.format_exc()) daemon.logger.debug('Data: %s', data) return False httppost.max_fail = 4 def createrepo(daemon, uuid, pingback, site, meta=None, parent=None): try: meta = simplejson.loads(meta) if meta else {} except: return False if parent: r = Repository(parent).cloneto(uuid, meta) else: r = Repository(uuid) r.create(meta) # Sync new repos, whether they have a parent or not. r.sync(site=site, peers=dict(r.ui.configitems('peers'))) data = dict(data=enc.encode(r)) # Try to pingback once... if not httppost(daemon, pingback, data): # If it doesn't work, queue it up to try again. asyncpost(pingback, data) return True def updaterepo(daemon, repo): if indextasks.update(repo, daemon.conf): indextasks.enqueue(daemon, repo) return True return False updaterepo.max_fail = 2 def striprepo(daemon, pingback, uuid, rev, meta, url, parent, ixPerson): try: meta = simplejson.loads(meta) if meta else {} repo = Repository(parent).cloneto(uuid, meta) repo.strip(rev, url, parent) r = [repo, ixPerson] data = dict(data=enc.encode(r)) # Try to pingback once... if not httppost(daemon, pingback, data): # If it doesn't work, queue it up to try again. asyncpost(pingback, data) return True except Exception, e: report_exception(e) return False striprepo.max_fail = 1