1 |
commit: 2427bfa1c92a2c5d8450b7a7c08120fa9aee73be |
2 |
Author: Pavlos Ratis <dastergon <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri May 30 19:25:59 2014 +0000 |
4 |
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com> |
5 |
CommitDate: Fri May 30 19:25:59 2014 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=2427bfa1 |
7 |
|
8 |
implement fetchseed action and use sslfetch to download seeds |
9 |
|
10 |
--- |
11 |
gkeys/actions.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- |
12 |
gkeys/config.py | 3 +++ |
13 |
2 files changed, 72 insertions(+), 4 deletions(-) |
14 |
|
15 |
diff --git a/gkeys/actions.py b/gkeys/actions.py |
16 |
index 1ecf4d3..5c4d934 100644 |
17 |
--- a/gkeys/actions.py |
18 |
+++ b/gkeys/actions.py |
19 |
@@ -13,14 +13,15 @@ |
20 |
from __future__ import print_function |
21 |
|
22 |
import os |
23 |
+import re |
24 |
|
25 |
- |
26 |
-from gkeys.seedhandler import SeedHandler |
27 |
+from gkeys.config import SEED_TYPES |
28 |
from gkeys.lib import GkeysGPG |
29 |
from gkeys.seed import Seeds |
30 |
+from gkeys.seedhandler import SeedHandler |
31 |
+from sslfetch.connections import Connector |
32 |
|
33 |
- |
34 |
-Available_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed', |
35 |
+Available_Actions = ['listseed', 'addseed', 'removeseed', 'moveseed', 'fetchseed', |
36 |
'listseedfiles', 'listkey', 'addkey', 'removekey', 'movekey', |
37 |
'installed'] |
38 |
|
39 |
@@ -53,6 +54,62 @@ class Actions(object): |
40 |
return seeds |
41 |
|
42 |
|
43 |
+ def fetch_seeds(self, seeds): |
44 |
+ # setup the ssl-fetch ouptut map |
45 |
+ connector_output = { |
46 |
+ 'info': self.logger.info, |
47 |
+ 'error': self.logger.error, |
48 |
+ 'kwargs-info': {}, |
49 |
+ 'kwargs-error': {}, |
50 |
+ } |
51 |
+ urls = [] |
52 |
+ messages = [] |
53 |
+ urls.append(self.config.get_key('developers.seeds')) |
54 |
+ urls.append(self.config.get_key('release.seeds')) |
55 |
+ if not re.search('^(http|https)://', urls[0]) and not re.search('^(http|https)://', urls[1]): |
56 |
+ urls = [] |
57 |
+ urls.append(self.config['seedurls']['developers.seeds']) |
58 |
+ urls.append(self.config['seedurls']['release.seeds']) |
59 |
+ fetcher = Connector(connector_output, None, "Gentoo Keys") |
60 |
+ for url in zip(urls, SEED_TYPES): |
61 |
+ timestamp_path = self.config['%s-timestamp' % url[1]] |
62 |
+ success, seeds, timestamp = fetcher.fetch_content(url[0], timestamp_path) |
63 |
+ if not timestamp: |
64 |
+ messages += ["%s seed file is already up to date." % url[1]] |
65 |
+ else: |
66 |
+ with open(timestamp_path, 'w+') as timestampfile: |
67 |
+ timestampfile.write(str(timestamp)) |
68 |
+ timestampfile.write("\n") |
69 |
+ if success and timestamp: |
70 |
+ self.logger.debug("MAIN: _action_fetchseed; got results.") |
71 |
+ filename = self.config['%s-seedfile' % url[1]] + '.new' |
72 |
+ with open(filename, 'w') as seedfile: |
73 |
+ seedfile.write(seeds) |
74 |
+ filename = self.config['%s-seedfile' % url[1]] |
75 |
+ old = filename + '.old' |
76 |
+ try: |
77 |
+ self.logger.info("Backing up existing file...") |
78 |
+ if os.path.exists(old): |
79 |
+ self.logger.debug( |
80 |
+ "MAIN: _action_fetch_seeds; Removing 'old' seed file: %s" |
81 |
+ % old) |
82 |
+ os.unlink(old) |
83 |
+ if os.path.exists(filename): |
84 |
+ self.logger.debug( |
85 |
+ "MAIN: _action_fetch_seeds; Renaming current seed file to: " |
86 |
+ "%s" % old) |
87 |
+ os.rename(filename, old) |
88 |
+ self.logger.debug("MAIN: _action_fetch_seeds; Renaming '.new' seed file to %s" |
89 |
+ % filename) |
90 |
+ os.rename(filename + '.new', filename) |
91 |
+ messages += ["Successfully fetched %s seed files." % url[1]] |
92 |
+ except IOError: |
93 |
+ raise |
94 |
+ else: |
95 |
+ messages += ["Failed to fetch %s seed file." % url[1]] |
96 |
+ return messages |
97 |
+ |
98 |
+ |
99 |
def listseed(self, args): |
100 |
'''Action listseed method''' |
101 |
handler = SeedHandler(self.logger) |
102 |
@@ -69,6 +126,14 @@ class Actions(object): |
103 |
return None |
104 |
|
105 |
|
106 |
+ def fetchseed(self, args): |
107 |
+ '''Action fetchseed method''' |
108 |
+ handler = SeedHandler(self.logger) |
109 |
+ messages = self.fetch_seeds(args.seeds) |
110 |
+ self.logger.debug("ACTIONS: fetchseed; args: %s" % str(args)) |
111 |
+ return messages |
112 |
+ |
113 |
+ |
114 |
def addseed(self, args): |
115 |
'''Action addseed method''' |
116 |
handler = SeedHandler(self.logger) |
117 |
|
118 |
diff --git a/gkeys/config.py b/gkeys/config.py |
119 |
index 6941368..161315e 100644 |
120 |
--- a/gkeys/config.py |
121 |
+++ b/gkeys/config.py |
122 |
@@ -38,6 +38,7 @@ EPREFIX = "@GENTOO_PORTAGE_EPREFIX@" |
123 |
if "GENTOO_PORTAGE_EPREFIX" in EPREFIX: |
124 |
EPREFIX = '' |
125 |
|
126 |
+SEED_TYPES = ['dev', 'release'] |
127 |
|
128 |
|
129 |
class GKeysConfig(GPGConfig): |
130 |
@@ -72,6 +73,8 @@ class GKeysConfig(GPGConfig): |
131 |
self.defaults['seedsdir'] = '%(keysdir)s/seeds' |
132 |
self.defaults['release-seedfile'] = '%(seedsdir)s/release.seeds' |
133 |
self.defaults['dev-seedfile'] = '%(seedsdir)s/developer.seeds' |
134 |
+ self.defaults['dev-timestamp'] = '%(keysdir)s/.developer_seeds_timestamp' |
135 |
+ self.defaults['release-timestamp'] = '%(keysdir)s/.release_seeds_timestamp' |
136 |
self.defaults['keyserver'] = 'pool.sks-keyservers.net' |
137 |
self.defaults['seedurls'] = { |
138 |
'release.seeds': 'https://dev.gentoo.org/~dolsen/gkey-seeds/release.seeds', |