1 |
commit: d5afd085adb6a635e9f9dabeef86b941e947ea56 |
2 |
Author: Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com> |
3 |
AuthorDate: Thu Aug 1 15:50:23 2013 +0000 |
4 |
Commit: Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com> |
5 |
CommitDate: Thu Aug 1 15:50:23 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=d5afd085 |
7 |
|
8 |
ELPA backend: Docstrings snd different fixes |
9 |
|
10 |
--- |
11 |
g_sorcery/package_db.py | 3 ++- |
12 |
gs_elpa/backend.py | 9 +++++++-- |
13 |
gs_elpa/ebuild.py | 17 +++++++++++----- |
14 |
gs_elpa/elpa_db.py | 54 ++++++++++++++++++++++++++++++++++++++++--------- |
15 |
gs_elpa/fileutils.py | 12 ----------- |
16 |
5 files changed, 66 insertions(+), 29 deletions(-) |
17 |
|
18 |
diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py |
19 |
index e97ee15..f8ba1a2 100644 |
20 |
--- a/g_sorcery/package_db.py |
21 |
+++ b/g_sorcery/package_db.py |
22 |
@@ -698,7 +698,8 @@ class DBGenerator(object): |
23 |
Returns: |
24 |
Parsed data. |
25 |
""" |
26 |
- raise NotImplementedError |
27 |
+ #todo: implement reasonable default |
28 |
+ pass |
29 |
|
30 |
def process_data(self, pkg_db, data, common_config, config): |
31 |
""" |
32 |
|
33 |
diff --git a/gs_elpa/backend.py b/gs_elpa/backend.py |
34 |
index cad82c9..259fab6 100644 |
35 |
--- a/gs_elpa/backend.py |
36 |
+++ b/gs_elpa/backend.py |
37 |
@@ -19,14 +19,19 @@ from g_sorcery.eclass import EclassGenerator |
38 |
from g_sorcery.fileutils import get_pkgpath |
39 |
|
40 |
from .elpa_db import ElpaDBGenerator |
41 |
-from .ebuild import ElpaEbuildWithDigestGenerator, ElpaEbuildWithoutDigestGenerator |
42 |
+from .ebuild import ElpaEbuildWithDigestGenerator, \ |
43 |
+ ElpaEbuildWithoutDigestGenerator |
44 |
|
45 |
|
46 |
class ElpaEclassGenerator(EclassGenerator): |
47 |
+ """ |
48 |
+ Implementation of eclass generator. Only specifies a data directory. |
49 |
+ """ |
50 |
def __init__(self): |
51 |
super(ElpaEclassGenerator, self).__init__(os.path.join(get_pkgpath(__file__), 'data')) |
52 |
- |
53 |
|
54 |
+ |
55 |
+#Backend instance to be loaded by g_sorcery |
56 |
instance = Backend(ElpaDBGenerator, |
57 |
ElpaEbuildWithDigestGenerator, ElpaEbuildWithoutDigestGenerator, |
58 |
ElpaEclassGenerator, MetadataGenerator) |
59 |
|
60 |
diff --git a/gs_elpa/ebuild.py b/gs_elpa/ebuild.py |
61 |
index 895ae5b..e7fd502 100644 |
62 |
--- a/gs_elpa/ebuild.py |
63 |
+++ b/gs_elpa/ebuild.py |
64 |
@@ -12,16 +12,18 @@ |
65 |
""" |
66 |
|
67 |
import collections |
68 |
-import os |
69 |
|
70 |
from g_sorcery.ebuild import DefaultEbuildGenerator |
71 |
-from g_sorcery.fileutils import get_pkgpath |
72 |
|
73 |
Layout = collections.namedtuple("Layout", |
74 |
- ["vars_before_inherit", "inherit", "vars_after_description", "vars_after_keywords"]) |
75 |
+ ["vars_before_inherit", "inherit", |
76 |
+ "vars_after_description", "vars_after_keywords"]) |
77 |
|
78 |
|
79 |
class ElpaEbuildWithDigestGenerator(DefaultEbuildGenerator): |
80 |
+ """ |
81 |
+ Implementation of ebuild generator with sources digesting. |
82 |
+ """ |
83 |
def __init__(self, package_db): |
84 |
|
85 |
vars_before_inherit = \ |
86 |
@@ -35,11 +37,15 @@ class ElpaEbuildWithDigestGenerator(DefaultEbuildGenerator): |
87 |
vars_after_keywords = \ |
88 |
["depend", "rdepend"] |
89 |
|
90 |
- layout = Layout(vars_before_inherit, inherit, vars_after_description, vars_after_keywords) |
91 |
+ layout = Layout(vars_before_inherit, |
92 |
+ inherit, vars_after_description, vars_after_keywords) |
93 |
|
94 |
super(ElpaEbuildWithDigestGenerator, self).__init__(package_db, layout) |
95 |
|
96 |
class ElpaEbuildWithoutDigestGenerator(DefaultEbuildGenerator): |
97 |
+ """ |
98 |
+ Implementation of ebuild generator without sources digesting. |
99 |
+ """ |
100 |
def __init__(self, package_db): |
101 |
|
102 |
vars_before_inherit = \ |
103 |
@@ -53,6 +59,7 @@ class ElpaEbuildWithoutDigestGenerator(DefaultEbuildGenerator): |
104 |
vars_after_keywords = \ |
105 |
["depend", "rdepend"] |
106 |
|
107 |
- layout = Layout(vars_before_inherit, inherit, vars_after_description, vars_after_keywords) |
108 |
+ layout = Layout(vars_before_inherit, inherit, |
109 |
+ vars_after_description, vars_after_keywords) |
110 |
|
111 |
super(ElpaEbuildWithoutDigestGenerator, self).__init__(package_db, layout) |
112 |
|
113 |
diff --git a/gs_elpa/elpa_db.py b/gs_elpa/elpa_db.py |
114 |
index 586d02a..b7ffefb 100644 |
115 |
--- a/gs_elpa/elpa_db.py |
116 |
+++ b/gs_elpa/elpa_db.py |
117 |
@@ -11,11 +11,9 @@ |
118 |
:license: GPL-2, see LICENSE for more details. |
119 |
""" |
120 |
|
121 |
-import os |
122 |
- |
123 |
import sexpdata |
124 |
|
125 |
-from g_sorcery.compatibility import py2k, TemporaryDirectory |
126 |
+from g_sorcery.compatibility import py2k |
127 |
|
128 |
if py2k: |
129 |
from urlparse import urljoin |
130 |
@@ -27,16 +25,40 @@ from g_sorcery.package_db import DBGenerator |
131 |
from g_sorcery.exceptions import SyncError |
132 |
|
133 |
class ElpaDBGenerator(DBGenerator): |
134 |
+ """ |
135 |
+ Implementation of database generator for ELPA backend. |
136 |
+ """ |
137 |
def get_download_uries(self, common_config, config): |
138 |
+ """ |
139 |
+ Download database file from REPO_URI/archive-contents |
140 |
+ and parse it with sexpdata. |
141 |
+ |
142 |
+ Args: |
143 |
+ common_config: Backend config. |
144 |
+ config: Repository config. |
145 |
+ |
146 |
+ Returns: |
147 |
+ List with one URI entry. |
148 |
+ """ |
149 |
ac_uri = urljoin(config["repo_uri"], 'archive-contents') |
150 |
return [{"uri" : ac_uri, "parser" : sexpdata.load}] |
151 |
|
152 |
def process_data(self, pkg_db, data, common_config, config): |
153 |
+ """ |
154 |
+ Process downloaded and parsed data and generate tree. |
155 |
+ |
156 |
+ Args: |
157 |
+ pkg_db: Package database. |
158 |
+ data: Dictionary with data, keys are file names. |
159 |
+ common_config; Backend config. |
160 |
+ config: Repository config. |
161 |
+ """ |
162 |
archive_contents = data['archive-contents'] |
163 |
repo_uri = config["repo_uri"] |
164 |
|
165 |
if sexpdata.car(archive_contents) != 1: |
166 |
- raise SyncError('sync failed: ' + repo_uri + ' bad archive contents format') |
167 |
+ raise SyncError('sync failed: ' \ |
168 |
+ + repo_uri + ' bad archive contents format') |
169 |
|
170 |
pkg_db.add_category('app-emacs') |
171 |
|
172 |
@@ -49,7 +71,7 @@ class ElpaDBGenerator(DBGenerator): |
173 |
INFO_SRC_TYPE = 3 |
174 |
|
175 |
DEP_NAME = 0 |
176 |
- DEP_VERSION = 1 |
177 |
+ #DEP_VERSION = 1 #we do not use it at the moment |
178 |
|
179 |
for entry in sexpdata.cdr(archive_contents): |
180 |
desc = entry[PKG_INFO].value() |
181 |
@@ -58,18 +80,21 @@ class ElpaDBGenerator(DBGenerator): |
182 |
if self.in_config([common_config, config], "exclude", realname): |
183 |
continue |
184 |
|
185 |
- pkg = Package("app-emacs", realname, '.'.join(map(str, desc[INFO_VERSION]))) |
186 |
+ pkg = Package("app-emacs", realname, |
187 |
+ '.'.join(map(str, desc[INFO_VERSION]))) |
188 |
source_type = desc[INFO_SRC_TYPE].value() |
189 |
|
190 |
- allowed_ords = set(range(ord('a'), ord('z'))) | set(range(ord('A'), ord('Z'))) | \ |
191 |
- set(range(ord('0'), ord('9'))) | set(list(map(ord, |
192 |
+ allowed_ords = set(range(ord('a'), ord('z'))) \ |
193 |
+ | set(range(ord('A'), ord('Z'))) | \ |
194 |
+ set(range(ord('0'), ord('9'))) | set(list(map(ord, |
195 |
['+', '_', '-', ' ', '.', '(', ')', '[', ']', '{', '}', ',']))) |
196 |
description = "".join([x for x in desc[INFO_DESCRIPTION] if ord(x) in allowed_ords]) |
197 |
|
198 |
deps = desc[INFO_DEPENDENCIES] |
199 |
dependencies = serializable_elist(separator="\n\t") |
200 |
for dep in deps: |
201 |
- dep = self.convert_dependency([common_config, config], dep[DEP_NAME].value(), external = False) |
202 |
+ dep = self.convert_dependency([common_config, config], |
203 |
+ dep[DEP_NAME].value(), external = False) |
204 |
if dep: |
205 |
dependencies.append(dep) |
206 |
|
207 |
@@ -91,4 +116,15 @@ class ElpaDBGenerator(DBGenerator): |
208 |
pkg_db.add_package(pkg, properties) |
209 |
|
210 |
def convert_internal_dependency(self, configs, dependency): |
211 |
+ """ |
212 |
+ At the moment we have only internal dependencies, each of them |
213 |
+ is just a package name. |
214 |
+ |
215 |
+ Args: |
216 |
+ configs: Backend and repo configs. |
217 |
+ dependency: Package name. |
218 |
+ |
219 |
+ Returns: |
220 |
+ Dependency instance with category="app-emacs", package="dependency". |
221 |
+ """ |
222 |
return Dependency("app-emacs", dependency) |
223 |
|
224 |
diff --git a/gs_elpa/fileutils.py b/gs_elpa/fileutils.py |
225 |
deleted file mode 100644 |
226 |
index 035274c..0000000 |
227 |
--- a/gs_elpa/fileutils.py |
228 |
+++ /dev/null |
229 |
@@ -1,12 +0,0 @@ |
230 |
-#!/usr/bin/env python |
231 |
-# -*- coding: utf-8 -*- |
232 |
- |
233 |
-""" |
234 |
- fileutils.py |
235 |
- ~~~~~~~~~~~~ |
236 |
- |
237 |
- file utilities |
238 |
- |
239 |
- :copyright: (c) 2013 by Jauhien Piatlicki |
240 |
- :license: GPL-2, see LICENSE for more details. |
241 |
-""" |