##// END OF EJS Templates
session: moved pyramid_beaker internally to apply some patches required for better session handling
marcink -
r3748:9f6c56d4 new-ui
parent child Browse files
Show More
@@ -0,0 +1,200 b''
1 # Copyright (c) 2010 Agendaless Consulting and Contributors.
2 # (http://www.agendaless.com), All Rights Reserved
3 # License: BSD-derived (http://www.repoze.org/LICENSE.txt)
4 # With Patches from RhodeCode GmBH
5
6
7 import os
8
9 from beaker import cache
10 from beaker.session import SessionObject
11 from beaker.util import coerce_cache_params
12 from beaker.util import coerce_session_params
13
14 from pyramid.interfaces import ISession
15 from pyramid.settings import asbool
16 from zope.interface import implementer
17
18 from binascii import hexlify
19
20
21 def BeakerSessionFactoryConfig(**options):
22 """ Return a Pyramid session factory using Beaker session settings
23 supplied directly as ``**options``"""
24
25 class PyramidBeakerSessionObject(SessionObject):
26 _options = options
27 _cookie_on_exception = _options.pop('cookie_on_exception', True)
28 _constant_csrf_token = _options.pop('constant_csrf_token', False)
29
30 def __init__(self, request):
31 SessionObject.__init__(self, request.environ, **self._options)
32
33 def session_callback(request, response):
34 exception = getattr(request, 'exception', None)
35 if (exception is None or self._cookie_on_exception) and self.accessed():
36 self.persist()
37 headers = self.__dict__['_headers']
38 if headers['set_cookie'] and headers['cookie_out']:
39 response.headerlist.append(('Set-Cookie', headers['cookie_out']))
40 request.add_response_callback(session_callback)
41
42 # ISession API
43
44 @property
45 def id(self):
46 # this is as inspected in SessionObject.__init__
47 if self.__dict__['_params'].get('type') != 'cookie':
48 return self._session().id
49 return None
50
51 @property
52 def new(self):
53 return self.last_accessed is None
54
55 changed = SessionObject.save
56
57 # modifying dictionary methods
58
59 @call_save
60 def clear(self):
61 return self._session().clear()
62
63 @call_save
64 def update(self, d, **kw):
65 return self._session().update(d, **kw)
66
67 @call_save
68 def setdefault(self, k, d=None):
69 return self._session().setdefault(k, d)
70
71 @call_save
72 def pop(self, k, d=None):
73 return self._session().pop(k, d)
74
75 @call_save
76 def popitem(self):
77 return self._session().popitem()
78
79 __setitem__ = call_save(SessionObject.__setitem__)
80 __delitem__ = call_save(SessionObject.__delitem__)
81
82 # Flash API methods
83 def flash(self, msg, queue='', allow_duplicate=True):
84 storage = self.setdefault('_f_' + queue, [])
85 if allow_duplicate or (msg not in storage):
86 storage.append(msg)
87
88 def pop_flash(self, queue=''):
89 storage = self.pop('_f_' + queue, [])
90 return storage
91
92 def peek_flash(self, queue=''):
93 storage = self.get('_f_' + queue, [])
94 return storage
95
96 # CSRF API methods
97 def new_csrf_token(self):
98 token = (self._constant_csrf_token
99 or hexlify(os.urandom(20)).decode('ascii'))
100 self['_csrft_'] = token
101 return token
102
103 def get_csrf_token(self):
104 token = self.get('_csrft_', None)
105 if token is None:
106 token = self.new_csrf_token()
107 return token
108
109 return implementer(ISession)(PyramidBeakerSessionObject)
110
111
112 def call_save(wrapped):
113 """ By default, in non-auto-mode beaker badly wants people to
114 call save even though it should know something has changed when
115 a mutating method is called. This hack should be removed if
116 Beaker ever starts to do this by default. """
117 def save(session, *arg, **kw):
118 value = wrapped(session, *arg, **kw)
119 session.save()
120 return value
121 save.__doc__ = wrapped.__doc__
122 return save
123
124
125 def session_factory_from_settings(settings):
126 """ Return a Pyramid session factory using Beaker session settings
127 supplied from a Paste configuration file"""
128 prefixes = ('session.', 'beaker.session.')
129 options = {}
130
131 # Pull out any config args meant for beaker session. if there are any
132 for k, v in settings.items():
133 for prefix in prefixes:
134 if k.startswith(prefix):
135 option_name = k[len(prefix):]
136 if option_name == 'cookie_on_exception':
137 v = asbool(v)
138 options[option_name] = v
139
140 options = coerce_session_params(options)
141 return BeakerSessionFactoryConfig(**options)
142
143
144 def set_cache_regions_from_settings(settings):
145 """ Add cache support to the Pylons application.
146
147 The ``settings`` passed to the configurator are used to setup
148 the cache options. Cache options in the settings should start
149 with either 'beaker.cache.' or 'cache.'.
150
151 """
152 cache_settings = {'regions': []}
153 for key in settings.keys():
154 for prefix in ['beaker.cache.', 'cache.']:
155 if key.startswith(prefix):
156 name = key.split(prefix)[1].strip()
157 cache_settings[name] = settings[key].strip()
158
159 if ('expire' in cache_settings
160 and isinstance(cache_settings['expire'], basestring)
161 and cache_settings['expire'].lower() in ['none', 'no']):
162 cache_settings['expire'] = None
163
164 coerce_cache_params(cache_settings)
165
166 if 'enabled' not in cache_settings:
167 cache_settings['enabled'] = True
168
169 regions = cache_settings['regions']
170 if regions:
171 for region in regions:
172 if not region:
173 continue
174
175 region_settings = {
176 'data_dir': cache_settings.get('data_dir'),
177 'lock_dir': cache_settings.get('lock_dir'),
178 'expire': cache_settings.get('expire', 60),
179 'enabled': cache_settings['enabled'],
180 'key_length': cache_settings.get('key_length', 250),
181 'type': cache_settings.get('type'),
182 'url': cache_settings.get('url'),
183 }
184 region_prefix = '%s.' % region
185 region_len = len(region_prefix)
186 for key in list(cache_settings.keys()):
187 if key.startswith(region_prefix):
188 region_settings[key[region_len:]] = cache_settings.pop(key)
189
190 if (isinstance(region_settings['expire'], basestring)
191 and region_settings['expire'].lower() in ['none', 'no']):
192 region_settings['expire'] = None
193 coerce_cache_params(region_settings)
194 cache.cache_regions[region] = region_settings
195
196
197 def includeme(config):
198 session_factory = session_factory_from_settings(config.registry.settings)
199 config.set_session_factory(session_factory)
200 set_cache_regions_from_settings(config.registry.settings)
@@ -1,2361 +1,2345 b''
1 1 # Generated by pip2nix 0.8.0.dev1
2 2 # See https://github.com/johbo/pip2nix
3 3
4 4 { pkgs, fetchurl, fetchgit, fetchhg }:
5 5
6 6 self: super: {
7 7 "alembic" = super.buildPythonPackage {
8 8 name = "alembic-1.0.10";
9 9 doCheck = false;
10 10 propagatedBuildInputs = [
11 11 self."sqlalchemy"
12 12 self."mako"
13 13 self."python-editor"
14 14 self."python-dateutil"
15 15 ];
16 16 src = fetchurl {
17 17 url = "https://files.pythonhosted.org/packages/6e/8b/fa3bd058cccd5e9177fea4efa26bfb769228fdd3178436ad5e05830ef6ef/alembic-1.0.10.tar.gz";
18 18 sha256 = "1dwl0264r6ri2jyrjr68am04x538ab26xwy4crqjnnhm4alwm3c2";
19 19 };
20 20 meta = {
21 21 license = [ pkgs.lib.licenses.mit ];
22 22 };
23 23 };
24 24 "amqp" = super.buildPythonPackage {
25 25 name = "amqp-2.3.1";
26 26 doCheck = false;
27 27 propagatedBuildInputs = [
28 28 self."vine"
29 29 ];
30 30 src = fetchurl {
31 31 url = "https://files.pythonhosted.org/packages/1b/32/242ff76cd802766f11c89c72f3389b5c8de4bdfbab406137b90c5fae8b05/amqp-2.3.1.tar.gz";
32 32 sha256 = "0wlfnvhmfrn7c8qif2jyvsm63ibdxp02ss564qwrvqfhz0di72s0";
33 33 };
34 34 meta = {
35 35 license = [ pkgs.lib.licenses.bsdOriginal ];
36 36 };
37 37 };
38 38 "appenlight-client" = super.buildPythonPackage {
39 39 name = "appenlight-client-0.6.26";
40 40 doCheck = false;
41 41 propagatedBuildInputs = [
42 42 self."webob"
43 43 self."requests"
44 44 self."six"
45 45 ];
46 46 src = fetchurl {
47 47 url = "https://files.pythonhosted.org/packages/2e/56/418fc10379b96e795ee39a15e69a730c222818af04c3821fa354eaa859ec/appenlight_client-0.6.26.tar.gz";
48 48 sha256 = "0s9xw3sb8s3pk73k78nnq4jil3q4mk6bczfa1fmgfx61kdxl2712";
49 49 };
50 50 meta = {
51 51 license = [ pkgs.lib.licenses.bsdOriginal ];
52 52 };
53 53 };
54 54 "asn1crypto" = super.buildPythonPackage {
55 55 name = "asn1crypto-0.24.0";
56 56 doCheck = false;
57 57 src = fetchurl {
58 58 url = "https://files.pythonhosted.org/packages/fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4/asn1crypto-0.24.0.tar.gz";
59 59 sha256 = "0jaf8rf9dx1lf23xfv2cdd5h52f1qr3w8k63985bc35g3d220p4x";
60 60 };
61 61 meta = {
62 62 license = [ pkgs.lib.licenses.mit ];
63 63 };
64 64 };
65 65 "atomicwrites" = super.buildPythonPackage {
66 66 name = "atomicwrites-1.2.1";
67 67 doCheck = false;
68 68 src = fetchurl {
69 69 url = "https://files.pythonhosted.org/packages/ac/ed/a311712ef6b4355035489f665e63e1a73f9eb371929e3c98e5efd451069e/atomicwrites-1.2.1.tar.gz";
70 70 sha256 = "1vmkbw9j0qammwxbxycrs39gvdg4lc2d4lk98kwf8ag2manyi6pc";
71 71 };
72 72 meta = {
73 73 license = [ pkgs.lib.licenses.mit ];
74 74 };
75 75 };
76 76 "attrs" = super.buildPythonPackage {
77 77 name = "attrs-18.2.0";
78 78 doCheck = false;
79 79 src = fetchurl {
80 80 url = "https://files.pythonhosted.org/packages/0f/9e/26b1d194aab960063b266170e53c39f73ea0d0d3f5ce23313e0ec8ee9bdf/attrs-18.2.0.tar.gz";
81 81 sha256 = "0s9ydh058wmmf5v391pym877x4ahxg45dw6a0w4c7s5wgpigdjqh";
82 82 };
83 83 meta = {
84 84 license = [ pkgs.lib.licenses.mit ];
85 85 };
86 86 };
87 87 "authomatic" = super.buildPythonPackage {
88 88 name = "authomatic-0.1.0.post1";
89 89 doCheck = false;
90 90 src = fetchurl {
91 91 url = "https://code.rhodecode.com/upstream/authomatic/artifacts/download/0-4fe9c041-a567-4f84-be4c-7efa2a606d3c.tar.gz?md5=f6bdc3c769688212db68233e8d2b0383";
92 92 sha256 = "0pc716mva0ym6xd8jwzjbjp8dqxy9069wwwv2aqwb8lyhl4757ab";
93 93 };
94 94 meta = {
95 95 license = [ pkgs.lib.licenses.mit ];
96 96 };
97 97 };
98 98 "babel" = super.buildPythonPackage {
99 99 name = "babel-1.3";
100 100 doCheck = false;
101 101 propagatedBuildInputs = [
102 102 self."pytz"
103 103 ];
104 104 src = fetchurl {
105 105 url = "https://files.pythonhosted.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
106 106 sha256 = "0bnin777lc53nxd1hp3apq410jj5wx92n08h7h4izpl4f4sx00lz";
107 107 };
108 108 meta = {
109 109 license = [ pkgs.lib.licenses.bsdOriginal ];
110 110 };
111 111 };
112 112 "backports.shutil-get-terminal-size" = super.buildPythonPackage {
113 113 name = "backports.shutil-get-terminal-size-1.0.0";
114 114 doCheck = false;
115 115 src = fetchurl {
116 116 url = "https://files.pythonhosted.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
117 117 sha256 = "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki";
118 118 };
119 119 meta = {
120 120 license = [ pkgs.lib.licenses.mit ];
121 121 };
122 122 };
123 123 "beaker" = super.buildPythonPackage {
124 124 name = "beaker-1.9.1";
125 125 doCheck = false;
126 126 propagatedBuildInputs = [
127 127 self."funcsigs"
128 128 ];
129 129 src = fetchurl {
130 130 url = "https://files.pythonhosted.org/packages/ca/14/a626188d0d0c7b55dd7cf1902046c2743bd392a7078bb53073e13280eb1e/Beaker-1.9.1.tar.gz";
131 131 sha256 = "08arsn61r255lhz6hcpn2lsiqpg30clla805ysx06wmbhvb6w9rj";
132 132 };
133 133 meta = {
134 134 license = [ pkgs.lib.licenses.bsdOriginal ];
135 135 };
136 136 };
137 137 "beautifulsoup4" = super.buildPythonPackage {
138 138 name = "beautifulsoup4-4.6.3";
139 139 doCheck = false;
140 140 src = fetchurl {
141 141 url = "https://files.pythonhosted.org/packages/88/df/86bffad6309f74f3ff85ea69344a078fc30003270c8df6894fca7a3c72ff/beautifulsoup4-4.6.3.tar.gz";
142 142 sha256 = "041dhalzjciw6qyzzq7a2k4h1yvyk76xigp35hv5ibnn448ydy4h";
143 143 };
144 144 meta = {
145 145 license = [ pkgs.lib.licenses.mit ];
146 146 };
147 147 };
148 148 "billiard" = super.buildPythonPackage {
149 149 name = "billiard-3.5.0.3";
150 150 doCheck = false;
151 151 src = fetchurl {
152 152 url = "https://files.pythonhosted.org/packages/39/ac/f5571210cca2e4f4532e38aaff242f26c8654c5e2436bee966c230647ccc/billiard-3.5.0.3.tar.gz";
153 153 sha256 = "1riwiiwgb141151md4ykx49qrz749akj5k8g290ji9bsqjyj4yqx";
154 154 };
155 155 meta = {
156 156 license = [ pkgs.lib.licenses.bsdOriginal ];
157 157 };
158 158 };
159 159 "bleach" = super.buildPythonPackage {
160 160 name = "bleach-3.1.0";
161 161 doCheck = false;
162 162 propagatedBuildInputs = [
163 163 self."six"
164 164 self."webencodings"
165 165 ];
166 166 src = fetchurl {
167 167 url = "https://files.pythonhosted.org/packages/78/5a/0df03e8735cd9c75167528299c738702437589b9c71a849489d00ffa82e8/bleach-3.1.0.tar.gz";
168 168 sha256 = "1yhrgrhkln8bd6gn3imj69g1h4xqah9gaz9q26crqr6gmmvpzprz";
169 169 };
170 170 meta = {
171 171 license = [ pkgs.lib.licenses.asl20 ];
172 172 };
173 173 };
174 174 "bumpversion" = super.buildPythonPackage {
175 175 name = "bumpversion-0.5.3";
176 176 doCheck = false;
177 177 src = fetchurl {
178 178 url = "https://files.pythonhosted.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
179 179 sha256 = "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37";
180 180 };
181 181 meta = {
182 182 license = [ pkgs.lib.licenses.mit ];
183 183 };
184 184 };
185 185 "celery" = super.buildPythonPackage {
186 186 name = "celery-4.1.1";
187 187 doCheck = false;
188 188 propagatedBuildInputs = [
189 189 self."pytz"
190 190 self."billiard"
191 191 self."kombu"
192 192 ];
193 193 src = fetchurl {
194 194 url = "https://files.pythonhosted.org/packages/e9/cf/a4c0597effca20c57eb586324e41d1180bc8f13a933da41e0646cff69f02/celery-4.1.1.tar.gz";
195 195 sha256 = "1xbir4vw42n2ir9lanhwl7w69zpmj7lbi66fxm2b7pyvkcss7wni";
196 196 };
197 197 meta = {
198 198 license = [ pkgs.lib.licenses.bsdOriginal ];
199 199 };
200 200 };
201 201 "cffi" = super.buildPythonPackage {
202 202 name = "cffi-1.12.2";
203 203 doCheck = false;
204 204 propagatedBuildInputs = [
205 205 self."pycparser"
206 206 ];
207 207 src = fetchurl {
208 208 url = "https://files.pythonhosted.org/packages/64/7c/27367b38e6cc3e1f49f193deb761fe75cda9f95da37b67b422e62281fcac/cffi-1.12.2.tar.gz";
209 209 sha256 = "19qfks2djya8vix95bmg3xzipjb8w9b8mbj4j5k2hqkc8j58f4z1";
210 210 };
211 211 meta = {
212 212 license = [ pkgs.lib.licenses.mit ];
213 213 };
214 214 };
215 215 "chameleon" = super.buildPythonPackage {
216 216 name = "chameleon-2.24";
217 217 doCheck = false;
218 218 src = fetchurl {
219 219 url = "https://files.pythonhosted.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
220 220 sha256 = "0ykqr7syxfa6h9adjfnsv1gdsca2xzm22vmic8859n0f0j09abj5";
221 221 };
222 222 meta = {
223 223 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
224 224 };
225 225 };
226 226 "channelstream" = super.buildPythonPackage {
227 227 name = "channelstream-0.5.2";
228 228 doCheck = false;
229 229 propagatedBuildInputs = [
230 230 self."gevent"
231 231 self."ws4py"
232 232 self."pyramid"
233 233 self."pyramid-jinja2"
234 234 self."itsdangerous"
235 235 self."requests"
236 236 self."six"
237 237 ];
238 238 src = fetchurl {
239 239 url = "https://files.pythonhosted.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
240 240 sha256 = "1qbm4xdl5hfkja683x546bncg3rqq8qv79w1m1a1wd48cqqzb6rm";
241 241 };
242 242 meta = {
243 243 license = [ pkgs.lib.licenses.bsdOriginal ];
244 244 };
245 245 };
246 246 "click" = super.buildPythonPackage {
247 247 name = "click-7.0";
248 248 doCheck = false;
249 249 src = fetchurl {
250 250 url = "https://files.pythonhosted.org/packages/f8/5c/f60e9d8a1e77005f664b76ff8aeaee5bc05d0a91798afd7f53fc998dbc47/Click-7.0.tar.gz";
251 251 sha256 = "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v";
252 252 };
253 253 meta = {
254 254 license = [ pkgs.lib.licenses.bsdOriginal ];
255 255 };
256 256 };
257 257 "colander" = super.buildPythonPackage {
258 258 name = "colander-1.7.0";
259 259 doCheck = false;
260 260 propagatedBuildInputs = [
261 261 self."translationstring"
262 262 self."iso8601"
263 263 self."enum34"
264 264 ];
265 265 src = fetchurl {
266 266 url = "https://files.pythonhosted.org/packages/db/e4/74ab06f54211917b41865cafc987ce511e35503de48da9bfe9358a1bdc3e/colander-1.7.0.tar.gz";
267 267 sha256 = "1wl1bqab307lbbcjx81i28s3yl6dlm4rf15fxawkjb6j48x1cn6p";
268 268 };
269 269 meta = {
270 270 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
271 271 };
272 272 };
273 273 "configobj" = super.buildPythonPackage {
274 274 name = "configobj-5.0.6";
275 275 doCheck = false;
276 276 propagatedBuildInputs = [
277 277 self."six"
278 278 ];
279 279 src = fetchurl {
280 280 url = "https://code.rhodecode.com/upstream/configobj/artifacts/download/0-012de99a-b1e1-4f64-a5c0-07a98a41b324.tar.gz?md5=6a513f51fe04b2c18cf84c1395a7c626";
281 281 sha256 = "0kqfrdfr14mw8yd8qwq14dv2xghpkjmd3yjsy8dfcbvpcc17xnxp";
282 282 };
283 283 meta = {
284 284 license = [ pkgs.lib.licenses.bsdOriginal ];
285 285 };
286 286 };
287 287 "configparser" = super.buildPythonPackage {
288 288 name = "configparser-3.7.4";
289 289 doCheck = false;
290 290 src = fetchurl {
291 291 url = "https://files.pythonhosted.org/packages/e2/1c/83fd53748d8245cb9a3399f705c251d3fc0ce7df04450aac1cfc49dd6a0f/configparser-3.7.4.tar.gz";
292 292 sha256 = "0xac32886ihs2xg7w1gppcq2sgin5qsm8lqwijs5xifq9w0x0q6s";
293 293 };
294 294 meta = {
295 295 license = [ pkgs.lib.licenses.mit ];
296 296 };
297 297 };
298 298 "cov-core" = super.buildPythonPackage {
299 299 name = "cov-core-1.15.0";
300 300 doCheck = false;
301 301 propagatedBuildInputs = [
302 302 self."coverage"
303 303 ];
304 304 src = fetchurl {
305 305 url = "https://files.pythonhosted.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
306 306 sha256 = "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a";
307 307 };
308 308 meta = {
309 309 license = [ pkgs.lib.licenses.mit ];
310 310 };
311 311 };
312 312 "coverage" = super.buildPythonPackage {
313 313 name = "coverage-4.5.3";
314 314 doCheck = false;
315 315 src = fetchurl {
316 316 url = "https://files.pythonhosted.org/packages/82/70/2280b5b29a0352519bb95ab0ef1ea942d40466ca71c53a2085bdeff7b0eb/coverage-4.5.3.tar.gz";
317 317 sha256 = "02f6m073qdispn96rc616hg0rnmw1pgqzw3bgxwiwza4zf9hirlx";
318 318 };
319 319 meta = {
320 320 license = [ pkgs.lib.licenses.asl20 ];
321 321 };
322 322 };
323 323 "cryptography" = super.buildPythonPackage {
324 324 name = "cryptography-2.6.1";
325 325 doCheck = false;
326 326 propagatedBuildInputs = [
327 327 self."asn1crypto"
328 328 self."six"
329 329 self."cffi"
330 330 self."enum34"
331 331 self."ipaddress"
332 332 ];
333 333 src = fetchurl {
334 334 url = "https://files.pythonhosted.org/packages/07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449/cryptography-2.6.1.tar.gz";
335 335 sha256 = "19iwz5avym5zl6jrrrkym1rdaa9h61j20ph4cswsqgv8xg5j3j16";
336 336 };
337 337 meta = {
338 338 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "BSD or Apache License, Version 2.0"; } pkgs.lib.licenses.asl20 ];
339 339 };
340 340 };
341 341 "cssselect" = super.buildPythonPackage {
342 342 name = "cssselect-1.0.3";
343 343 doCheck = false;
344 344 src = fetchurl {
345 345 url = "https://files.pythonhosted.org/packages/52/ea/f31e1d2e9eb130fda2a631e22eac369dc644e8807345fbed5113f2d6f92b/cssselect-1.0.3.tar.gz";
346 346 sha256 = "011jqa2jhmydhi0iz4v1w3cr540z5zas8g2bw8brdw4s4b2qnv86";
347 347 };
348 348 meta = {
349 349 license = [ pkgs.lib.licenses.bsdOriginal ];
350 350 };
351 351 };
352 352 "decorator" = super.buildPythonPackage {
353 353 name = "decorator-4.1.2";
354 354 doCheck = false;
355 355 src = fetchurl {
356 356 url = "https://files.pythonhosted.org/packages/bb/e0/f6e41e9091e130bf16d4437dabbac3993908e4d6485ecbc985ef1352db94/decorator-4.1.2.tar.gz";
357 357 sha256 = "1d8npb11kxyi36mrvjdpcjij76l5zfyrz2f820brf0l0rcw4vdkw";
358 358 };
359 359 meta = {
360 360 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "new BSD License"; } ];
361 361 };
362 362 };
363 363 "deform" = super.buildPythonPackage {
364 364 name = "deform-2.0.7";
365 365 doCheck = false;
366 366 propagatedBuildInputs = [
367 367 self."chameleon"
368 368 self."colander"
369 369 self."iso8601"
370 370 self."peppercorn"
371 371 self."translationstring"
372 372 self."zope.deprecation"
373 373 ];
374 374 src = fetchurl {
375 375 url = "https://files.pythonhosted.org/packages/cf/a1/bc234527b8f181de9acd80e796483c00007658d1e32b7de78f1c2e004d9a/deform-2.0.7.tar.gz";
376 376 sha256 = "0jnpi0zr2hjvbmiz6nm33yqv976dn9lf51vhlzqc0i75xcr9rwig";
377 377 };
378 378 meta = {
379 379 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
380 380 };
381 381 };
382 382 "defusedxml" = super.buildPythonPackage {
383 383 name = "defusedxml-0.6.0";
384 384 doCheck = false;
385 385 src = fetchurl {
386 386 url = "https://files.pythonhosted.org/packages/a4/5f/f8aa58ca0cf01cbcee728abc9d88bfeb74e95e6cb4334cfd5bed5673ea77/defusedxml-0.6.0.tar.gz";
387 387 sha256 = "1xbp8fivl3wlbyg2jrvs4lalaqv1xp9a9f29p75wdx2s2d6h717n";
388 388 };
389 389 meta = {
390 390 license = [ pkgs.lib.licenses.psfl ];
391 391 };
392 392 };
393 393 "dm.xmlsec.binding" = super.buildPythonPackage {
394 394 name = "dm.xmlsec.binding-1.3.7";
395 395 doCheck = false;
396 396 propagatedBuildInputs = [
397 397 self."setuptools"
398 398 self."lxml"
399 399 ];
400 400 src = fetchurl {
401 401 url = "https://files.pythonhosted.org/packages/2c/9e/7651982d50252692991acdae614af821fd6c79bc8dcd598ad71d55be8fc7/dm.xmlsec.binding-1.3.7.tar.gz";
402 402 sha256 = "03jjjscx1pz2nc0dwiw9nia02qbz1c6f0f9zkyr8fmvys2n5jkb3";
403 403 };
404 404 meta = {
405 405 license = [ pkgs.lib.licenses.bsdOriginal ];
406 406 };
407 407 };
408 408 "docutils" = super.buildPythonPackage {
409 409 name = "docutils-0.14";
410 410 doCheck = false;
411 411 src = fetchurl {
412 412 url = "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz";
413 413 sha256 = "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji";
414 414 };
415 415 meta = {
416 416 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.publicDomain pkgs.lib.licenses.gpl1 { fullName = "public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)"; } pkgs.lib.licenses.psfl ];
417 417 };
418 418 };
419 419 "dogpile.cache" = super.buildPythonPackage {
420 420 name = "dogpile.cache-0.7.1";
421 421 doCheck = false;
422 422 propagatedBuildInputs = [
423 423 self."decorator"
424 424 ];
425 425 src = fetchurl {
426 426 url = "https://files.pythonhosted.org/packages/84/3e/dbf1cfc5228f1d3dca80ef714db2c5aaec5cd9efaf54d7e3daef6bc48b19/dogpile.cache-0.7.1.tar.gz";
427 427 sha256 = "0caazmrzhnfqb5yrp8myhw61ny637jj69wcngrpbvi31jlcpy6v9";
428 428 };
429 429 meta = {
430 430 license = [ pkgs.lib.licenses.bsdOriginal ];
431 431 };
432 432 };
433 433 "dogpile.core" = super.buildPythonPackage {
434 434 name = "dogpile.core-0.4.1";
435 435 doCheck = false;
436 436 src = fetchurl {
437 437 url = "https://files.pythonhosted.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
438 438 sha256 = "0xpdvg4kr1isfkrh1rfsh7za4q5a5s6l2kf9wpvndbwf3aqjyrdy";
439 439 };
440 440 meta = {
441 441 license = [ pkgs.lib.licenses.bsdOriginal ];
442 442 };
443 443 };
444 444 "ecdsa" = super.buildPythonPackage {
445 445 name = "ecdsa-0.13";
446 446 doCheck = false;
447 447 src = fetchurl {
448 448 url = "https://files.pythonhosted.org/packages/f9/e5/99ebb176e47f150ac115ffeda5fedb6a3dbb3c00c74a59fd84ddf12f5857/ecdsa-0.13.tar.gz";
449 449 sha256 = "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4";
450 450 };
451 451 meta = {
452 452 license = [ pkgs.lib.licenses.mit ];
453 453 };
454 454 };
455 455 "elasticsearch" = super.buildPythonPackage {
456 456 name = "elasticsearch-6.3.1";
457 457 doCheck = false;
458 458 propagatedBuildInputs = [
459 459 self."urllib3"
460 460 ];
461 461 src = fetchurl {
462 462 url = "https://files.pythonhosted.org/packages/9d/ce/c4664e8380e379a9402ecfbaf158e56396da90d520daba21cfa840e0eb71/elasticsearch-6.3.1.tar.gz";
463 463 sha256 = "12y93v0yn7a4xmf969239g8gb3l4cdkclfpbk1qc8hx5qkymrnma";
464 464 };
465 465 meta = {
466 466 license = [ pkgs.lib.licenses.asl20 ];
467 467 };
468 468 };
469 469 "elasticsearch-dsl" = super.buildPythonPackage {
470 470 name = "elasticsearch-dsl-6.3.1";
471 471 doCheck = false;
472 472 propagatedBuildInputs = [
473 473 self."six"
474 474 self."python-dateutil"
475 475 self."elasticsearch"
476 476 self."ipaddress"
477 477 ];
478 478 src = fetchurl {
479 479 url = "https://files.pythonhosted.org/packages/4c/0d/1549f50c591db6bb4e66cbcc8d34a6e537c3d89aa426b167c244fd46420a/elasticsearch-dsl-6.3.1.tar.gz";
480 480 sha256 = "1gh8a0shqi105k325hgwb9avrpdjh0mc6mxwfg9ba7g6lssb702z";
481 481 };
482 482 meta = {
483 483 license = [ pkgs.lib.licenses.asl20 ];
484 484 };
485 485 };
486 486 "elasticsearch1" = super.buildPythonPackage {
487 487 name = "elasticsearch1-1.10.0";
488 488 doCheck = false;
489 489 propagatedBuildInputs = [
490 490 self."urllib3"
491 491 ];
492 492 src = fetchurl {
493 493 url = "https://files.pythonhosted.org/packages/a6/eb/73e75f9681fa71e3157b8ee878534235d57f24ee64f0e77f8d995fb57076/elasticsearch1-1.10.0.tar.gz";
494 494 sha256 = "0g89444kd5zwql4vbvyrmi2m6l6dcj6ga98j4hqxyyyz6z20aki2";
495 495 };
496 496 meta = {
497 497 license = [ pkgs.lib.licenses.asl20 ];
498 498 };
499 499 };
500 500 "elasticsearch1-dsl" = super.buildPythonPackage {
501 501 name = "elasticsearch1-dsl-0.0.12";
502 502 doCheck = false;
503 503 propagatedBuildInputs = [
504 504 self."six"
505 505 self."python-dateutil"
506 506 self."elasticsearch1"
507 507 ];
508 508 src = fetchurl {
509 509 url = "https://files.pythonhosted.org/packages/eb/9d/785342775cb10eddc9b8d7457d618a423b4f0b89d8b2b2d1bc27190d71db/elasticsearch1-dsl-0.0.12.tar.gz";
510 510 sha256 = "0ig1ly39v93hba0z975wnhbmzwj28w6w1sqlr2g7cn5spp732bhk";
511 511 };
512 512 meta = {
513 513 license = [ pkgs.lib.licenses.asl20 ];
514 514 };
515 515 };
516 516 "elasticsearch2" = super.buildPythonPackage {
517 517 name = "elasticsearch2-2.5.0";
518 518 doCheck = false;
519 519 propagatedBuildInputs = [
520 520 self."urllib3"
521 521 ];
522 522 src = fetchurl {
523 523 url = "https://files.pythonhosted.org/packages/84/77/63cf63d4ba11d913b5278406f2a37b0712bec6fc85edfb6151a33eaeba25/elasticsearch2-2.5.0.tar.gz";
524 524 sha256 = "0ky0q16lbvz022yv6q3pix7aamf026p1y994537ccjf0p0dxnbxr";
525 525 };
526 526 meta = {
527 527 license = [ pkgs.lib.licenses.asl20 ];
528 528 };
529 529 };
530 530 "entrypoints" = super.buildPythonPackage {
531 531 name = "entrypoints-0.2.2";
532 532 doCheck = false;
533 533 propagatedBuildInputs = [
534 534 self."configparser"
535 535 ];
536 536 src = fetchurl {
537 537 url = "https://code.rhodecode.com/upstream/entrypoints/artifacts/download/0-8e9ee9e4-c4db-409c-b07e-81568fd1832d.tar.gz?md5=3a027b8ff1d257b91fe257de6c43357d";
538 538 sha256 = "0qih72n2myclanplqipqxpgpj9d2yhff1pz5d02zq1cfqyd173w5";
539 539 };
540 540 meta = {
541 541 license = [ pkgs.lib.licenses.mit ];
542 542 };
543 543 };
544 544 "enum34" = super.buildPythonPackage {
545 545 name = "enum34-1.1.6";
546 546 doCheck = false;
547 547 src = fetchurl {
548 548 url = "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
549 549 sha256 = "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a";
550 550 };
551 551 meta = {
552 552 license = [ pkgs.lib.licenses.bsdOriginal ];
553 553 };
554 554 };
555 555 "formencode" = super.buildPythonPackage {
556 556 name = "formencode-1.2.4";
557 557 doCheck = false;
558 558 src = fetchurl {
559 559 url = "https://files.pythonhosted.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
560 560 sha256 = "1fgy04sdy4yry5xcjls3x3xy30dqwj58ycnkndim819jx0788w42";
561 561 };
562 562 meta = {
563 563 license = [ pkgs.lib.licenses.psfl ];
564 564 };
565 565 };
566 566 "funcsigs" = super.buildPythonPackage {
567 567 name = "funcsigs-1.0.2";
568 568 doCheck = false;
569 569 src = fetchurl {
570 570 url = "https://files.pythonhosted.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz";
571 571 sha256 = "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7";
572 572 };
573 573 meta = {
574 574 license = [ { fullName = "ASL"; } pkgs.lib.licenses.asl20 ];
575 575 };
576 576 };
577 577 "functools32" = super.buildPythonPackage {
578 578 name = "functools32-3.2.3.post2";
579 579 doCheck = false;
580 580 src = fetchurl {
581 581 url = "https://files.pythonhosted.org/packages/c5/60/6ac26ad05857c601308d8fb9e87fa36d0ebf889423f47c3502ef034365db/functools32-3.2.3-2.tar.gz";
582 582 sha256 = "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn";
583 583 };
584 584 meta = {
585 585 license = [ pkgs.lib.licenses.psfl ];
586 586 };
587 587 };
588 588 "future" = super.buildPythonPackage {
589 589 name = "future-0.14.3";
590 590 doCheck = false;
591 591 src = fetchurl {
592 592 url = "https://files.pythonhosted.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
593 593 sha256 = "1savk7jx7hal032f522c5ajhh8fra6gmnadrj9adv5qxi18pv1b2";
594 594 };
595 595 meta = {
596 596 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
597 597 };
598 598 };
599 599 "futures" = super.buildPythonPackage {
600 600 name = "futures-3.0.2";
601 601 doCheck = false;
602 602 src = fetchurl {
603 603 url = "https://files.pythonhosted.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
604 604 sha256 = "0mz2pbgxbc2nbib1szifi07whjbfs4r02pv2z390z7p410awjgyw";
605 605 };
606 606 meta = {
607 607 license = [ pkgs.lib.licenses.bsdOriginal ];
608 608 };
609 609 };
610 610 "gevent" = super.buildPythonPackage {
611 611 name = "gevent-1.4.0";
612 612 doCheck = false;
613 613 propagatedBuildInputs = [
614 614 self."greenlet"
615 615 ];
616 616 src = fetchurl {
617 617 url = "https://files.pythonhosted.org/packages/ed/27/6c49b70808f569b66ec7fac2e78f076e9b204db9cf5768740cff3d5a07ae/gevent-1.4.0.tar.gz";
618 618 sha256 = "1lchr4akw2jkm5v4kz7bdm4wv3knkfhbfn9vkkz4s5yrkcxzmdqy";
619 619 };
620 620 meta = {
621 621 license = [ pkgs.lib.licenses.mit ];
622 622 };
623 623 };
624 624 "gnureadline" = super.buildPythonPackage {
625 625 name = "gnureadline-6.3.8";
626 626 doCheck = false;
627 627 src = fetchurl {
628 628 url = "https://files.pythonhosted.org/packages/50/64/86085c823cd78f9df9d8e33dce0baa71618016f8860460b82cf6610e1eb3/gnureadline-6.3.8.tar.gz";
629 629 sha256 = "0ddhj98x2nv45iz4aadk4b9m0b1kpsn1xhcbypn5cd556knhiqjq";
630 630 };
631 631 meta = {
632 632 license = [ { fullName = "GNU General Public License v3 (GPLv3)"; } pkgs.lib.licenses.gpl1 ];
633 633 };
634 634 };
635 635 "gprof2dot" = super.buildPythonPackage {
636 636 name = "gprof2dot-2017.9.19";
637 637 doCheck = false;
638 638 src = fetchurl {
639 639 url = "https://files.pythonhosted.org/packages/9d/36/f977122502979f3dfb50704979c9ed70e6b620787942b089bf1af15f5aba/gprof2dot-2017.9.19.tar.gz";
640 640 sha256 = "17ih23ld2nzgc3xwgbay911l6lh96jp1zshmskm17n1gg2i7mg6f";
641 641 };
642 642 meta = {
643 643 license = [ { fullName = "GNU Lesser General Public License v3 or later (LGPLv3+)"; } { fullName = "LGPL"; } ];
644 644 };
645 645 };
646 646 "greenlet" = super.buildPythonPackage {
647 647 name = "greenlet-0.4.15";
648 648 doCheck = false;
649 649 src = fetchurl {
650 650 url = "https://files.pythonhosted.org/packages/f8/e8/b30ae23b45f69aa3f024b46064c0ac8e5fcb4f22ace0dca8d6f9c8bbe5e7/greenlet-0.4.15.tar.gz";
651 651 sha256 = "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll";
652 652 };
653 653 meta = {
654 654 license = [ pkgs.lib.licenses.mit ];
655 655 };
656 656 };
657 657 "gunicorn" = super.buildPythonPackage {
658 658 name = "gunicorn-19.9.0";
659 659 doCheck = false;
660 660 src = fetchurl {
661 661 url = "https://files.pythonhosted.org/packages/47/52/68ba8e5e8ba251e54006a49441f7ccabca83b6bef5aedacb4890596c7911/gunicorn-19.9.0.tar.gz";
662 662 sha256 = "1wzlf4xmn6qjirh5w81l6i6kqjnab1n1qqkh7zsj1yb6gh4n49ps";
663 663 };
664 664 meta = {
665 665 license = [ pkgs.lib.licenses.mit ];
666 666 };
667 667 };
668 668 "hupper" = super.buildPythonPackage {
669 669 name = "hupper-1.6.1";
670 670 doCheck = false;
671 671 src = fetchurl {
672 672 url = "https://files.pythonhosted.org/packages/85/d9/e005d357b11249c5d70ddf5b7adab2e4c0da4e8b0531ff146917a04fe6c0/hupper-1.6.1.tar.gz";
673 673 sha256 = "0d3cvkc8ssgwk54wvhbifj56ry97qi10pfzwfk8vwzzcikbfp3zy";
674 674 };
675 675 meta = {
676 676 license = [ pkgs.lib.licenses.mit ];
677 677 };
678 678 };
679 679 "infrae.cache" = super.buildPythonPackage {
680 680 name = "infrae.cache-1.0.1";
681 681 doCheck = false;
682 682 propagatedBuildInputs = [
683 683 self."beaker"
684 684 self."repoze.lru"
685 685 ];
686 686 src = fetchurl {
687 687 url = "https://files.pythonhosted.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
688 688 sha256 = "1dvqsjn8vw253wz9d1pz17j79mf4bs53dvp2qxck2qdp1am1njw4";
689 689 };
690 690 meta = {
691 691 license = [ pkgs.lib.licenses.zpl21 ];
692 692 };
693 693 };
694 694 "invoke" = super.buildPythonPackage {
695 695 name = "invoke-0.13.0";
696 696 doCheck = false;
697 697 src = fetchurl {
698 698 url = "https://files.pythonhosted.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
699 699 sha256 = "0794vhgxfmkh0vzkkg5cfv1w82g3jc3xr18wim29far9qpx9468s";
700 700 };
701 701 meta = {
702 702 license = [ pkgs.lib.licenses.bsdOriginal ];
703 703 };
704 704 };
705 705 "ipaddress" = super.buildPythonPackage {
706 706 name = "ipaddress-1.0.22";
707 707 doCheck = false;
708 708 src = fetchurl {
709 709 url = "https://files.pythonhosted.org/packages/97/8d/77b8cedcfbf93676148518036c6b1ce7f8e14bf07e95d7fd4ddcb8cc052f/ipaddress-1.0.22.tar.gz";
710 710 sha256 = "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi";
711 711 };
712 712 meta = {
713 713 license = [ pkgs.lib.licenses.psfl ];
714 714 };
715 715 };
716 716 "ipdb" = super.buildPythonPackage {
717 717 name = "ipdb-0.12";
718 718 doCheck = false;
719 719 propagatedBuildInputs = [
720 720 self."setuptools"
721 721 self."ipython"
722 722 ];
723 723 src = fetchurl {
724 724 url = "https://files.pythonhosted.org/packages/6d/43/c3c2e866a8803e196d6209595020a4a6db1a3c5d07c01455669497ae23d0/ipdb-0.12.tar.gz";
725 725 sha256 = "1khr2n7xfy8hg65kj1bsrjq9g7656pp0ybfa8abpbzpdawji3qnw";
726 726 };
727 727 meta = {
728 728 license = [ pkgs.lib.licenses.bsdOriginal ];
729 729 };
730 730 };
731 731 "ipython" = super.buildPythonPackage {
732 732 name = "ipython-5.1.0";
733 733 doCheck = false;
734 734 propagatedBuildInputs = [
735 735 self."setuptools"
736 736 self."decorator"
737 737 self."pickleshare"
738 738 self."simplegeneric"
739 739 self."traitlets"
740 740 self."prompt-toolkit"
741 741 self."pygments"
742 742 self."pexpect"
743 743 self."backports.shutil-get-terminal-size"
744 744 self."pathlib2"
745 745 self."pexpect"
746 746 ];
747 747 src = fetchurl {
748 748 url = "https://files.pythonhosted.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
749 749 sha256 = "0qdrf6aj9kvjczd5chj1my8y2iq09am9l8bb2a1334a52d76kx3y";
750 750 };
751 751 meta = {
752 752 license = [ pkgs.lib.licenses.bsdOriginal ];
753 753 };
754 754 };
755 755 "ipython-genutils" = super.buildPythonPackage {
756 756 name = "ipython-genutils-0.2.0";
757 757 doCheck = false;
758 758 src = fetchurl {
759 759 url = "https://files.pythonhosted.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz";
760 760 sha256 = "1a4bc9y8hnvq6cp08qs4mckgm6i6ajpndp4g496rvvzcfmp12bpb";
761 761 };
762 762 meta = {
763 763 license = [ pkgs.lib.licenses.bsdOriginal ];
764 764 };
765 765 };
766 766 "iso8601" = super.buildPythonPackage {
767 767 name = "iso8601-0.1.12";
768 768 doCheck = false;
769 769 src = fetchurl {
770 770 url = "https://files.pythonhosted.org/packages/45/13/3db24895497345fb44c4248c08b16da34a9eb02643cea2754b21b5ed08b0/iso8601-0.1.12.tar.gz";
771 771 sha256 = "10nyvvnrhw2w3p09v1ica4lgj6f4g9j3kkfx17qmraiq3w7b5i29";
772 772 };
773 773 meta = {
774 774 license = [ pkgs.lib.licenses.mit ];
775 775 };
776 776 };
777 777 "isodate" = super.buildPythonPackage {
778 778 name = "isodate-0.6.0";
779 779 doCheck = false;
780 780 propagatedBuildInputs = [
781 781 self."six"
782 782 ];
783 783 src = fetchurl {
784 784 url = "https://files.pythonhosted.org/packages/b1/80/fb8c13a4cd38eb5021dc3741a9e588e4d1de88d895c1910c6fc8a08b7a70/isodate-0.6.0.tar.gz";
785 785 sha256 = "1n7jkz68kk5pwni540pr5zdh99bf6ywydk1p5pdrqisrawylldif";
786 786 };
787 787 meta = {
788 788 license = [ pkgs.lib.licenses.bsdOriginal ];
789 789 };
790 790 };
791 791 "itsdangerous" = super.buildPythonPackage {
792 792 name = "itsdangerous-0.24";
793 793 doCheck = false;
794 794 src = fetchurl {
795 795 url = "https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
796 796 sha256 = "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb";
797 797 };
798 798 meta = {
799 799 license = [ pkgs.lib.licenses.bsdOriginal ];
800 800 };
801 801 };
802 802 "jinja2" = super.buildPythonPackage {
803 803 name = "jinja2-2.9.6";
804 804 doCheck = false;
805 805 propagatedBuildInputs = [
806 806 self."markupsafe"
807 807 ];
808 808 src = fetchurl {
809 809 url = "https://files.pythonhosted.org/packages/90/61/f820ff0076a2599dd39406dcb858ecb239438c02ce706c8e91131ab9c7f1/Jinja2-2.9.6.tar.gz";
810 810 sha256 = "1zzrkywhziqffrzks14kzixz7nd4yh2vc0fb04a68vfd2ai03anx";
811 811 };
812 812 meta = {
813 813 license = [ pkgs.lib.licenses.bsdOriginal ];
814 814 };
815 815 };
816 816 "jsonschema" = super.buildPythonPackage {
817 817 name = "jsonschema-2.6.0";
818 818 doCheck = false;
819 819 propagatedBuildInputs = [
820 820 self."functools32"
821 821 ];
822 822 src = fetchurl {
823 823 url = "https://files.pythonhosted.org/packages/58/b9/171dbb07e18c6346090a37f03c7e74410a1a56123f847efed59af260a298/jsonschema-2.6.0.tar.gz";
824 824 sha256 = "00kf3zmpp9ya4sydffpifn0j0mzm342a2vzh82p6r0vh10cg7xbg";
825 825 };
826 826 meta = {
827 827 license = [ pkgs.lib.licenses.mit ];
828 828 };
829 829 };
830 830 "jupyter-client" = super.buildPythonPackage {
831 831 name = "jupyter-client-5.0.0";
832 832 doCheck = false;
833 833 propagatedBuildInputs = [
834 834 self."traitlets"
835 835 self."jupyter-core"
836 836 self."pyzmq"
837 837 self."python-dateutil"
838 838 ];
839 839 src = fetchurl {
840 840 url = "https://files.pythonhosted.org/packages/e5/6f/65412ed462202b90134b7e761b0b7e7f949e07a549c1755475333727b3d0/jupyter_client-5.0.0.tar.gz";
841 841 sha256 = "0nxw4rqk4wsjhc87gjqd7pv89cb9dnimcfnmcmp85bmrvv1gjri7";
842 842 };
843 843 meta = {
844 844 license = [ pkgs.lib.licenses.bsdOriginal ];
845 845 };
846 846 };
847 847 "jupyter-core" = super.buildPythonPackage {
848 848 name = "jupyter-core-4.4.0";
849 849 doCheck = false;
850 850 propagatedBuildInputs = [
851 851 self."traitlets"
852 852 ];
853 853 src = fetchurl {
854 854 url = "https://files.pythonhosted.org/packages/b6/2d/2804f4de3a95583f65e5dcb4d7c8c7183124882323758996e867f47e72af/jupyter_core-4.4.0.tar.gz";
855 855 sha256 = "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s";
856 856 };
857 857 meta = {
858 858 license = [ pkgs.lib.licenses.bsdOriginal ];
859 859 };
860 860 };
861 861 "kombu" = super.buildPythonPackage {
862 862 name = "kombu-4.2.1";
863 863 doCheck = false;
864 864 propagatedBuildInputs = [
865 865 self."amqp"
866 866 ];
867 867 src = fetchurl {
868 868 url = "https://files.pythonhosted.org/packages/39/9f/556b988833abede4a80dbd18b2bdf4e8ff4486dd482ed45da961347e8ed2/kombu-4.2.1.tar.gz";
869 869 sha256 = "10lh3hncvw67fz0k5vgbx3yh9gjfpqdlia1f13i28cgnc1nfrbc6";
870 870 };
871 871 meta = {
872 872 license = [ pkgs.lib.licenses.bsdOriginal ];
873 873 };
874 874 };
875 875 "lxml" = super.buildPythonPackage {
876 876 name = "lxml-4.2.5";
877 877 doCheck = false;
878 878 src = fetchurl {
879 879 url = "https://files.pythonhosted.org/packages/4b/20/ddf5eb3bd5c57582d2b4652b4bbcf8da301bdfe5d805cb94e805f4d7464d/lxml-4.2.5.tar.gz";
880 880 sha256 = "0zw0y9hs0nflxhl9cs6ipwwh53szi3w2x06wl0k9cylyqac0cwin";
881 881 };
882 882 meta = {
883 883 license = [ pkgs.lib.licenses.bsdOriginal ];
884 884 };
885 885 };
886 886 "mako" = super.buildPythonPackage {
887 887 name = "mako-1.0.7";
888 888 doCheck = false;
889 889 propagatedBuildInputs = [
890 890 self."markupsafe"
891 891 ];
892 892 src = fetchurl {
893 893 url = "https://files.pythonhosted.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
894 894 sha256 = "1bi5gnr8r8dva06qpyx4kgjc6spm2k1y908183nbbaylggjzs0jf";
895 895 };
896 896 meta = {
897 897 license = [ pkgs.lib.licenses.mit ];
898 898 };
899 899 };
900 900 "markdown" = super.buildPythonPackage {
901 901 name = "markdown-2.6.11";
902 902 doCheck = false;
903 903 src = fetchurl {
904 904 url = "https://files.pythonhosted.org/packages/b3/73/fc5c850f44af5889192dff783b7b0d8f3fe8d30b65c8e3f78f8f0265fecf/Markdown-2.6.11.tar.gz";
905 905 sha256 = "108g80ryzykh8bj0i7jfp71510wrcixdi771lf2asyghgyf8cmm8";
906 906 };
907 907 meta = {
908 908 license = [ pkgs.lib.licenses.bsdOriginal ];
909 909 };
910 910 };
911 911 "markupsafe" = super.buildPythonPackage {
912 912 name = "markupsafe-1.1.0";
913 913 doCheck = false;
914 914 src = fetchurl {
915 915 url = "https://files.pythonhosted.org/packages/ac/7e/1b4c2e05809a4414ebce0892fe1e32c14ace86ca7d50c70f00979ca9b3a3/MarkupSafe-1.1.0.tar.gz";
916 916 sha256 = "1lxirjypbdd3l9jl4vliilhfnhy7c7f2vlldqg1b0i74khn375sf";
917 917 };
918 918 meta = {
919 919 license = [ pkgs.lib.licenses.bsdOriginal ];
920 920 };
921 921 };
922 922 "meld3" = super.buildPythonPackage {
923 923 name = "meld3-1.0.2";
924 924 doCheck = false;
925 925 src = fetchurl {
926 926 url = "https://files.pythonhosted.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
927 927 sha256 = "0n4mkwlpsqnmn0dm0wm5hn9nkda0nafl0jdy5sdl5977znh59dzp";
928 928 };
929 929 meta = {
930 930 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
931 931 };
932 932 };
933 933 "mistune" = super.buildPythonPackage {
934 934 name = "mistune-0.8.4";
935 935 doCheck = false;
936 936 src = fetchurl {
937 937 url = "https://files.pythonhosted.org/packages/2d/a4/509f6e7783ddd35482feda27bc7f72e65b5e7dc910eca4ab2164daf9c577/mistune-0.8.4.tar.gz";
938 938 sha256 = "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr";
939 939 };
940 940 meta = {
941 941 license = [ pkgs.lib.licenses.bsdOriginal ];
942 942 };
943 943 };
944 944 "mock" = super.buildPythonPackage {
945 945 name = "mock-1.0.1";
946 946 doCheck = false;
947 947 src = fetchurl {
948 948 url = "https://files.pythonhosted.org/packages/a2/52/7edcd94f0afb721a2d559a5b9aae8af4f8f2c79bc63fdbe8a8a6c9b23bbe/mock-1.0.1.tar.gz";
949 949 sha256 = "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq";
950 950 };
951 951 meta = {
952 952 license = [ pkgs.lib.licenses.bsdOriginal ];
953 953 };
954 954 };
955 955 "more-itertools" = super.buildPythonPackage {
956 956 name = "more-itertools-5.0.0";
957 957 doCheck = false;
958 958 propagatedBuildInputs = [
959 959 self."six"
960 960 ];
961 961 src = fetchurl {
962 962 url = "https://files.pythonhosted.org/packages/dd/26/30fc0d541d9fdf55faf5ba4b0fd68f81d5bd2447579224820ad525934178/more-itertools-5.0.0.tar.gz";
963 963 sha256 = "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q";
964 964 };
965 965 meta = {
966 966 license = [ pkgs.lib.licenses.mit ];
967 967 };
968 968 };
969 969 "msgpack-python" = super.buildPythonPackage {
970 970 name = "msgpack-python-0.5.6";
971 971 doCheck = false;
972 972 src = fetchurl {
973 973 url = "https://files.pythonhosted.org/packages/8a/20/6eca772d1a5830336f84aca1d8198e5a3f4715cd1c7fc36d3cc7f7185091/msgpack-python-0.5.6.tar.gz";
974 974 sha256 = "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p";
975 975 };
976 976 meta = {
977 977 license = [ pkgs.lib.licenses.asl20 ];
978 978 };
979 979 };
980 980 "mysql-python" = super.buildPythonPackage {
981 981 name = "mysql-python-1.2.5";
982 982 doCheck = false;
983 983 src = fetchurl {
984 984 url = "https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
985 985 sha256 = "0x0c2jg0bb3pp84njaqiic050qkyd7ymwhfvhipnimg58yv40441";
986 986 };
987 987 meta = {
988 988 license = [ pkgs.lib.licenses.gpl1 ];
989 989 };
990 990 };
991 991 "nbconvert" = super.buildPythonPackage {
992 992 name = "nbconvert-5.3.1";
993 993 doCheck = false;
994 994 propagatedBuildInputs = [
995 995 self."mistune"
996 996 self."jinja2"
997 997 self."pygments"
998 998 self."traitlets"
999 999 self."jupyter-core"
1000 1000 self."nbformat"
1001 1001 self."entrypoints"
1002 1002 self."bleach"
1003 1003 self."pandocfilters"
1004 1004 self."testpath"
1005 1005 ];
1006 1006 src = fetchurl {
1007 1007 url = "https://files.pythonhosted.org/packages/b9/a4/d0a0938ad6f5eeb4dea4e73d255c617ef94b0b2849d51194c9bbdb838412/nbconvert-5.3.1.tar.gz";
1008 1008 sha256 = "1f9dkvpx186xjm4xab0qbph588mncp4vqk3fmxrsnqs43mks9c8j";
1009 1009 };
1010 1010 meta = {
1011 1011 license = [ pkgs.lib.licenses.bsdOriginal ];
1012 1012 };
1013 1013 };
1014 1014 "nbformat" = super.buildPythonPackage {
1015 1015 name = "nbformat-4.4.0";
1016 1016 doCheck = false;
1017 1017 propagatedBuildInputs = [
1018 1018 self."ipython-genutils"
1019 1019 self."traitlets"
1020 1020 self."jsonschema"
1021 1021 self."jupyter-core"
1022 1022 ];
1023 1023 src = fetchurl {
1024 1024 url = "https://files.pythonhosted.org/packages/6e/0e/160754f7ae3e984863f585a3743b0ed1702043a81245907c8fae2d537155/nbformat-4.4.0.tar.gz";
1025 1025 sha256 = "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp";
1026 1026 };
1027 1027 meta = {
1028 1028 license = [ pkgs.lib.licenses.bsdOriginal ];
1029 1029 };
1030 1030 };
1031 1031 "packaging" = super.buildPythonPackage {
1032 1032 name = "packaging-15.2";
1033 1033 doCheck = false;
1034 1034 src = fetchurl {
1035 1035 url = "https://files.pythonhosted.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
1036 1036 sha256 = "1zn60w84bxvw6wypffka18ca66pa1k2cfrq3cq8fnsfja5m3k4ng";
1037 1037 };
1038 1038 meta = {
1039 1039 license = [ pkgs.lib.licenses.asl20 ];
1040 1040 };
1041 1041 };
1042 1042 "pandocfilters" = super.buildPythonPackage {
1043 1043 name = "pandocfilters-1.4.2";
1044 1044 doCheck = false;
1045 1045 src = fetchurl {
1046 1046 url = "https://files.pythonhosted.org/packages/4c/ea/236e2584af67bb6df960832731a6e5325fd4441de001767da328c33368ce/pandocfilters-1.4.2.tar.gz";
1047 1047 sha256 = "1a8d9b7s48gmq9zj0pmbyv2sivn5i7m6mybgpkk4jm5vd7hp1pdk";
1048 1048 };
1049 1049 meta = {
1050 1050 license = [ pkgs.lib.licenses.bsdOriginal ];
1051 1051 };
1052 1052 };
1053 1053 "paste" = super.buildPythonPackage {
1054 1054 name = "paste-3.0.8";
1055 1055 doCheck = false;
1056 1056 propagatedBuildInputs = [
1057 1057 self."six"
1058 1058 ];
1059 1059 src = fetchurl {
1060 1060 url = "https://files.pythonhosted.org/packages/66/65/e3acf1663438483c1f6ced0b6c6f3b90da9f0faacb0a6e2aa0f3f9f4b235/Paste-3.0.8.tar.gz";
1061 1061 sha256 = "05w1sh6ky4d7pmdb8nv82n13w22jcn3qsagg5ih3hjmbws9kkwf4";
1062 1062 };
1063 1063 meta = {
1064 1064 license = [ pkgs.lib.licenses.mit ];
1065 1065 };
1066 1066 };
1067 1067 "pastedeploy" = super.buildPythonPackage {
1068 1068 name = "pastedeploy-2.0.1";
1069 1069 doCheck = false;
1070 1070 src = fetchurl {
1071 1071 url = "https://files.pythonhosted.org/packages/19/a0/5623701df7e2478a68a1b685d1a84518024eef994cde7e4da8449a31616f/PasteDeploy-2.0.1.tar.gz";
1072 1072 sha256 = "02imfbbx1mi2h546f3sr37m47dk9qizaqhzzlhx8bkzxa6fzn8yl";
1073 1073 };
1074 1074 meta = {
1075 1075 license = [ pkgs.lib.licenses.mit ];
1076 1076 };
1077 1077 };
1078 1078 "pastescript" = super.buildPythonPackage {
1079 1079 name = "pastescript-3.1.0";
1080 1080 doCheck = false;
1081 1081 propagatedBuildInputs = [
1082 1082 self."paste"
1083 1083 self."pastedeploy"
1084 1084 self."six"
1085 1085 ];
1086 1086 src = fetchurl {
1087 1087 url = "https://files.pythonhosted.org/packages/9e/1d/14db1c283eb21a5d36b6ba1114c13b709629711e64acab653d9994fe346f/PasteScript-3.1.0.tar.gz";
1088 1088 sha256 = "02qcxjjr32ks7a6d4f533wl34ysc7yhwlrfcyqwqbzr52250v4fs";
1089 1089 };
1090 1090 meta = {
1091 1091 license = [ pkgs.lib.licenses.mit ];
1092 1092 };
1093 1093 };
1094 1094 "pathlib2" = super.buildPythonPackage {
1095 1095 name = "pathlib2-2.3.3";
1096 1096 doCheck = false;
1097 1097 propagatedBuildInputs = [
1098 1098 self."six"
1099 1099 self."scandir"
1100 1100 ];
1101 1101 src = fetchurl {
1102 1102 url = "https://files.pythonhosted.org/packages/bf/d7/a2568f4596b75d2c6e2b4094a7e64f620decc7887f69a1f2811931ea15b9/pathlib2-2.3.3.tar.gz";
1103 1103 sha256 = "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695";
1104 1104 };
1105 1105 meta = {
1106 1106 license = [ pkgs.lib.licenses.mit ];
1107 1107 };
1108 1108 };
1109 1109 "peppercorn" = super.buildPythonPackage {
1110 1110 name = "peppercorn-0.6";
1111 1111 doCheck = false;
1112 1112 src = fetchurl {
1113 1113 url = "https://files.pythonhosted.org/packages/e4/77/93085de7108cdf1a0b092ff443872a8f9442c736d7ddebdf2f27627935f4/peppercorn-0.6.tar.gz";
1114 1114 sha256 = "1ip4bfwcpwkq9hz2dai14k2cyabvwrnvcvrcmzxmqm04g8fnimwn";
1115 1115 };
1116 1116 meta = {
1117 1117 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1118 1118 };
1119 1119 };
1120 1120 "pexpect" = super.buildPythonPackage {
1121 1121 name = "pexpect-4.7.0";
1122 1122 doCheck = false;
1123 1123 propagatedBuildInputs = [
1124 1124 self."ptyprocess"
1125 1125 ];
1126 1126 src = fetchurl {
1127 1127 url = "https://files.pythonhosted.org/packages/1c/b1/362a0d4235496cb42c33d1d8732b5e2c607b0129ad5fdd76f5a583b9fcb3/pexpect-4.7.0.tar.gz";
1128 1128 sha256 = "1sv2rri15zwhds85a4kamwh9pj49qcxv7m4miyr4jfpfwv81yb4y";
1129 1129 };
1130 1130 meta = {
1131 1131 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
1132 1132 };
1133 1133 };
1134 1134 "pickleshare" = super.buildPythonPackage {
1135 1135 name = "pickleshare-0.7.5";
1136 1136 doCheck = false;
1137 1137 propagatedBuildInputs = [
1138 1138 self."pathlib2"
1139 1139 ];
1140 1140 src = fetchurl {
1141 1141 url = "https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8/pickleshare-0.7.5.tar.gz";
1142 1142 sha256 = "1jmghg3c53yp1i8cm6pcrm280ayi8621rwyav9fac7awjr3kss47";
1143 1143 };
1144 1144 meta = {
1145 1145 license = [ pkgs.lib.licenses.mit ];
1146 1146 };
1147 1147 };
1148 1148 "plaster" = super.buildPythonPackage {
1149 1149 name = "plaster-1.0";
1150 1150 doCheck = false;
1151 1151 propagatedBuildInputs = [
1152 1152 self."setuptools"
1153 1153 ];
1154 1154 src = fetchurl {
1155 1155 url = "https://files.pythonhosted.org/packages/37/e1/56d04382d718d32751017d32f351214384e529b794084eee20bb52405563/plaster-1.0.tar.gz";
1156 1156 sha256 = "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3";
1157 1157 };
1158 1158 meta = {
1159 1159 license = [ pkgs.lib.licenses.mit ];
1160 1160 };
1161 1161 };
1162 1162 "plaster-pastedeploy" = super.buildPythonPackage {
1163 1163 name = "plaster-pastedeploy-0.7";
1164 1164 doCheck = false;
1165 1165 propagatedBuildInputs = [
1166 1166 self."pastedeploy"
1167 1167 self."plaster"
1168 1168 ];
1169 1169 src = fetchurl {
1170 1170 url = "https://files.pythonhosted.org/packages/99/69/2d3bc33091249266a1bd3cf24499e40ab31d54dffb4a7d76fe647950b98c/plaster_pastedeploy-0.7.tar.gz";
1171 1171 sha256 = "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r";
1172 1172 };
1173 1173 meta = {
1174 1174 license = [ pkgs.lib.licenses.mit ];
1175 1175 };
1176 1176 };
1177 1177 "pluggy" = super.buildPythonPackage {
1178 1178 name = "pluggy-0.11.0";
1179 1179 doCheck = false;
1180 1180 src = fetchurl {
1181 1181 url = "https://files.pythonhosted.org/packages/0d/a1/862ab336e8128fde20981d2c1aa8506693412daf5083b1911d539412676b/pluggy-0.11.0.tar.gz";
1182 1182 sha256 = "10511a54dvafw1jrk75mrhml53c7b7w4yaw7241696lc2hfvr895";
1183 1183 };
1184 1184 meta = {
1185 1185 license = [ pkgs.lib.licenses.mit ];
1186 1186 };
1187 1187 };
1188 1188 "prompt-toolkit" = super.buildPythonPackage {
1189 1189 name = "prompt-toolkit-1.0.16";
1190 1190 doCheck = false;
1191 1191 propagatedBuildInputs = [
1192 1192 self."six"
1193 1193 self."wcwidth"
1194 1194 ];
1195 1195 src = fetchurl {
1196 1196 url = "https://files.pythonhosted.org/packages/f1/03/bb36771dc9fa7553ac4bdc639a9ecdf6fda0ff4176faf940d97e3c16e41d/prompt_toolkit-1.0.16.tar.gz";
1197 1197 sha256 = "1d65hm6nf0cbq0q0121m60zzy4s1fpg9fn761s1yxf08dridvkn1";
1198 1198 };
1199 1199 meta = {
1200 1200 license = [ pkgs.lib.licenses.bsdOriginal ];
1201 1201 };
1202 1202 };
1203 1203 "psutil" = super.buildPythonPackage {
1204 1204 name = "psutil-5.5.1";
1205 1205 doCheck = false;
1206 1206 src = fetchurl {
1207 1207 url = "https://files.pythonhosted.org/packages/c7/01/7c30b247cdc5ba29623faa5c8cf1f1bbf7e041783c340414b0ed7e067c64/psutil-5.5.1.tar.gz";
1208 1208 sha256 = "045qaqvn6k90bj5bcy259yrwcd2afgznaav3sfhphy9b8ambzkkj";
1209 1209 };
1210 1210 meta = {
1211 1211 license = [ pkgs.lib.licenses.bsdOriginal ];
1212 1212 };
1213 1213 };
1214 1214 "psycopg2" = super.buildPythonPackage {
1215 1215 name = "psycopg2-2.8.2";
1216 1216 doCheck = false;
1217 1217 src = fetchurl {
1218 1218 url = "https://files.pythonhosted.org/packages/23/7e/93c325482c328619870b6cd09370f6dbe1148283daca65115cd63642e60f/psycopg2-2.8.2.tar.gz";
1219 1219 sha256 = "122mn2z3r0zgs8jyq682jjjr6vq5690qmxqf22gj6g41dwdz5b2w";
1220 1220 };
1221 1221 meta = {
1222 1222 license = [ pkgs.lib.licenses.zpl21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1223 1223 };
1224 1224 };
1225 1225 "ptyprocess" = super.buildPythonPackage {
1226 1226 name = "ptyprocess-0.6.0";
1227 1227 doCheck = false;
1228 1228 src = fetchurl {
1229 1229 url = "https://files.pythonhosted.org/packages/7d/2d/e4b8733cf79b7309d84c9081a4ab558c89d8c89da5961bf4ddb050ca1ce0/ptyprocess-0.6.0.tar.gz";
1230 1230 sha256 = "1h4lcd3w5nrxnsk436ar7fwkiy5rfn5wj2xwy9l0r4mdqnf2jgwj";
1231 1231 };
1232 1232 meta = {
1233 1233 license = [ ];
1234 1234 };
1235 1235 };
1236 1236 "py" = super.buildPythonPackage {
1237 1237 name = "py-1.6.0";
1238 1238 doCheck = false;
1239 1239 src = fetchurl {
1240 1240 url = "https://files.pythonhosted.org/packages/4f/38/5f427d1eedae73063ce4da680d2bae72014995f9fdeaa57809df61c968cd/py-1.6.0.tar.gz";
1241 1241 sha256 = "1wcs3zv9wl5m5x7p16avqj2gsrviyb23yvc3pr330isqs0sh98q6";
1242 1242 };
1243 1243 meta = {
1244 1244 license = [ pkgs.lib.licenses.mit ];
1245 1245 };
1246 1246 };
1247 1247 "py-bcrypt" = super.buildPythonPackage {
1248 1248 name = "py-bcrypt-0.4";
1249 1249 doCheck = false;
1250 1250 src = fetchurl {
1251 1251 url = "https://files.pythonhosted.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1252 1252 sha256 = "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az";
1253 1253 };
1254 1254 meta = {
1255 1255 license = [ pkgs.lib.licenses.bsdOriginal ];
1256 1256 };
1257 1257 };
1258 1258 "py-gfm" = super.buildPythonPackage {
1259 1259 name = "py-gfm-0.1.4";
1260 1260 doCheck = false;
1261 1261 propagatedBuildInputs = [
1262 1262 self."setuptools"
1263 1263 self."markdown"
1264 1264 ];
1265 1265 src = fetchurl {
1266 1266 url = "https://files.pythonhosted.org/packages/06/ee/004a03a1d92bb386dae44f6dd087db541bc5093374f1637d4d4ae5596cc2/py-gfm-0.1.4.tar.gz";
1267 1267 sha256 = "0zip06g2isivx8fzgqd4n9qzsa22c25jas1rsb7m2rnjg72m0rzg";
1268 1268 };
1269 1269 meta = {
1270 1270 license = [ pkgs.lib.licenses.bsdOriginal ];
1271 1271 };
1272 1272 };
1273 1273 "pyasn1" = super.buildPythonPackage {
1274 1274 name = "pyasn1-0.4.5";
1275 1275 doCheck = false;
1276 1276 src = fetchurl {
1277 1277 url = "https://files.pythonhosted.org/packages/46/60/b7e32f6ff481b8a1f6c8f02b0fd9b693d1c92ddd2efb038ec050d99a7245/pyasn1-0.4.5.tar.gz";
1278 1278 sha256 = "1xqh3jh2nfi2bflk5a0vn59y3pp1vn54f3ksx652sid92gz2096s";
1279 1279 };
1280 1280 meta = {
1281 1281 license = [ pkgs.lib.licenses.bsdOriginal ];
1282 1282 };
1283 1283 };
1284 1284 "pyasn1-modules" = super.buildPythonPackage {
1285 1285 name = "pyasn1-modules-0.2.5";
1286 1286 doCheck = false;
1287 1287 propagatedBuildInputs = [
1288 1288 self."pyasn1"
1289 1289 ];
1290 1290 src = fetchurl {
1291 1291 url = "https://files.pythonhosted.org/packages/ec/0b/69620cb04a016e4a1e8e352e8a42717862129b574b3479adb2358a1f12f7/pyasn1-modules-0.2.5.tar.gz";
1292 1292 sha256 = "15nvfx0vnl8akdlv3k6s0n80vqvryj82bm040jdsn7wmyxl1ywpg";
1293 1293 };
1294 1294 meta = {
1295 1295 license = [ pkgs.lib.licenses.bsdOriginal ];
1296 1296 };
1297 1297 };
1298 1298 "pycparser" = super.buildPythonPackage {
1299 1299 name = "pycparser-2.19";
1300 1300 doCheck = false;
1301 1301 src = fetchurl {
1302 1302 url = "https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz";
1303 1303 sha256 = "1cr5dcj9628lkz1qlwq3fv97c25363qppkmcayqvd05dpy573259";
1304 1304 };
1305 1305 meta = {
1306 1306 license = [ pkgs.lib.licenses.bsdOriginal ];
1307 1307 };
1308 1308 };
1309 1309 "pycrypto" = super.buildPythonPackage {
1310 1310 name = "pycrypto-2.6.1";
1311 1311 doCheck = false;
1312 1312 src = fetchurl {
1313 1313 url = "https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1314 1314 sha256 = "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj";
1315 1315 };
1316 1316 meta = {
1317 1317 license = [ pkgs.lib.licenses.publicDomain ];
1318 1318 };
1319 1319 };
1320 1320 "pycurl" = super.buildPythonPackage {
1321 1321 name = "pycurl-7.43.0.2";
1322 1322 doCheck = false;
1323 1323 src = fetchurl {
1324 1324 url = "https://files.pythonhosted.org/packages/e8/e4/0dbb8735407189f00b33d84122b9be52c790c7c3b25286826f4e1bdb7bde/pycurl-7.43.0.2.tar.gz";
1325 1325 sha256 = "1915kb04k1j4y6k1dx1sgnbddxrl9r1n4q928if2lkrdm73xy30g";
1326 1326 };
1327 1327 meta = {
1328 1328 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1329 1329 };
1330 1330 };
1331 1331 "pygments" = super.buildPythonPackage {
1332 1332 name = "pygments-2.4.2";
1333 1333 doCheck = false;
1334 1334 src = fetchurl {
1335 1335 url = "https://files.pythonhosted.org/packages/7e/ae/26808275fc76bf2832deb10d3a3ed3107bc4de01b85dcccbe525f2cd6d1e/Pygments-2.4.2.tar.gz";
1336 1336 sha256 = "15v2sqm5g12bqa0c7wikfh9ck2nl97ayizy1hpqhmws5gqalq748";
1337 1337 };
1338 1338 meta = {
1339 1339 license = [ pkgs.lib.licenses.bsdOriginal ];
1340 1340 };
1341 1341 };
1342 1342 "pymysql" = super.buildPythonPackage {
1343 1343 name = "pymysql-0.8.1";
1344 1344 doCheck = false;
1345 1345 src = fetchurl {
1346 1346 url = "https://files.pythonhosted.org/packages/44/39/6bcb83cae0095a31b6be4511707fdf2009d3e29903a55a0494d3a9a2fac0/PyMySQL-0.8.1.tar.gz";
1347 1347 sha256 = "0a96crz55bw4h6myh833skrli7b0ck89m3x673y2z2ryy7zrpq9l";
1348 1348 };
1349 1349 meta = {
1350 1350 license = [ pkgs.lib.licenses.mit ];
1351 1351 };
1352 1352 };
1353 1353 "pyotp" = super.buildPythonPackage {
1354 1354 name = "pyotp-2.2.7";
1355 1355 doCheck = false;
1356 1356 src = fetchurl {
1357 1357 url = "https://files.pythonhosted.org/packages/b1/ab/477cda97b6ca7baced5106471cb1ac1fe698d1b035983b9f8ee3422989eb/pyotp-2.2.7.tar.gz";
1358 1358 sha256 = "00p69nw431f0s2ilg0hnd77p1l22m06p9rq4f8zfapmavnmzw3xy";
1359 1359 };
1360 1360 meta = {
1361 1361 license = [ pkgs.lib.licenses.mit ];
1362 1362 };
1363 1363 };
1364 1364 "pyparsing" = super.buildPythonPackage {
1365 1365 name = "pyparsing-2.3.0";
1366 1366 doCheck = false;
1367 1367 src = fetchurl {
1368 1368 url = "https://files.pythonhosted.org/packages/d0/09/3e6a5eeb6e04467b737d55f8bba15247ac0876f98fae659e58cd744430c6/pyparsing-2.3.0.tar.gz";
1369 1369 sha256 = "14k5v7n3xqw8kzf42x06bzp184spnlkya2dpjyflax6l3yrallzk";
1370 1370 };
1371 1371 meta = {
1372 1372 license = [ pkgs.lib.licenses.mit ];
1373 1373 };
1374 1374 };
1375 1375 "pyramid" = super.buildPythonPackage {
1376 1376 name = "pyramid-1.10.4";
1377 1377 doCheck = false;
1378 1378 propagatedBuildInputs = [
1379 1379 self."hupper"
1380 1380 self."plaster"
1381 1381 self."plaster-pastedeploy"
1382 1382 self."setuptools"
1383 1383 self."translationstring"
1384 1384 self."venusian"
1385 1385 self."webob"
1386 1386 self."zope.deprecation"
1387 1387 self."zope.interface"
1388 1388 self."repoze.lru"
1389 1389 ];
1390 1390 src = fetchurl {
1391 1391 url = "https://files.pythonhosted.org/packages/c2/43/1ae701c9c6bb3a434358e678a5e72c96e8aa55cf4cb1d2fa2041b5dd38b7/pyramid-1.10.4.tar.gz";
1392 1392 sha256 = "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q";
1393 1393 };
1394 1394 meta = {
1395 1395 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1396 1396 };
1397 1397 };
1398 "pyramid-beaker" = super.buildPythonPackage {
1399 name = "pyramid-beaker-0.8";
1400 doCheck = false;
1401 propagatedBuildInputs = [
1402 self."pyramid"
1403 self."beaker"
1404 ];
1405 src = fetchurl {
1406 url = "https://files.pythonhosted.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1407 sha256 = "0hflx3qkcdml1mwpq53sz46s7jickpfn0zy0ns2c7j445j66bp3p";
1408 };
1409 meta = {
1410 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1411 };
1412 };
1413 1398 "pyramid-debugtoolbar" = super.buildPythonPackage {
1414 1399 name = "pyramid-debugtoolbar-4.5";
1415 1400 doCheck = false;
1416 1401 propagatedBuildInputs = [
1417 1402 self."pyramid"
1418 1403 self."pyramid-mako"
1419 1404 self."repoze.lru"
1420 1405 self."pygments"
1421 1406 self."ipaddress"
1422 1407 ];
1423 1408 src = fetchurl {
1424 1409 url = "https://files.pythonhosted.org/packages/14/28/1f240239af340d19ee271ac62958158c79edb01a44ad8c9885508dd003d2/pyramid_debugtoolbar-4.5.tar.gz";
1425 1410 sha256 = "0x2p3409pnx66n6dx5vc0mk2r1cp1ydr8mp120w44r9pwcngbibl";
1426 1411 };
1427 1412 meta = {
1428 1413 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1429 1414 };
1430 1415 };
1431 1416 "pyramid-jinja2" = super.buildPythonPackage {
1432 1417 name = "pyramid-jinja2-2.7";
1433 1418 doCheck = false;
1434 1419 propagatedBuildInputs = [
1435 1420 self."pyramid"
1436 1421 self."zope.deprecation"
1437 1422 self."jinja2"
1438 1423 self."markupsafe"
1439 1424 ];
1440 1425 src = fetchurl {
1441 1426 url = "https://files.pythonhosted.org/packages/d8/80/d60a7233823de22ce77bd864a8a83736a1fe8b49884b08303a2e68b2c853/pyramid_jinja2-2.7.tar.gz";
1442 1427 sha256 = "1sz5s0pp5jqhf4w22w9527yz8hgdi4mhr6apd6vw1gm5clghh8aw";
1443 1428 };
1444 1429 meta = {
1445 1430 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1446 1431 };
1447 1432 };
1448 1433 "pyramid-mailer" = super.buildPythonPackage {
1449 1434 name = "pyramid-mailer-0.15.1";
1450 1435 doCheck = false;
1451 1436 propagatedBuildInputs = [
1452 1437 self."pyramid"
1453 1438 self."repoze.sendmail"
1454 1439 self."transaction"
1455 1440 ];
1456 1441 src = fetchurl {
1457 1442 url = "https://files.pythonhosted.org/packages/a0/f2/6febf5459dff4d7e653314d575469ad2e11b9d2af2c3606360e1c67202f2/pyramid_mailer-0.15.1.tar.gz";
1458 1443 sha256 = "16vg8jb203jgb7b0hd6wllfqvp542qh2ry1gjai2m6qpv5agy2pc";
1459 1444 };
1460 1445 meta = {
1461 1446 license = [ pkgs.lib.licenses.bsdOriginal ];
1462 1447 };
1463 1448 };
1464 1449 "pyramid-mako" = super.buildPythonPackage {
1465 1450 name = "pyramid-mako-1.0.2";
1466 1451 doCheck = false;
1467 1452 propagatedBuildInputs = [
1468 1453 self."pyramid"
1469 1454 self."mako"
1470 1455 ];
1471 1456 src = fetchurl {
1472 1457 url = "https://files.pythonhosted.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1473 1458 sha256 = "18gk2vliq8z4acblsl6yzgbvnr9rlxjlcqir47km7kvlk1xri83d";
1474 1459 };
1475 1460 meta = {
1476 1461 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1477 1462 };
1478 1463 };
1479 1464 "pysqlite" = super.buildPythonPackage {
1480 1465 name = "pysqlite-2.8.3";
1481 1466 doCheck = false;
1482 1467 src = fetchurl {
1483 1468 url = "https://files.pythonhosted.org/packages/42/02/981b6703e3c83c5b25a829c6e77aad059f9481b0bbacb47e6e8ca12bd731/pysqlite-2.8.3.tar.gz";
1484 1469 sha256 = "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp";
1485 1470 };
1486 1471 meta = {
1487 1472 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1488 1473 };
1489 1474 };
1490 1475 "pytest" = super.buildPythonPackage {
1491 1476 name = "pytest-3.8.2";
1492 1477 doCheck = false;
1493 1478 propagatedBuildInputs = [
1494 1479 self."py"
1495 1480 self."six"
1496 1481 self."setuptools"
1497 1482 self."attrs"
1498 1483 self."more-itertools"
1499 1484 self."atomicwrites"
1500 1485 self."pluggy"
1501 1486 self."funcsigs"
1502 1487 self."pathlib2"
1503 1488 ];
1504 1489 src = fetchurl {
1505 1490 url = "https://files.pythonhosted.org/packages/5f/d2/7f77f406ac505abda02ab4afb50d06ebf304f6ea42fca34f8f37529106b2/pytest-3.8.2.tar.gz";
1506 1491 sha256 = "18nrwzn61kph2y6gxwfz9ms68rfvr9d4vcffsxng9p7jk9z18clk";
1507 1492 };
1508 1493 meta = {
1509 1494 license = [ pkgs.lib.licenses.mit ];
1510 1495 };
1511 1496 };
1512 1497 "pytest-cov" = super.buildPythonPackage {
1513 1498 name = "pytest-cov-2.6.0";
1514 1499 doCheck = false;
1515 1500 propagatedBuildInputs = [
1516 1501 self."pytest"
1517 1502 self."coverage"
1518 1503 ];
1519 1504 src = fetchurl {
1520 1505 url = "https://files.pythonhosted.org/packages/d9/e2/58f90a316fbd94dd50bf5c826a23f3f5d079fb3cc448c1e9f0e3c33a3d2a/pytest-cov-2.6.0.tar.gz";
1521 1506 sha256 = "0qnpp9y3ygx4jk4pf5ad71fh2skbvnr6gl54m7rg5qysnx4g0q73";
1522 1507 };
1523 1508 meta = {
1524 1509 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
1525 1510 };
1526 1511 };
1527 1512 "pytest-profiling" = super.buildPythonPackage {
1528 1513 name = "pytest-profiling-1.3.0";
1529 1514 doCheck = false;
1530 1515 propagatedBuildInputs = [
1531 1516 self."six"
1532 1517 self."pytest"
1533 1518 self."gprof2dot"
1534 1519 ];
1535 1520 src = fetchurl {
1536 1521 url = "https://files.pythonhosted.org/packages/f5/34/4626126e041a51ef50a80d0619519b18d20aef249aac25b0d0fdd47e57ee/pytest-profiling-1.3.0.tar.gz";
1537 1522 sha256 = "08r5afx5z22yvpmsnl91l4amsy1yxn8qsmm61mhp06mz8zjs51kb";
1538 1523 };
1539 1524 meta = {
1540 1525 license = [ pkgs.lib.licenses.mit ];
1541 1526 };
1542 1527 };
1543 1528 "pytest-runner" = super.buildPythonPackage {
1544 1529 name = "pytest-runner-4.2";
1545 1530 doCheck = false;
1546 1531 src = fetchurl {
1547 1532 url = "https://files.pythonhosted.org/packages/9e/b7/fe6e8f87f9a756fd06722216f1b6698ccba4d269eac6329d9f0c441d0f93/pytest-runner-4.2.tar.gz";
1548 1533 sha256 = "1gkpyphawxz38ni1gdq1fmwyqcg02m7ypzqvv46z06crwdxi2gyj";
1549 1534 };
1550 1535 meta = {
1551 1536 license = [ pkgs.lib.licenses.mit ];
1552 1537 };
1553 1538 };
1554 1539 "pytest-sugar" = super.buildPythonPackage {
1555 1540 name = "pytest-sugar-0.9.1";
1556 1541 doCheck = false;
1557 1542 propagatedBuildInputs = [
1558 1543 self."pytest"
1559 1544 self."termcolor"
1560 1545 ];
1561 1546 src = fetchurl {
1562 1547 url = "https://files.pythonhosted.org/packages/3e/6a/a3f909083079d03bde11d06ab23088886bbe25f2c97fbe4bb865e2bf05bc/pytest-sugar-0.9.1.tar.gz";
1563 1548 sha256 = "0b4av40dv30727m54v211r0nzwjp2ajkjgxix6j484qjmwpw935b";
1564 1549 };
1565 1550 meta = {
1566 1551 license = [ pkgs.lib.licenses.bsdOriginal ];
1567 1552 };
1568 1553 };
1569 1554 "pytest-timeout" = super.buildPythonPackage {
1570 1555 name = "pytest-timeout-1.3.2";
1571 1556 doCheck = false;
1572 1557 propagatedBuildInputs = [
1573 1558 self."pytest"
1574 1559 ];
1575 1560 src = fetchurl {
1576 1561 url = "https://files.pythonhosted.org/packages/8c/3e/1b6a319d12ae7baa3acb7c18ff2c8630a09471a0319d43535c683b4d03eb/pytest-timeout-1.3.2.tar.gz";
1577 1562 sha256 = "09wnmzvnls2mnsdz7x3c3sk2zdp6jl4dryvyj5i8hqz16q2zq5qi";
1578 1563 };
1579 1564 meta = {
1580 1565 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1581 1566 };
1582 1567 };
1583 1568 "python-dateutil" = super.buildPythonPackage {
1584 1569 name = "python-dateutil-2.8.0";
1585 1570 doCheck = false;
1586 1571 propagatedBuildInputs = [
1587 1572 self."six"
1588 1573 ];
1589 1574 src = fetchurl {
1590 1575 url = "https://files.pythonhosted.org/packages/ad/99/5b2e99737edeb28c71bcbec5b5dda19d0d9ef3ca3e92e3e925e7c0bb364c/python-dateutil-2.8.0.tar.gz";
1591 1576 sha256 = "17nsfhy4xdz1khrfxa61vd7pmvd5z0wa3zb6v4gb4kfnykv0b668";
1592 1577 };
1593 1578 meta = {
1594 1579 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.asl20 { fullName = "Dual License"; } ];
1595 1580 };
1596 1581 };
1597 1582 "python-editor" = super.buildPythonPackage {
1598 1583 name = "python-editor-1.0.4";
1599 1584 doCheck = false;
1600 1585 src = fetchurl {
1601 1586 url = "https://files.pythonhosted.org/packages/0a/85/78f4a216d28343a67b7397c99825cff336330893f00601443f7c7b2f2234/python-editor-1.0.4.tar.gz";
1602 1587 sha256 = "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai";
1603 1588 };
1604 1589 meta = {
1605 1590 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1606 1591 };
1607 1592 };
1608 1593 "python-ldap" = super.buildPythonPackage {
1609 1594 name = "python-ldap-3.1.0";
1610 1595 doCheck = false;
1611 1596 propagatedBuildInputs = [
1612 1597 self."pyasn1"
1613 1598 self."pyasn1-modules"
1614 1599 ];
1615 1600 src = fetchurl {
1616 1601 url = "https://files.pythonhosted.org/packages/7f/1c/28d721dff2fcd2fef9d55b40df63a00be26ec8a11e8c6fc612ae642f9cfd/python-ldap-3.1.0.tar.gz";
1617 1602 sha256 = "1i97nwfnraylyn0myxlf3vciicrf5h6fymrcff9c00k581wmx5s1";
1618 1603 };
1619 1604 meta = {
1620 1605 license = [ pkgs.lib.licenses.psfl ];
1621 1606 };
1622 1607 };
1623 1608 "python-memcached" = super.buildPythonPackage {
1624 1609 name = "python-memcached-1.59";
1625 1610 doCheck = false;
1626 1611 propagatedBuildInputs = [
1627 1612 self."six"
1628 1613 ];
1629 1614 src = fetchurl {
1630 1615 url = "https://files.pythonhosted.org/packages/90/59/5faf6e3cd8a568dd4f737ddae4f2e54204fd8c51f90bf8df99aca6c22318/python-memcached-1.59.tar.gz";
1631 1616 sha256 = "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2";
1632 1617 };
1633 1618 meta = {
1634 1619 license = [ pkgs.lib.licenses.psfl ];
1635 1620 };
1636 1621 };
1637 1622 "python-pam" = super.buildPythonPackage {
1638 1623 name = "python-pam-1.8.4";
1639 1624 doCheck = false;
1640 1625 src = fetchurl {
1641 1626 url = "https://files.pythonhosted.org/packages/01/16/544d01cae9f28e0292dbd092b6b8b0bf222b528f362ee768a5bed2140111/python-pam-1.8.4.tar.gz";
1642 1627 sha256 = "16whhc0vr7gxsbzvsnq65nq8fs3wwmx755cavm8kkczdkz4djmn8";
1643 1628 };
1644 1629 meta = {
1645 1630 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1646 1631 };
1647 1632 };
1648 1633 "python-saml" = super.buildPythonPackage {
1649 1634 name = "python-saml-2.4.2";
1650 1635 doCheck = false;
1651 1636 propagatedBuildInputs = [
1652 1637 self."dm.xmlsec.binding"
1653 1638 self."isodate"
1654 1639 self."defusedxml"
1655 1640 ];
1656 1641 src = fetchurl {
1657 1642 url = "https://files.pythonhosted.org/packages/79/a8/a6611017e0883102fd5e2b73c9d90691b8134e38247c04ee1531d3dc647c/python-saml-2.4.2.tar.gz";
1658 1643 sha256 = "0dls4hwvf13yg7x5yfjrghbywg8g38vn5vr0rsf70hli3ydbfm43";
1659 1644 };
1660 1645 meta = {
1661 1646 license = [ pkgs.lib.licenses.mit ];
1662 1647 };
1663 1648 };
1664 1649 "pytz" = super.buildPythonPackage {
1665 1650 name = "pytz-2018.4";
1666 1651 doCheck = false;
1667 1652 src = fetchurl {
1668 1653 url = "https://files.pythonhosted.org/packages/10/76/52efda4ef98e7544321fd8d5d512e11739c1df18b0649551aeccfb1c8376/pytz-2018.4.tar.gz";
1669 1654 sha256 = "0jgpqx3kk2rhv81j1izjxvmx8d0x7hzs1857pgqnixic5wq2ar60";
1670 1655 };
1671 1656 meta = {
1672 1657 license = [ pkgs.lib.licenses.mit ];
1673 1658 };
1674 1659 };
1675 1660 "pyzmq" = super.buildPythonPackage {
1676 1661 name = "pyzmq-14.6.0";
1677 1662 doCheck = false;
1678 1663 src = fetchurl {
1679 1664 url = "https://files.pythonhosted.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1680 1665 sha256 = "1frmbjykvhmdg64g7sn20c9fpamrsfxwci1nhhg8q7jgz5pq0ikp";
1681 1666 };
1682 1667 meta = {
1683 1668 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1684 1669 };
1685 1670 };
1686 1671 "redis" = super.buildPythonPackage {
1687 1672 name = "redis-2.10.6";
1688 1673 doCheck = false;
1689 1674 src = fetchurl {
1690 1675 url = "https://files.pythonhosted.org/packages/09/8d/6d34b75326bf96d4139a2ddd8e74b80840f800a0a79f9294399e212cb9a7/redis-2.10.6.tar.gz";
1691 1676 sha256 = "03vcgklykny0g0wpvqmy8p6azi2s078317wgb2xjv5m2rs9sjb52";
1692 1677 };
1693 1678 meta = {
1694 1679 license = [ pkgs.lib.licenses.mit ];
1695 1680 };
1696 1681 };
1697 1682 "repoze.lru" = super.buildPythonPackage {
1698 1683 name = "repoze.lru-0.7";
1699 1684 doCheck = false;
1700 1685 src = fetchurl {
1701 1686 url = "https://files.pythonhosted.org/packages/12/bc/595a77c4b5e204847fdf19268314ef59c85193a9dc9f83630fc459c0fee5/repoze.lru-0.7.tar.gz";
1702 1687 sha256 = "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84";
1703 1688 };
1704 1689 meta = {
1705 1690 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1706 1691 };
1707 1692 };
1708 1693 "repoze.sendmail" = super.buildPythonPackage {
1709 1694 name = "repoze.sendmail-4.4.1";
1710 1695 doCheck = false;
1711 1696 propagatedBuildInputs = [
1712 1697 self."setuptools"
1713 1698 self."zope.interface"
1714 1699 self."transaction"
1715 1700 ];
1716 1701 src = fetchurl {
1717 1702 url = "https://files.pythonhosted.org/packages/12/4e/8ef1fd5c42765d712427b9c391419a77bd48877886d2cbc5e9f23c8cad9b/repoze.sendmail-4.4.1.tar.gz";
1718 1703 sha256 = "096ln02jr2afk7ab9j2czxqv2ryqq7m86ah572nqplx52iws73ks";
1719 1704 };
1720 1705 meta = {
1721 1706 license = [ pkgs.lib.licenses.zpl21 ];
1722 1707 };
1723 1708 };
1724 1709 "requests" = super.buildPythonPackage {
1725 1710 name = "requests-2.9.1";
1726 1711 doCheck = false;
1727 1712 src = fetchurl {
1728 1713 url = "https://files.pythonhosted.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1729 1714 sha256 = "0zsqrzlybf25xscgi7ja4s48y2abf9wvjkn47wh984qgs1fq2xy5";
1730 1715 };
1731 1716 meta = {
1732 1717 license = [ pkgs.lib.licenses.asl20 ];
1733 1718 };
1734 1719 };
1735 1720 "rhodecode-enterprise-ce" = super.buildPythonPackage {
1736 1721 name = "rhodecode-enterprise-ce-4.17.0";
1737 1722 buildInputs = [
1738 1723 self."pytest"
1739 1724 self."py"
1740 1725 self."pytest-cov"
1741 1726 self."pytest-sugar"
1742 1727 self."pytest-runner"
1743 1728 self."pytest-profiling"
1744 1729 self."pytest-timeout"
1745 1730 self."gprof2dot"
1746 1731 self."mock"
1747 1732 self."cov-core"
1748 1733 self."coverage"
1749 1734 self."webtest"
1750 1735 self."beautifulsoup4"
1751 1736 self."configobj"
1752 1737 ];
1753 1738 doCheck = true;
1754 1739 propagatedBuildInputs = [
1755 1740 self."amqp"
1756 1741 self."authomatic"
1757 1742 self."babel"
1758 1743 self."beaker"
1759 1744 self."bleach"
1760 1745 self."celery"
1761 1746 self."channelstream"
1762 1747 self."click"
1763 1748 self."colander"
1764 1749 self."configobj"
1765 1750 self."cssselect"
1766 1751 self."cryptography"
1767 1752 self."decorator"
1768 1753 self."deform"
1769 1754 self."docutils"
1770 1755 self."dogpile.cache"
1771 1756 self."dogpile.core"
1772 1757 self."formencode"
1773 1758 self."future"
1774 1759 self."futures"
1775 1760 self."infrae.cache"
1776 1761 self."iso8601"
1777 1762 self."itsdangerous"
1778 1763 self."kombu"
1779 1764 self."lxml"
1780 1765 self."mako"
1781 1766 self."markdown"
1782 1767 self."markupsafe"
1783 1768 self."msgpack-python"
1784 1769 self."pyotp"
1785 1770 self."packaging"
1786 1771 self."paste"
1787 1772 self."pastedeploy"
1788 1773 self."pastescript"
1789 1774 self."peppercorn"
1790 1775 self."psutil"
1791 1776 self."py-bcrypt"
1792 1777 self."pycurl"
1793 1778 self."pycrypto"
1794 1779 self."pygments"
1795 1780 self."pyparsing"
1796 self."pyramid-beaker"
1797 1781 self."pyramid-debugtoolbar"
1798 1782 self."pyramid-mako"
1799 1783 self."pyramid"
1800 1784 self."pyramid-mailer"
1801 1785 self."python-dateutil"
1802 1786 self."python-ldap"
1803 1787 self."python-memcached"
1804 1788 self."python-pam"
1805 1789 self."python-saml"
1806 1790 self."pytz"
1807 1791 self."tzlocal"
1808 1792 self."pyzmq"
1809 1793 self."py-gfm"
1810 1794 self."redis"
1811 1795 self."repoze.lru"
1812 1796 self."requests"
1813 1797 self."routes"
1814 1798 self."simplejson"
1815 1799 self."six"
1816 1800 self."sqlalchemy"
1817 1801 self."sshpubkeys"
1818 1802 self."subprocess32"
1819 1803 self."supervisor"
1820 1804 self."translationstring"
1821 1805 self."urllib3"
1822 1806 self."urlobject"
1823 1807 self."venusian"
1824 1808 self."weberror"
1825 1809 self."webhelpers2"
1826 1810 self."webhelpers"
1827 1811 self."webob"
1828 1812 self."whoosh"
1829 1813 self."wsgiref"
1830 1814 self."zope.cachedescriptors"
1831 1815 self."zope.deprecation"
1832 1816 self."zope.event"
1833 1817 self."zope.interface"
1834 1818 self."mysql-python"
1835 1819 self."pymysql"
1836 1820 self."pysqlite"
1837 1821 self."psycopg2"
1838 1822 self."nbconvert"
1839 1823 self."nbformat"
1840 1824 self."jupyter-client"
1841 1825 self."alembic"
1842 1826 self."invoke"
1843 1827 self."bumpversion"
1844 1828 self."gevent"
1845 1829 self."greenlet"
1846 1830 self."gunicorn"
1847 1831 self."waitress"
1848 1832 self."ipdb"
1849 1833 self."ipython"
1850 1834 self."rhodecode-tools"
1851 1835 self."appenlight-client"
1852 1836 self."pytest"
1853 1837 self."py"
1854 1838 self."pytest-cov"
1855 1839 self."pytest-sugar"
1856 1840 self."pytest-runner"
1857 1841 self."pytest-profiling"
1858 1842 self."pytest-timeout"
1859 1843 self."gprof2dot"
1860 1844 self."mock"
1861 1845 self."cov-core"
1862 1846 self."coverage"
1863 1847 self."webtest"
1864 1848 self."beautifulsoup4"
1865 1849 ];
1866 1850 src = ./.;
1867 1851 meta = {
1868 1852 license = [ { fullName = "Affero GNU General Public License v3 or later (AGPLv3+)"; } { fullName = "AGPLv3, and Commercial License"; } ];
1869 1853 };
1870 1854 };
1871 1855 "rhodecode-tools" = super.buildPythonPackage {
1872 1856 name = "rhodecode-tools-1.2.1";
1873 1857 doCheck = false;
1874 1858 propagatedBuildInputs = [
1875 1859 self."click"
1876 1860 self."future"
1877 1861 self."six"
1878 1862 self."mako"
1879 1863 self."markupsafe"
1880 1864 self."requests"
1881 1865 self."urllib3"
1882 1866 self."whoosh"
1883 1867 self."elasticsearch"
1884 1868 self."elasticsearch-dsl"
1885 1869 self."elasticsearch2"
1886 1870 self."elasticsearch1-dsl"
1887 1871 ];
1888 1872 src = fetchurl {
1889 1873 url = "https://code.rhodecode.com/rhodecode-tools-ce/artifacts/download/0-10ac93f4-bb7d-4b97-baea-68110743dd5a.tar.gz?md5=962dc77c06aceee62282b98d33149661";
1890 1874 sha256 = "1vfhgf46inbx7jvlfx4fdzh3vz7lh37r291gzb5hx447pfm3qllg";
1891 1875 };
1892 1876 meta = {
1893 1877 license = [ { fullName = "Apache 2.0 and Proprietary"; } ];
1894 1878 };
1895 1879 };
1896 1880 "routes" = super.buildPythonPackage {
1897 1881 name = "routes-2.4.1";
1898 1882 doCheck = false;
1899 1883 propagatedBuildInputs = [
1900 1884 self."six"
1901 1885 self."repoze.lru"
1902 1886 ];
1903 1887 src = fetchurl {
1904 1888 url = "https://files.pythonhosted.org/packages/33/38/ea827837e68d9c7dde4cff7ec122a93c319f0effc08ce92a17095576603f/Routes-2.4.1.tar.gz";
1905 1889 sha256 = "1zamff3m0kc4vyfniyhxpkkcqv1rrgnmh37ykxv34nna1ws47vi6";
1906 1890 };
1907 1891 meta = {
1908 1892 license = [ pkgs.lib.licenses.mit ];
1909 1893 };
1910 1894 };
1911 1895 "scandir" = super.buildPythonPackage {
1912 1896 name = "scandir-1.10.0";
1913 1897 doCheck = false;
1914 1898 src = fetchurl {
1915 1899 url = "https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz";
1916 1900 sha256 = "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd";
1917 1901 };
1918 1902 meta = {
1919 1903 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "New BSD License"; } ];
1920 1904 };
1921 1905 };
1922 1906 "setproctitle" = super.buildPythonPackage {
1923 1907 name = "setproctitle-1.1.10";
1924 1908 doCheck = false;
1925 1909 src = fetchurl {
1926 1910 url = "https://files.pythonhosted.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3/setproctitle-1.1.10.tar.gz";
1927 1911 sha256 = "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2";
1928 1912 };
1929 1913 meta = {
1930 1914 license = [ pkgs.lib.licenses.bsdOriginal ];
1931 1915 };
1932 1916 };
1933 1917 "setuptools" = super.buildPythonPackage {
1934 1918 name = "setuptools-41.0.1";
1935 1919 doCheck = false;
1936 1920 src = fetchurl {
1937 1921 url = "https://files.pythonhosted.org/packages/1d/64/a18a487b4391a05b9c7f938b94a16d80305bf0369c6b0b9509e86165e1d3/setuptools-41.0.1.zip";
1938 1922 sha256 = "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2";
1939 1923 };
1940 1924 meta = {
1941 1925 license = [ pkgs.lib.licenses.mit ];
1942 1926 };
1943 1927 };
1944 1928 "simplegeneric" = super.buildPythonPackage {
1945 1929 name = "simplegeneric-0.8.1";
1946 1930 doCheck = false;
1947 1931 src = fetchurl {
1948 1932 url = "https://files.pythonhosted.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
1949 1933 sha256 = "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw";
1950 1934 };
1951 1935 meta = {
1952 1936 license = [ pkgs.lib.licenses.zpl21 ];
1953 1937 };
1954 1938 };
1955 1939 "simplejson" = super.buildPythonPackage {
1956 1940 name = "simplejson-3.16.0";
1957 1941 doCheck = false;
1958 1942 src = fetchurl {
1959 1943 url = "https://files.pythonhosted.org/packages/e3/24/c35fb1c1c315fc0fffe61ea00d3f88e85469004713dab488dee4f35b0aff/simplejson-3.16.0.tar.gz";
1960 1944 sha256 = "19cws1syk8jzq2pw43878dv6fjkb0ifvjpx0i9aajix6kc9jkwxi";
1961 1945 };
1962 1946 meta = {
1963 1947 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1964 1948 };
1965 1949 };
1966 1950 "six" = super.buildPythonPackage {
1967 1951 name = "six-1.11.0";
1968 1952 doCheck = false;
1969 1953 src = fetchurl {
1970 1954 url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz";
1971 1955 sha256 = "1scqzwc51c875z23phj48gircqjgnn3af8zy2izjwmnlxrxsgs3h";
1972 1956 };
1973 1957 meta = {
1974 1958 license = [ pkgs.lib.licenses.mit ];
1975 1959 };
1976 1960 };
1977 1961 "sqlalchemy" = super.buildPythonPackage {
1978 1962 name = "sqlalchemy-1.1.18";
1979 1963 doCheck = false;
1980 1964 src = fetchurl {
1981 1965 url = "https://files.pythonhosted.org/packages/cc/4d/96d93ff77cd67aca7618e402191eee3490d8f5f245d6ab7622d35fe504f4/SQLAlchemy-1.1.18.tar.gz";
1982 1966 sha256 = "1ab4ysip6irajfbxl9wy27kv76miaz8h6759hfx92499z4dcf3lb";
1983 1967 };
1984 1968 meta = {
1985 1969 license = [ pkgs.lib.licenses.mit ];
1986 1970 };
1987 1971 };
1988 1972 "sshpubkeys" = super.buildPythonPackage {
1989 1973 name = "sshpubkeys-3.1.0";
1990 1974 doCheck = false;
1991 1975 propagatedBuildInputs = [
1992 1976 self."cryptography"
1993 1977 self."ecdsa"
1994 1978 ];
1995 1979 src = fetchurl {
1996 1980 url = "https://files.pythonhosted.org/packages/00/23/f7508a12007c96861c3da811992f14283d79c819d71a217b3e12d5196649/sshpubkeys-3.1.0.tar.gz";
1997 1981 sha256 = "105g2li04nm1hb15a2y6hm9m9k7fbrkd5l3gy12w3kgcmsf3k25k";
1998 1982 };
1999 1983 meta = {
2000 1984 license = [ pkgs.lib.licenses.bsdOriginal ];
2001 1985 };
2002 1986 };
2003 1987 "subprocess32" = super.buildPythonPackage {
2004 1988 name = "subprocess32-3.5.4";
2005 1989 doCheck = false;
2006 1990 src = fetchurl {
2007 1991 url = "https://files.pythonhosted.org/packages/32/c8/564be4d12629b912ea431f1a50eb8b3b9d00f1a0b1ceff17f266be190007/subprocess32-3.5.4.tar.gz";
2008 1992 sha256 = "17f7mvwx2271s1wrl0qac3wjqqnrqag866zs3qc8v5wp0k43fagb";
2009 1993 };
2010 1994 meta = {
2011 1995 license = [ pkgs.lib.licenses.psfl ];
2012 1996 };
2013 1997 };
2014 1998 "supervisor" = super.buildPythonPackage {
2015 1999 name = "supervisor-4.0.3";
2016 2000 doCheck = false;
2017 2001 propagatedBuildInputs = [
2018 2002 self."meld3"
2019 2003 ];
2020 2004 src = fetchurl {
2021 2005 url = "https://files.pythonhosted.org/packages/97/48/f38bf70bd9282d1a18d591616557cc1a77a1c627d57dff66ead65c891dc8/supervisor-4.0.3.tar.gz";
2022 2006 sha256 = "17hla7mx6w5m5jzkkjxgqa8wpswqmfhbhf49f692hw78fg0ans7p";
2023 2007 };
2024 2008 meta = {
2025 2009 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
2026 2010 };
2027 2011 };
2028 2012 "tempita" = super.buildPythonPackage {
2029 2013 name = "tempita-0.5.2";
2030 2014 doCheck = false;
2031 2015 src = fetchurl {
2032 2016 url = "https://files.pythonhosted.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
2033 2017 sha256 = "177wwq45slfyajd8csy477bmdmzipyw0dm7i85k3akb7m85wzkna";
2034 2018 };
2035 2019 meta = {
2036 2020 license = [ pkgs.lib.licenses.mit ];
2037 2021 };
2038 2022 };
2039 2023 "termcolor" = super.buildPythonPackage {
2040 2024 name = "termcolor-1.1.0";
2041 2025 doCheck = false;
2042 2026 src = fetchurl {
2043 2027 url = "https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
2044 2028 sha256 = "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x";
2045 2029 };
2046 2030 meta = {
2047 2031 license = [ pkgs.lib.licenses.mit ];
2048 2032 };
2049 2033 };
2050 2034 "testpath" = super.buildPythonPackage {
2051 2035 name = "testpath-0.4.2";
2052 2036 doCheck = false;
2053 2037 src = fetchurl {
2054 2038 url = "https://files.pythonhosted.org/packages/06/30/9a7e917066d851d8b4117e85794b5f14516419ea714a8a2681ec6aa8a981/testpath-0.4.2.tar.gz";
2055 2039 sha256 = "1y40hywscnnyb734pnzm55nd8r8kp1072bjxbil83gcd53cv755n";
2056 2040 };
2057 2041 meta = {
2058 2042 license = [ ];
2059 2043 };
2060 2044 };
2061 2045 "traitlets" = super.buildPythonPackage {
2062 2046 name = "traitlets-4.3.2";
2063 2047 doCheck = false;
2064 2048 propagatedBuildInputs = [
2065 2049 self."ipython-genutils"
2066 2050 self."six"
2067 2051 self."decorator"
2068 2052 self."enum34"
2069 2053 ];
2070 2054 src = fetchurl {
2071 2055 url = "https://files.pythonhosted.org/packages/a5/98/7f5ef2fe9e9e071813aaf9cb91d1a732e0a68b6c44a32b38cb8e14c3f069/traitlets-4.3.2.tar.gz";
2072 2056 sha256 = "0dbq7sx26xqz5ixs711k5nc88p8a0nqyz6162pwks5dpcz9d4jww";
2073 2057 };
2074 2058 meta = {
2075 2059 license = [ pkgs.lib.licenses.bsdOriginal ];
2076 2060 };
2077 2061 };
2078 2062 "transaction" = super.buildPythonPackage {
2079 2063 name = "transaction-2.4.0";
2080 2064 doCheck = false;
2081 2065 propagatedBuildInputs = [
2082 2066 self."zope.interface"
2083 2067 ];
2084 2068 src = fetchurl {
2085 2069 url = "https://files.pythonhosted.org/packages/9d/7d/0e8af0d059e052b9dcf2bb5a08aad20ae3e238746bdd3f8701a60969b363/transaction-2.4.0.tar.gz";
2086 2070 sha256 = "17wz1y524ca07vr03yddy8dv0gbscs06dbdywmllxv5rc725jq3j";
2087 2071 };
2088 2072 meta = {
2089 2073 license = [ pkgs.lib.licenses.zpl21 ];
2090 2074 };
2091 2075 };
2092 2076 "translationstring" = super.buildPythonPackage {
2093 2077 name = "translationstring-1.3";
2094 2078 doCheck = false;
2095 2079 src = fetchurl {
2096 2080 url = "https://files.pythonhosted.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
2097 2081 sha256 = "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f";
2098 2082 };
2099 2083 meta = {
2100 2084 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
2101 2085 };
2102 2086 };
2103 2087 "tzlocal" = super.buildPythonPackage {
2104 2088 name = "tzlocal-1.5.1";
2105 2089 doCheck = false;
2106 2090 propagatedBuildInputs = [
2107 2091 self."pytz"
2108 2092 ];
2109 2093 src = fetchurl {
2110 2094 url = "https://files.pythonhosted.org/packages/cb/89/e3687d3ed99bc882793f82634e9824e62499fdfdc4b1ae39e211c5b05017/tzlocal-1.5.1.tar.gz";
2111 2095 sha256 = "0kiciwiqx0bv0fbc913idxibc4ygg4cb7f8rcpd9ij2shi4bigjf";
2112 2096 };
2113 2097 meta = {
2114 2098 license = [ pkgs.lib.licenses.mit ];
2115 2099 };
2116 2100 };
2117 2101 "urllib3" = super.buildPythonPackage {
2118 2102 name = "urllib3-1.24.1";
2119 2103 doCheck = false;
2120 2104 src = fetchurl {
2121 2105 url = "https://files.pythonhosted.org/packages/b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1/urllib3-1.24.1.tar.gz";
2122 2106 sha256 = "08lwd9f3hqznyf32vnzwvp87pchx062nkbgyrf67rwlkgj0jk5fy";
2123 2107 };
2124 2108 meta = {
2125 2109 license = [ pkgs.lib.licenses.mit ];
2126 2110 };
2127 2111 };
2128 2112 "urlobject" = super.buildPythonPackage {
2129 2113 name = "urlobject-2.4.3";
2130 2114 doCheck = false;
2131 2115 src = fetchurl {
2132 2116 url = "https://files.pythonhosted.org/packages/e2/b8/1d0a916f4b34c4618846e6da0e4eeaa8fcb4a2f39e006434fe38acb74b34/URLObject-2.4.3.tar.gz";
2133 2117 sha256 = "1ahc8ficzfvr2avln71immfh4ls0zyv6cdaa5xmkdj5rd87f5cj7";
2134 2118 };
2135 2119 meta = {
2136 2120 license = [ pkgs.lib.licenses.publicDomain ];
2137 2121 };
2138 2122 };
2139 2123 "venusian" = super.buildPythonPackage {
2140 2124 name = "venusian-1.2.0";
2141 2125 doCheck = false;
2142 2126 src = fetchurl {
2143 2127 url = "https://files.pythonhosted.org/packages/7e/6f/40a9d43ac77cb51cb62be5b5662d170f43f8037bdc4eab56336c4ca92bb7/venusian-1.2.0.tar.gz";
2144 2128 sha256 = "0ghyx66g8ikx9nx1mnwqvdcqm11i1vlq0hnvwl50s48bp22q5v34";
2145 2129 };
2146 2130 meta = {
2147 2131 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
2148 2132 };
2149 2133 };
2150 2134 "vine" = super.buildPythonPackage {
2151 2135 name = "vine-1.3.0";
2152 2136 doCheck = false;
2153 2137 src = fetchurl {
2154 2138 url = "https://files.pythonhosted.org/packages/1c/e1/79fb8046e607dd6c2ad05c9b8ebac9d0bd31d086a08f02699e96fc5b3046/vine-1.3.0.tar.gz";
2155 2139 sha256 = "11ydsbhl1vabndc2r979dv61s6j2b0giq6dgvryifvq1m7bycghk";
2156 2140 };
2157 2141 meta = {
2158 2142 license = [ pkgs.lib.licenses.bsdOriginal ];
2159 2143 };
2160 2144 };
2161 2145 "waitress" = super.buildPythonPackage {
2162 2146 name = "waitress-1.3.0";
2163 2147 doCheck = false;
2164 2148 src = fetchurl {
2165 2149 url = "https://files.pythonhosted.org/packages/43/50/9890471320d5ad22761ae46661cf745f487b1c8c4ec49352b99e1078b970/waitress-1.3.0.tar.gz";
2166 2150 sha256 = "09j5dzbbcxib7vdskhx39s1qsydlr4n2p2png71d7mjnr9pnwajf";
2167 2151 };
2168 2152 meta = {
2169 2153 license = [ pkgs.lib.licenses.zpl21 ];
2170 2154 };
2171 2155 };
2172 2156 "wcwidth" = super.buildPythonPackage {
2173 2157 name = "wcwidth-0.1.7";
2174 2158 doCheck = false;
2175 2159 src = fetchurl {
2176 2160 url = "https://files.pythonhosted.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
2177 2161 sha256 = "0pn6dflzm609m4r3i8ik5ni9ijjbb5fa3vg1n7hn6vkd49r77wrx";
2178 2162 };
2179 2163 meta = {
2180 2164 license = [ pkgs.lib.licenses.mit ];
2181 2165 };
2182 2166 };
2183 2167 "webencodings" = super.buildPythonPackage {
2184 2168 name = "webencodings-0.5.1";
2185 2169 doCheck = false;
2186 2170 src = fetchurl {
2187 2171 url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz";
2188 2172 sha256 = "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk";
2189 2173 };
2190 2174 meta = {
2191 2175 license = [ pkgs.lib.licenses.bsdOriginal ];
2192 2176 };
2193 2177 };
2194 2178 "weberror" = super.buildPythonPackage {
2195 2179 name = "weberror-0.10.3";
2196 2180 doCheck = false;
2197 2181 propagatedBuildInputs = [
2198 2182 self."webob"
2199 2183 self."tempita"
2200 2184 self."pygments"
2201 2185 self."paste"
2202 2186 ];
2203 2187 src = fetchurl {
2204 2188 url = "https://files.pythonhosted.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
2205 2189 sha256 = "0frg4kvycqpj5bi8asfqfs6bxsr2cvjvb6b56c4d1ai1z57kbjx6";
2206 2190 };
2207 2191 meta = {
2208 2192 license = [ pkgs.lib.licenses.mit ];
2209 2193 };
2210 2194 };
2211 2195 "webhelpers" = super.buildPythonPackage {
2212 2196 name = "webhelpers-1.3";
2213 2197 doCheck = false;
2214 2198 propagatedBuildInputs = [
2215 2199 self."markupsafe"
2216 2200 ];
2217 2201 src = fetchurl {
2218 2202 url = "https://files.pythonhosted.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
2219 2203 sha256 = "10x5i82qdkrvyw18gsybwggfhfpl869siaab89vnndi9x62g51pa";
2220 2204 };
2221 2205 meta = {
2222 2206 license = [ pkgs.lib.licenses.bsdOriginal ];
2223 2207 };
2224 2208 };
2225 2209 "webhelpers2" = super.buildPythonPackage {
2226 2210 name = "webhelpers2-2.0";
2227 2211 doCheck = false;
2228 2212 propagatedBuildInputs = [
2229 2213 self."markupsafe"
2230 2214 self."six"
2231 2215 ];
2232 2216 src = fetchurl {
2233 2217 url = "https://files.pythonhosted.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
2234 2218 sha256 = "0aphva1qmxh83n01p53f5fd43m4srzbnfbz5ajvbx9aj2aipwmcs";
2235 2219 };
2236 2220 meta = {
2237 2221 license = [ pkgs.lib.licenses.mit ];
2238 2222 };
2239 2223 };
2240 2224 "webob" = super.buildPythonPackage {
2241 2225 name = "webob-1.8.5";
2242 2226 doCheck = false;
2243 2227 src = fetchurl {
2244 2228 url = "https://files.pythonhosted.org/packages/9d/1a/0c89c070ee2829c934cb6c7082287c822e28236a4fcf90063e6be7c35532/WebOb-1.8.5.tar.gz";
2245 2229 sha256 = "11khpzaxc88q31v25ic330gsf56fwmbdc9b30br8mvp0fmwspah5";
2246 2230 };
2247 2231 meta = {
2248 2232 license = [ pkgs.lib.licenses.mit ];
2249 2233 };
2250 2234 };
2251 2235 "webtest" = super.buildPythonPackage {
2252 2236 name = "webtest-2.0.33";
2253 2237 doCheck = false;
2254 2238 propagatedBuildInputs = [
2255 2239 self."six"
2256 2240 self."webob"
2257 2241 self."waitress"
2258 2242 self."beautifulsoup4"
2259 2243 ];
2260 2244 src = fetchurl {
2261 2245 url = "https://files.pythonhosted.org/packages/a8/b0/ffc9413b637dbe26e291429bb0f6ed731e518d0cd03da28524a8fe2e8a8f/WebTest-2.0.33.tar.gz";
2262 2246 sha256 = "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21";
2263 2247 };
2264 2248 meta = {
2265 2249 license = [ pkgs.lib.licenses.mit ];
2266 2250 };
2267 2251 };
2268 2252 "whoosh" = super.buildPythonPackage {
2269 2253 name = "whoosh-2.7.4";
2270 2254 doCheck = false;
2271 2255 src = fetchurl {
2272 2256 url = "https://files.pythonhosted.org/packages/25/2b/6beed2107b148edc1321da0d489afc4617b9ed317ef7b72d4993cad9b684/Whoosh-2.7.4.tar.gz";
2273 2257 sha256 = "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw";
2274 2258 };
2275 2259 meta = {
2276 2260 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
2277 2261 };
2278 2262 };
2279 2263 "ws4py" = super.buildPythonPackage {
2280 2264 name = "ws4py-0.5.1";
2281 2265 doCheck = false;
2282 2266 src = fetchurl {
2283 2267 url = "https://files.pythonhosted.org/packages/53/20/4019a739b2eefe9282d3822ef6a225250af964b117356971bd55e274193c/ws4py-0.5.1.tar.gz";
2284 2268 sha256 = "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19";
2285 2269 };
2286 2270 meta = {
2287 2271 license = [ pkgs.lib.licenses.bsdOriginal ];
2288 2272 };
2289 2273 };
2290 2274 "wsgiref" = super.buildPythonPackage {
2291 2275 name = "wsgiref-0.1.2";
2292 2276 doCheck = false;
2293 2277 src = fetchurl {
2294 2278 url = "https://files.pythonhosted.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
2295 2279 sha256 = "0y8fyjmpq7vwwm4x732w97qbkw78rjwal5409k04cw4m03411rn7";
2296 2280 };
2297 2281 meta = {
2298 2282 license = [ { fullName = "PSF or ZPL"; } ];
2299 2283 };
2300 2284 };
2301 2285 "zope.cachedescriptors" = super.buildPythonPackage {
2302 2286 name = "zope.cachedescriptors-4.3.1";
2303 2287 doCheck = false;
2304 2288 propagatedBuildInputs = [
2305 2289 self."setuptools"
2306 2290 ];
2307 2291 src = fetchurl {
2308 2292 url = "https://files.pythonhosted.org/packages/2f/89/ebe1890cc6d3291ebc935558fa764d5fffe571018dbbee200e9db78762cb/zope.cachedescriptors-4.3.1.tar.gz";
2309 2293 sha256 = "0jhr3m5p74c6r7k8iv0005b8bfsialih9d7zl5vx38rf5xq1lk8z";
2310 2294 };
2311 2295 meta = {
2312 2296 license = [ pkgs.lib.licenses.zpl21 ];
2313 2297 };
2314 2298 };
2315 2299 "zope.deprecation" = super.buildPythonPackage {
2316 2300 name = "zope.deprecation-4.4.0";
2317 2301 doCheck = false;
2318 2302 propagatedBuildInputs = [
2319 2303 self."setuptools"
2320 2304 ];
2321 2305 src = fetchurl {
2322 2306 url = "https://files.pythonhosted.org/packages/34/da/46e92d32d545dd067b9436279d84c339e8b16de2ca393d7b892bc1e1e9fd/zope.deprecation-4.4.0.tar.gz";
2323 2307 sha256 = "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d";
2324 2308 };
2325 2309 meta = {
2326 2310 license = [ pkgs.lib.licenses.zpl21 ];
2327 2311 };
2328 2312 };
2329 2313 "zope.event" = super.buildPythonPackage {
2330 2314 name = "zope.event-4.4";
2331 2315 doCheck = false;
2332 2316 propagatedBuildInputs = [
2333 2317 self."setuptools"
2334 2318 ];
2335 2319 src = fetchurl {
2336 2320 url = "https://files.pythonhosted.org/packages/4c/b2/51c0369adcf5be2334280eed230192ab3b03f81f8efda9ddea6f65cc7b32/zope.event-4.4.tar.gz";
2337 2321 sha256 = "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9";
2338 2322 };
2339 2323 meta = {
2340 2324 license = [ pkgs.lib.licenses.zpl21 ];
2341 2325 };
2342 2326 };
2343 2327 "zope.interface" = super.buildPythonPackage {
2344 2328 name = "zope.interface-4.6.0";
2345 2329 doCheck = false;
2346 2330 propagatedBuildInputs = [
2347 2331 self."setuptools"
2348 2332 ];
2349 2333 src = fetchurl {
2350 2334 url = "https://files.pythonhosted.org/packages/4e/d0/c9d16bd5b38de44a20c6dc5d5ed80a49626fafcb3db9f9efdc2a19026db6/zope.interface-4.6.0.tar.gz";
2351 2335 sha256 = "1rgh2x3rcl9r0v0499kf78xy86rnmanajf4ywmqb943wpk50sg8v";
2352 2336 };
2353 2337 meta = {
2354 2338 license = [ pkgs.lib.licenses.zpl21 ];
2355 2339 };
2356 2340 };
2357 2341
2358 2342 ### Test requirements
2359 2343
2360 2344
2361 2345 }
@@ -1,124 +1,123 b''
1 1 ## dependencies
2 2
3 3 amqp==2.3.1
4 4 # not released authomatic that has updated some oauth providers
5 5 https://code.rhodecode.com/upstream/authomatic/artifacts/download/0-4fe9c041-a567-4f84-be4c-7efa2a606d3c.tar.gz?md5=f6bdc3c769688212db68233e8d2b0383#egg=authomatic==0.1.0.post1
6 6
7 7 babel==1.3
8 8 beaker==1.9.1
9 9 bleach==3.1.0
10 10 celery==4.1.1
11 11 channelstream==0.5.2
12 12 click==7.0
13 13 colander==1.7.0
14 14 # our custom configobj
15 15 https://code.rhodecode.com/upstream/configobj/artifacts/download/0-012de99a-b1e1-4f64-a5c0-07a98a41b324.tar.gz?md5=6a513f51fe04b2c18cf84c1395a7c626#egg=configobj==5.0.6
16 16 cssselect==1.0.3
17 17 cryptography==2.6.1
18 18 decorator==4.1.2
19 19 deform==2.0.7
20 20 docutils==0.14.0
21 21 dogpile.cache==0.7.1
22 22 dogpile.core==0.4.1
23 23 formencode==1.2.4
24 24 future==0.14.3
25 25 futures==3.0.2
26 26 infrae.cache==1.0.1
27 27 iso8601==0.1.12
28 28 itsdangerous==0.24
29 29 kombu==4.2.1
30 30 lxml==4.2.5
31 31 mako==1.0.7
32 32 markdown==2.6.11
33 33 markupsafe==1.1.0
34 34 msgpack-python==0.5.6
35 35 pyotp==2.2.7
36 36 packaging==15.2
37 37 paste==3.0.8
38 38 pastedeploy==2.0.1
39 39 pastescript==3.1.0
40 40 peppercorn==0.6
41 41 psutil==5.5.1
42 42 py-bcrypt==0.4
43 43 pycurl==7.43.0.2
44 44 pycrypto==2.6.1
45 45 pygments==2.4.2
46 46 pyparsing==2.3.0
47 pyramid-beaker==0.8
48 47 pyramid-debugtoolbar==4.5.0
49 48 pyramid-mako==1.0.2
50 49 pyramid==1.10.4
51 50 pyramid_mailer==0.15.1
52 51 python-dateutil
53 52 python-ldap==3.1.0
54 53 python-memcached==1.59
55 54 python-pam==1.8.4
56 55 python-saml==2.4.2
57 56 pytz==2018.4
58 57 tzlocal==1.5.1
59 58 pyzmq==14.6.0
60 59 py-gfm==0.1.4
61 60 redis==2.10.6
62 61 repoze.lru==0.7
63 62 requests==2.9.1
64 63 routes==2.4.1
65 64 simplejson==3.16.0
66 65 six==1.11.0
67 66 sqlalchemy==1.1.18
68 67 sshpubkeys==3.1.0
69 68 subprocess32==3.5.4
70 69 supervisor==4.0.3
71 70 translationstring==1.3
72 71 urllib3==1.24.1
73 72 urlobject==2.4.3
74 73 venusian==1.2.0
75 74 weberror==0.10.3
76 75 webhelpers2==2.0
77 76 webhelpers==1.3
78 77 webob==1.8.5
79 78 whoosh==2.7.4
80 79 wsgiref==0.1.2
81 80 zope.cachedescriptors==4.3.1
82 81 zope.deprecation==4.4.0
83 82 zope.event==4.4.0
84 83 zope.interface==4.6.0
85 84
86 85 # DB drivers
87 86 mysql-python==1.2.5
88 87 pymysql==0.8.1
89 88 pysqlite==2.8.3
90 89 psycopg2==2.8.2
91 90
92 91 # IPYTHON RENDERING
93 92 # entrypoints backport, pypi version doesn't support egg installs
94 93 https://code.rhodecode.com/upstream/entrypoints/artifacts/download/0-8e9ee9e4-c4db-409c-b07e-81568fd1832d.tar.gz?md5=3a027b8ff1d257b91fe257de6c43357d#egg=entrypoints==0.2.2.rhodecode-upstream1
95 94 nbconvert==5.3.1
96 95 nbformat==4.4.0
97 96 jupyter_client==5.0.0
98 97
99 98 ## cli tools
100 99 alembic==1.0.10
101 100 invoke==0.13.0
102 101 bumpversion==0.5.3
103 102
104 103 ## http servers
105 104 gevent==1.4.0
106 105 greenlet==0.4.15
107 106 gunicorn==19.9.0
108 107 waitress==1.3.0
109 108
110 109 ## debug
111 110 ipdb==0.12.0
112 111 ipython==5.1.0
113 112
114 113 ## rhodecode-tools, special case
115 114 https://code.rhodecode.com/rhodecode-tools-ce/artifacts/download/0-10ac93f4-bb7d-4b97-baea-68110743dd5a.tar.gz?md5=962dc77c06aceee62282b98d33149661#egg=rhodecode-tools==1.2.1
116 115
117 116 ## appenlight
118 117 appenlight-client==0.6.26
119 118
120 119 ## test related requirements
121 120 -r requirements_test.txt
122 121
123 122 ## uncomment to add the debug libraries
124 123 #-r requirements_debug.txt
@@ -1,740 +1,740 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2019 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import os
22 22 import sys
23 23 import logging
24 24 import collections
25 25 import tempfile
26 26 import time
27 27
28 28 from paste.gzipper import make_gzip_middleware
29 29 import pyramid.events
30 30 from pyramid.wsgi import wsgiapp
31 31 from pyramid.authorization import ACLAuthorizationPolicy
32 32 from pyramid.config import Configurator
33 33 from pyramid.settings import asbool, aslist
34 34 from pyramid.httpexceptions import (
35 35 HTTPException, HTTPError, HTTPInternalServerError, HTTPFound, HTTPNotFound)
36 36 from pyramid.renderers import render_to_response
37 37
38 38 from rhodecode.model import meta
39 39 from rhodecode.config import patches
40 40 from rhodecode.config import utils as config_utils
41 41 from rhodecode.config.environment import load_pyramid_environment
42 42
43 43 import rhodecode.events
44 44 from rhodecode.lib.middleware.vcs import VCSMiddleware
45 45 from rhodecode.lib.request import Request
46 46 from rhodecode.lib.vcs import VCSCommunicationError
47 47 from rhodecode.lib.exceptions import VCSServerUnavailable
48 48 from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled
49 49 from rhodecode.lib.middleware.https_fixup import HttpsFixup
50 50 from rhodecode.lib.celerylib.loader import configure_celery
51 51 from rhodecode.lib.plugins.utils import register_rhodecode_plugin
52 52 from rhodecode.lib.utils2 import aslist as rhodecode_aslist, AttributeDict
53 53 from rhodecode.lib.exc_tracking import store_exception
54 54 from rhodecode.subscribers import (
55 55 scan_repositories_if_enabled, write_js_routes_if_enabled,
56 56 write_metadata_if_needed, inject_app_settings)
57 57
58 58
59 59 log = logging.getLogger(__name__)
60 60
61 61
62 62 def is_http_error(response):
63 63 # error which should have traceback
64 64 return response.status_code > 499
65 65
66 66
67 67 def should_load_all():
68 68 """
69 69 Returns if all application components should be loaded. In some cases it's
70 70 desired to skip apps loading for faster shell script execution
71 71 """
72 72 return True
73 73
74 74
75 75 def make_pyramid_app(global_config, **settings):
76 76 """
77 77 Constructs the WSGI application based on Pyramid.
78 78
79 79 Specials:
80 80
81 81 * The application can also be integrated like a plugin via the call to
82 82 `includeme`. This is accompanied with the other utility functions which
83 83 are called. Changing this should be done with great care to not break
84 84 cases when these fragments are assembled from another place.
85 85
86 86 """
87 87
88 88 # Allows to use format style "{ENV_NAME}" placeholders in the configuration. It
89 89 # will be replaced by the value of the environment variable "NAME" in this case.
90 90 start_time = time.time()
91 91
92 92 debug = asbool(global_config.get('debug'))
93 93 if debug:
94 94 enable_debug()
95 95
96 96 environ = {'ENV_{}'.format(key): value for key, value in os.environ.items()}
97 97
98 98 global_config = _substitute_values(global_config, environ)
99 99 settings = _substitute_values(settings, environ)
100 100
101 101 sanitize_settings_and_apply_defaults(global_config, settings)
102 102
103 103 config = Configurator(settings=settings)
104 104
105 105 # Apply compatibility patches
106 106 patches.inspect_getargspec()
107 107
108 108 load_pyramid_environment(global_config, settings)
109 109
110 110 # Static file view comes first
111 111 includeme_first(config)
112 112
113 113 includeme(config)
114 114
115 115 pyramid_app = config.make_wsgi_app()
116 116 pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config)
117 117 pyramid_app.config = config
118 118
119 119 config.configure_celery(global_config['__file__'])
120 120 # creating the app uses a connection - return it after we are done
121 121 meta.Session.remove()
122 122 total_time = time.time() - start_time
123 123 log.info('Pyramid app `%s` created and configured in %.2fs',
124 124 pyramid_app.func_name, total_time)
125 125
126 126 return pyramid_app
127 127
128 128
129 129 def not_found_view(request):
130 130 """
131 131 This creates the view which should be registered as not-found-view to
132 132 pyramid.
133 133 """
134 134
135 135 if not getattr(request, 'vcs_call', None):
136 136 # handle like regular case with our error_handler
137 137 return error_handler(HTTPNotFound(), request)
138 138
139 139 # handle not found view as a vcs call
140 140 settings = request.registry.settings
141 141 ae_client = getattr(request, 'ae_client', None)
142 142 vcs_app = VCSMiddleware(
143 143 HTTPNotFound(), request.registry, settings,
144 144 appenlight_client=ae_client)
145 145
146 146 return wsgiapp(vcs_app)(None, request)
147 147
148 148
149 149 def error_handler(exception, request):
150 150 import rhodecode
151 151 from rhodecode.lib import helpers
152 152
153 153 rhodecode_title = rhodecode.CONFIG.get('rhodecode_title') or 'RhodeCode'
154 154
155 155 base_response = HTTPInternalServerError()
156 156 # prefer original exception for the response since it may have headers set
157 157 if isinstance(exception, HTTPException):
158 158 base_response = exception
159 159 elif isinstance(exception, VCSCommunicationError):
160 160 base_response = VCSServerUnavailable()
161 161
162 162 if is_http_error(base_response):
163 163 log.exception(
164 164 'error occurred handling this request for path: %s', request.path)
165 165
166 166 error_explanation = base_response.explanation or str(base_response)
167 167 if base_response.status_code == 404:
168 168 error_explanation += " Optionally you don't have permission to access this page."
169 169 c = AttributeDict()
170 170 c.error_message = base_response.status
171 171 c.error_explanation = error_explanation
172 172 c.visual = AttributeDict()
173 173
174 174 c.visual.rhodecode_support_url = (
175 175 request.registry.settings.get('rhodecode_support_url') or
176 176 request.route_url('rhodecode_support')
177 177 )
178 178 c.redirect_time = 0
179 179 c.rhodecode_name = rhodecode_title
180 180 if not c.rhodecode_name:
181 181 c.rhodecode_name = 'Rhodecode'
182 182
183 183 c.causes = []
184 184 if is_http_error(base_response):
185 185 c.causes.append('Server is overloaded.')
186 186 c.causes.append('Server database connection is lost.')
187 187 c.causes.append('Server expected unhandled error.')
188 188
189 189 if hasattr(base_response, 'causes'):
190 190 c.causes = base_response.causes
191 191
192 192 c.messages = helpers.flash.pop_messages(request=request)
193 193
194 194 exc_info = sys.exc_info()
195 195 c.exception_id = id(exc_info)
196 196 c.show_exception_id = isinstance(base_response, VCSServerUnavailable) \
197 197 or base_response.status_code > 499
198 198 c.exception_id_url = request.route_url(
199 199 'admin_settings_exception_tracker_show', exception_id=c.exception_id)
200 200
201 201 if c.show_exception_id:
202 202 store_exception(c.exception_id, exc_info)
203 203
204 204 response = render_to_response(
205 205 '/errors/error_document.mako', {'c': c, 'h': helpers}, request=request,
206 206 response=base_response)
207 207
208 208 return response
209 209
210 210
211 211 def includeme_first(config):
212 212 # redirect automatic browser favicon.ico requests to correct place
213 213 def favicon_redirect(context, request):
214 214 return HTTPFound(
215 215 request.static_path('rhodecode:public/images/favicon.ico'))
216 216
217 217 config.add_view(favicon_redirect, route_name='favicon')
218 218 config.add_route('favicon', '/favicon.ico')
219 219
220 220 def robots_redirect(context, request):
221 221 return HTTPFound(
222 222 request.static_path('rhodecode:public/robots.txt'))
223 223
224 224 config.add_view(robots_redirect, route_name='robots')
225 225 config.add_route('robots', '/robots.txt')
226 226
227 227 config.add_static_view(
228 228 '_static/deform', 'deform:static')
229 229 config.add_static_view(
230 230 '_static/rhodecode', path='rhodecode:public', cache_max_age=3600 * 24)
231 231
232 232
233 233 def includeme(config):
234 234 log.debug('Initializing main includeme from %s', os.path.basename(__file__))
235 235 settings = config.registry.settings
236 236 config.set_request_factory(Request)
237 237
238 238 # plugin information
239 239 config.registry.rhodecode_plugins = collections.OrderedDict()
240 240
241 241 config.add_directive(
242 242 'register_rhodecode_plugin', register_rhodecode_plugin)
243 243
244 244 config.add_directive('configure_celery', configure_celery)
245 245
246 246 if asbool(settings.get('appenlight', 'false')):
247 247 config.include('appenlight_client.ext.pyramid_tween')
248 248
249 249 load_all = should_load_all()
250 250
251 251 # Includes which are required. The application would fail without them.
252 252 config.include('pyramid_mako')
253 config.include('pyramid_beaker')
253 config.include('rhodecode.lib.rc_beaker')
254 254 config.include('rhodecode.lib.rc_cache')
255 255
256 256 config.include('rhodecode.apps._base.navigation')
257 257 config.include('rhodecode.apps._base.subscribers')
258 258 config.include('rhodecode.tweens')
259 259
260 260 config.include('rhodecode.integrations')
261 261 config.include('rhodecode.authentication')
262 262
263 263 if load_all:
264 264 from rhodecode.authentication import discover_legacy_plugins
265 265 # load CE authentication plugins
266 266 config.include('rhodecode.authentication.plugins.auth_crowd')
267 267 config.include('rhodecode.authentication.plugins.auth_headers')
268 268 config.include('rhodecode.authentication.plugins.auth_jasig_cas')
269 269 config.include('rhodecode.authentication.plugins.auth_ldap')
270 270 config.include('rhodecode.authentication.plugins.auth_pam')
271 271 config.include('rhodecode.authentication.plugins.auth_rhodecode')
272 272 config.include('rhodecode.authentication.plugins.auth_token')
273 273
274 274 # Auto discover authentication plugins and include their configuration.
275 275 discover_legacy_plugins(config)
276 276
277 277 # apps
278 278 config.include('rhodecode.apps._base')
279 279
280 280 if load_all:
281 281 config.include('rhodecode.apps.ops')
282 282 config.include('rhodecode.apps.admin')
283 283 config.include('rhodecode.apps.channelstream')
284 284 config.include('rhodecode.apps.file_store')
285 285 config.include('rhodecode.apps.login')
286 286 config.include('rhodecode.apps.home')
287 287 config.include('rhodecode.apps.journal')
288 288 config.include('rhodecode.apps.repository')
289 289 config.include('rhodecode.apps.repo_group')
290 290 config.include('rhodecode.apps.user_group')
291 291 config.include('rhodecode.apps.search')
292 292 config.include('rhodecode.apps.user_profile')
293 293 config.include('rhodecode.apps.user_group_profile')
294 294 config.include('rhodecode.apps.my_account')
295 295 config.include('rhodecode.apps.svn_support')
296 296 config.include('rhodecode.apps.ssh_support')
297 297 config.include('rhodecode.apps.gist')
298 298 config.include('rhodecode.apps.debug_style')
299 299 config.include('rhodecode.api')
300 300
301 301 config.add_route('rhodecode_support', 'https://rhodecode.com/help/', static=True)
302 302 config.add_translation_dirs('rhodecode:i18n/')
303 303 settings['default_locale_name'] = settings.get('lang', 'en')
304 304
305 305 # Add subscribers.
306 306 config.add_subscriber(inject_app_settings,
307 307 pyramid.events.ApplicationCreated)
308 308 config.add_subscriber(scan_repositories_if_enabled,
309 309 pyramid.events.ApplicationCreated)
310 310 config.add_subscriber(write_metadata_if_needed,
311 311 pyramid.events.ApplicationCreated)
312 312 config.add_subscriber(write_js_routes_if_enabled,
313 313 pyramid.events.ApplicationCreated)
314 314
315 315 # request custom methods
316 316 config.add_request_method(
317 317 'rhodecode.lib.partial_renderer.get_partial_renderer',
318 318 'get_partial_renderer')
319 319
320 320 # Set the authorization policy.
321 321 authz_policy = ACLAuthorizationPolicy()
322 322 config.set_authorization_policy(authz_policy)
323 323
324 324 # Set the default renderer for HTML templates to mako.
325 325 config.add_mako_renderer('.html')
326 326
327 327 config.add_renderer(
328 328 name='json_ext',
329 329 factory='rhodecode.lib.ext_json_renderer.pyramid_ext_json')
330 330
331 331 # include RhodeCode plugins
332 332 includes = aslist(settings.get('rhodecode.includes', []))
333 333 for inc in includes:
334 334 config.include(inc)
335 335
336 336 # custom not found view, if our pyramid app doesn't know how to handle
337 337 # the request pass it to potential VCS handling ap
338 338 config.add_notfound_view(not_found_view)
339 339 if not settings.get('debugtoolbar.enabled', False):
340 340 # disabled debugtoolbar handle all exceptions via the error_handlers
341 341 config.add_view(error_handler, context=Exception)
342 342
343 343 # all errors including 403/404/50X
344 344 config.add_view(error_handler, context=HTTPError)
345 345
346 346
347 347 def wrap_app_in_wsgi_middlewares(pyramid_app, config):
348 348 """
349 349 Apply outer WSGI middlewares around the application.
350 350 """
351 351 registry = config.registry
352 352 settings = registry.settings
353 353
354 354 # enable https redirects based on HTTP_X_URL_SCHEME set by proxy
355 355 pyramid_app = HttpsFixup(pyramid_app, settings)
356 356
357 357 pyramid_app, _ae_client = wrap_in_appenlight_if_enabled(
358 358 pyramid_app, settings)
359 359 registry.ae_client = _ae_client
360 360
361 361 if settings['gzip_responses']:
362 362 pyramid_app = make_gzip_middleware(
363 363 pyramid_app, settings, compress_level=1)
364 364
365 365 # this should be the outer most middleware in the wsgi stack since
366 366 # middleware like Routes make database calls
367 367 def pyramid_app_with_cleanup(environ, start_response):
368 368 try:
369 369 return pyramid_app(environ, start_response)
370 370 finally:
371 371 # Dispose current database session and rollback uncommitted
372 372 # transactions.
373 373 meta.Session.remove()
374 374
375 375 # In a single threaded mode server, on non sqlite db we should have
376 376 # '0 Current Checked out connections' at the end of a request,
377 377 # if not, then something, somewhere is leaving a connection open
378 378 pool = meta.Base.metadata.bind.engine.pool
379 379 log.debug('sa pool status: %s', pool.status())
380 380 log.debug('Request processing finalized')
381 381
382 382 return pyramid_app_with_cleanup
383 383
384 384
385 385 def sanitize_settings_and_apply_defaults(global_config, settings):
386 386 """
387 387 Applies settings defaults and does all type conversion.
388 388
389 389 We would move all settings parsing and preparation into this place, so that
390 390 we have only one place left which deals with this part. The remaining parts
391 391 of the application would start to rely fully on well prepared settings.
392 392
393 393 This piece would later be split up per topic to avoid a big fat monster
394 394 function.
395 395 """
396 396
397 397 settings.setdefault('rhodecode.edition', 'Community Edition')
398 398
399 399 if 'mako.default_filters' not in settings:
400 400 # set custom default filters if we don't have it defined
401 401 settings['mako.imports'] = 'from rhodecode.lib.base import h_filter'
402 402 settings['mako.default_filters'] = 'h_filter'
403 403
404 404 if 'mako.directories' not in settings:
405 405 mako_directories = settings.setdefault('mako.directories', [
406 406 # Base templates of the original application
407 407 'rhodecode:templates',
408 408 ])
409 409 log.debug(
410 410 "Using the following Mako template directories: %s",
411 411 mako_directories)
412 412
413 413 # Default includes, possible to change as a user
414 414 pyramid_includes = settings.setdefault('pyramid.includes', [
415 415 'rhodecode.lib.middleware.request_wrapper',
416 416 ])
417 417 log.debug(
418 418 "Using the following pyramid.includes: %s",
419 419 pyramid_includes)
420 420
421 421 # TODO: johbo: Re-think this, usually the call to config.include
422 422 # should allow to pass in a prefix.
423 423 settings.setdefault('rhodecode.api.url', '/_admin/api')
424 424 settings.setdefault('__file__', global_config.get('__file__'))
425 425
426 426 # Sanitize generic settings.
427 427 _list_setting(settings, 'default_encoding', 'UTF-8')
428 428 _bool_setting(settings, 'is_test', 'false')
429 429 _bool_setting(settings, 'gzip_responses', 'false')
430 430
431 431 # Call split out functions that sanitize settings for each topic.
432 432 _sanitize_appenlight_settings(settings)
433 433 _sanitize_vcs_settings(settings)
434 434 _sanitize_cache_settings(settings)
435 435
436 436 # configure instance id
437 437 config_utils.set_instance_id(settings)
438 438
439 439 return settings
440 440
441 441
442 442 def enable_debug():
443 443 """
444 444 Helper to enable debug on running instance
445 445 :return:
446 446 """
447 447 import tempfile
448 448 import textwrap
449 449 import logging.config
450 450
451 451 ini_template = textwrap.dedent("""
452 452 #####################################
453 453 ### DEBUG LOGGING CONFIGURATION ####
454 454 #####################################
455 455 [loggers]
456 456 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
457 457
458 458 [handlers]
459 459 keys = console, console_sql
460 460
461 461 [formatters]
462 462 keys = generic, color_formatter, color_formatter_sql
463 463
464 464 #############
465 465 ## LOGGERS ##
466 466 #############
467 467 [logger_root]
468 468 level = NOTSET
469 469 handlers = console
470 470
471 471 [logger_sqlalchemy]
472 472 level = INFO
473 473 handlers = console_sql
474 474 qualname = sqlalchemy.engine
475 475 propagate = 0
476 476
477 477 [logger_beaker]
478 478 level = DEBUG
479 479 handlers =
480 480 qualname = beaker.container
481 481 propagate = 1
482 482
483 483 [logger_rhodecode]
484 484 level = DEBUG
485 485 handlers =
486 486 qualname = rhodecode
487 487 propagate = 1
488 488
489 489 [logger_ssh_wrapper]
490 490 level = DEBUG
491 491 handlers =
492 492 qualname = ssh_wrapper
493 493 propagate = 1
494 494
495 495 [logger_celery]
496 496 level = DEBUG
497 497 handlers =
498 498 qualname = celery
499 499
500 500
501 501 ##############
502 502 ## HANDLERS ##
503 503 ##############
504 504
505 505 [handler_console]
506 506 class = StreamHandler
507 507 args = (sys.stderr, )
508 508 level = DEBUG
509 509 formatter = color_formatter
510 510
511 511 [handler_console_sql]
512 512 # "level = DEBUG" logs SQL queries and results.
513 513 # "level = INFO" logs SQL queries.
514 514 # "level = WARN" logs neither. (Recommended for production systems.)
515 515 class = StreamHandler
516 516 args = (sys.stderr, )
517 517 level = WARN
518 518 formatter = color_formatter_sql
519 519
520 520 ################
521 521 ## FORMATTERS ##
522 522 ################
523 523
524 524 [formatter_generic]
525 525 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
526 526 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | %(req_id)s
527 527 datefmt = %Y-%m-%d %H:%M:%S
528 528
529 529 [formatter_color_formatter]
530 530 class = rhodecode.lib.logging_formatter.ColorRequestTrackingFormatter
531 531 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | %(req_id)s
532 532 datefmt = %Y-%m-%d %H:%M:%S
533 533
534 534 [formatter_color_formatter_sql]
535 535 class = rhodecode.lib.logging_formatter.ColorFormatterSql
536 536 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
537 537 datefmt = %Y-%m-%d %H:%M:%S
538 538 """)
539 539
540 540 with tempfile.NamedTemporaryFile(prefix='rc_debug_logging_', suffix='.ini',
541 541 delete=False) as f:
542 542 log.info('Saved Temporary DEBUG config at %s', f.name)
543 543 f.write(ini_template)
544 544
545 545 logging.config.fileConfig(f.name)
546 546 log.debug('DEBUG MODE ON')
547 547 os.remove(f.name)
548 548
549 549
550 550 def _sanitize_appenlight_settings(settings):
551 551 _bool_setting(settings, 'appenlight', 'false')
552 552
553 553
554 554 def _sanitize_vcs_settings(settings):
555 555 """
556 556 Applies settings defaults and does type conversion for all VCS related
557 557 settings.
558 558 """
559 559 _string_setting(settings, 'vcs.svn.compatible_version', '')
560 560 _string_setting(settings, 'git_rev_filter', '--all')
561 561 _string_setting(settings, 'vcs.hooks.protocol', 'http')
562 562 _string_setting(settings, 'vcs.hooks.host', '127.0.0.1')
563 563 _string_setting(settings, 'vcs.scm_app_implementation', 'http')
564 564 _string_setting(settings, 'vcs.server', '')
565 565 _string_setting(settings, 'vcs.server.log_level', 'debug')
566 566 _string_setting(settings, 'vcs.server.protocol', 'http')
567 567 _bool_setting(settings, 'startup.import_repos', 'false')
568 568 _bool_setting(settings, 'vcs.hooks.direct_calls', 'false')
569 569 _bool_setting(settings, 'vcs.server.enable', 'true')
570 570 _bool_setting(settings, 'vcs.start_server', 'false')
571 571 _list_setting(settings, 'vcs.backends', 'hg, git, svn')
572 572 _int_setting(settings, 'vcs.connection_timeout', 3600)
573 573
574 574 # Support legacy values of vcs.scm_app_implementation. Legacy
575 575 # configurations may use 'rhodecode.lib.middleware.utils.scm_app_http', or
576 576 # disabled since 4.13 'vcsserver.scm_app' which is now mapped to 'http'.
577 577 scm_app_impl = settings['vcs.scm_app_implementation']
578 578 if scm_app_impl in ['rhodecode.lib.middleware.utils.scm_app_http', 'vcsserver.scm_app']:
579 579 settings['vcs.scm_app_implementation'] = 'http'
580 580
581 581
582 582 def _sanitize_cache_settings(settings):
583 583 temp_store = tempfile.gettempdir()
584 584 default_cache_dir = os.path.join(temp_store, 'rc_cache')
585 585
586 586 # save default, cache dir, and use it for all backends later.
587 587 default_cache_dir = _string_setting(
588 588 settings,
589 589 'cache_dir',
590 590 default_cache_dir, lower=False, default_when_empty=True)
591 591
592 592 # ensure we have our dir created
593 593 if not os.path.isdir(default_cache_dir):
594 594 os.makedirs(default_cache_dir, mode=0o755)
595 595
596 596 # exception store cache
597 597 _string_setting(
598 598 settings,
599 599 'exception_tracker.store_path',
600 600 temp_store, lower=False, default_when_empty=True)
601 601
602 602 # cache_perms
603 603 _string_setting(
604 604 settings,
605 605 'rc_cache.cache_perms.backend',
606 606 'dogpile.cache.rc.file_namespace', lower=False)
607 607 _int_setting(
608 608 settings,
609 609 'rc_cache.cache_perms.expiration_time',
610 610 60)
611 611 _string_setting(
612 612 settings,
613 613 'rc_cache.cache_perms.arguments.filename',
614 614 os.path.join(default_cache_dir, 'rc_cache_1'), lower=False)
615 615
616 616 # cache_repo
617 617 _string_setting(
618 618 settings,
619 619 'rc_cache.cache_repo.backend',
620 620 'dogpile.cache.rc.file_namespace', lower=False)
621 621 _int_setting(
622 622 settings,
623 623 'rc_cache.cache_repo.expiration_time',
624 624 60)
625 625 _string_setting(
626 626 settings,
627 627 'rc_cache.cache_repo.arguments.filename',
628 628 os.path.join(default_cache_dir, 'rc_cache_2'), lower=False)
629 629
630 630 # cache_license
631 631 _string_setting(
632 632 settings,
633 633 'rc_cache.cache_license.backend',
634 634 'dogpile.cache.rc.file_namespace', lower=False)
635 635 _int_setting(
636 636 settings,
637 637 'rc_cache.cache_license.expiration_time',
638 638 5*60)
639 639 _string_setting(
640 640 settings,
641 641 'rc_cache.cache_license.arguments.filename',
642 642 os.path.join(default_cache_dir, 'rc_cache_3'), lower=False)
643 643
644 644 # cache_repo_longterm memory, 96H
645 645 _string_setting(
646 646 settings,
647 647 'rc_cache.cache_repo_longterm.backend',
648 648 'dogpile.cache.rc.memory_lru', lower=False)
649 649 _int_setting(
650 650 settings,
651 651 'rc_cache.cache_repo_longterm.expiration_time',
652 652 345600)
653 653 _int_setting(
654 654 settings,
655 655 'rc_cache.cache_repo_longterm.max_size',
656 656 10000)
657 657
658 658 # sql_cache_short
659 659 _string_setting(
660 660 settings,
661 661 'rc_cache.sql_cache_short.backend',
662 662 'dogpile.cache.rc.memory_lru', lower=False)
663 663 _int_setting(
664 664 settings,
665 665 'rc_cache.sql_cache_short.expiration_time',
666 666 30)
667 667 _int_setting(
668 668 settings,
669 669 'rc_cache.sql_cache_short.max_size',
670 670 10000)
671 671
672 672
673 673 def _int_setting(settings, name, default):
674 674 settings[name] = int(settings.get(name, default))
675 675 return settings[name]
676 676
677 677
678 678 def _bool_setting(settings, name, default):
679 679 input_val = settings.get(name, default)
680 680 if isinstance(input_val, unicode):
681 681 input_val = input_val.encode('utf8')
682 682 settings[name] = asbool(input_val)
683 683 return settings[name]
684 684
685 685
686 686 def _list_setting(settings, name, default):
687 687 raw_value = settings.get(name, default)
688 688
689 689 old_separator = ','
690 690 if old_separator in raw_value:
691 691 # If we get a comma separated list, pass it to our own function.
692 692 settings[name] = rhodecode_aslist(raw_value, sep=old_separator)
693 693 else:
694 694 # Otherwise we assume it uses pyramids space/newline separation.
695 695 settings[name] = aslist(raw_value)
696 696 return settings[name]
697 697
698 698
699 699 def _string_setting(settings, name, default, lower=True, default_when_empty=False):
700 700 value = settings.get(name, default)
701 701
702 702 if default_when_empty and not value:
703 703 # use default value when value is empty
704 704 value = default
705 705
706 706 if lower:
707 707 value = value.lower()
708 708 settings[name] = value
709 709 return settings[name]
710 710
711 711
712 712 def _substitute_values(mapping, substitutions):
713 713 result = {}
714 714
715 715 try:
716 716 for key, value in mapping.items():
717 717 # initialize without substitution first
718 718 result[key] = value
719 719
720 720 # Note: Cannot use regular replacements, since they would clash
721 721 # with the implementation of ConfigParser. Using "format" instead.
722 722 try:
723 723 result[key] = value.format(**substitutions)
724 724 except KeyError as e:
725 725 env_var = '{}'.format(e.args[0])
726 726
727 727 msg = 'Failed to substitute: `{key}={{{var}}}` with environment entry. ' \
728 728 'Make sure your environment has {var} set, or remove this ' \
729 729 'variable from config file'.format(key=key, var=env_var)
730 730
731 731 if env_var.startswith('ENV_'):
732 732 raise ValueError(msg)
733 733 else:
734 734 log.warning(msg)
735 735
736 736 except ValueError as e:
737 737 log.warning('Failed to substitute ENV variable: %s', e)
738 738 result = mapping
739 739
740 740 return result
@@ -1,583 +1,583 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2019 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22 The base Controller API
23 23 Provides the BaseController class for subclassing. And usage in different
24 24 controllers
25 25 """
26 26
27 27 import logging
28 28 import socket
29 29
30 30 import markupsafe
31 31 import ipaddress
32 32
33 33 from paste.auth.basic import AuthBasicAuthenticator
34 34 from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden, get_exception
35 35 from paste.httpheaders import WWW_AUTHENTICATE, AUTHORIZATION
36 36
37 37 import rhodecode
38 38 from rhodecode.apps._base import TemplateArgs
39 39 from rhodecode.authentication.base import VCS_TYPE
40 40 from rhodecode.lib import auth, utils2
41 41 from rhodecode.lib import helpers as h
42 42 from rhodecode.lib.auth import AuthUser, CookieStoreWrapper
43 43 from rhodecode.lib.exceptions import UserCreationError
44 44 from rhodecode.lib.utils import (password_changed, get_enabled_hook_classes)
45 45 from rhodecode.lib.utils2 import (
46 46 str2bool, safe_unicode, AttributeDict, safe_int, sha1, aslist, safe_str)
47 47 from rhodecode.model.db import Repository, User, ChangesetComment, UserBookmark
48 48 from rhodecode.model.notification import NotificationModel
49 49 from rhodecode.model.settings import VcsSettingsModel, SettingsModel
50 50
51 51 log = logging.getLogger(__name__)
52 52
53 53
54 54 def _filter_proxy(ip):
55 55 """
56 56 Passed in IP addresses in HEADERS can be in a special format of multiple
57 57 ips. Those comma separated IPs are passed from various proxies in the
58 58 chain of request processing. The left-most being the original client.
59 59 We only care about the first IP which came from the org. client.
60 60
61 61 :param ip: ip string from headers
62 62 """
63 63 if ',' in ip:
64 64 _ips = ip.split(',')
65 65 _first_ip = _ips[0].strip()
66 66 log.debug('Got multiple IPs %s, using %s', ','.join(_ips), _first_ip)
67 67 return _first_ip
68 68 return ip
69 69
70 70
71 71 def _filter_port(ip):
72 72 """
73 73 Removes a port from ip, there are 4 main cases to handle here.
74 74 - ipv4 eg. 127.0.0.1
75 75 - ipv6 eg. ::1
76 76 - ipv4+port eg. 127.0.0.1:8080
77 77 - ipv6+port eg. [::1]:8080
78 78
79 79 :param ip:
80 80 """
81 81 def is_ipv6(ip_addr):
82 82 if hasattr(socket, 'inet_pton'):
83 83 try:
84 84 socket.inet_pton(socket.AF_INET6, ip_addr)
85 85 except socket.error:
86 86 return False
87 87 else:
88 88 # fallback to ipaddress
89 89 try:
90 90 ipaddress.IPv6Address(safe_unicode(ip_addr))
91 91 except Exception:
92 92 return False
93 93 return True
94 94
95 95 if ':' not in ip: # must be ipv4 pure ip
96 96 return ip
97 97
98 98 if '[' in ip and ']' in ip: # ipv6 with port
99 99 return ip.split(']')[0][1:].lower()
100 100
101 101 # must be ipv6 or ipv4 with port
102 102 if is_ipv6(ip):
103 103 return ip
104 104 else:
105 105 ip, _port = ip.split(':')[:2] # means ipv4+port
106 106 return ip
107 107
108 108
109 109 def get_ip_addr(environ):
110 110 proxy_key = 'HTTP_X_REAL_IP'
111 111 proxy_key2 = 'HTTP_X_FORWARDED_FOR'
112 112 def_key = 'REMOTE_ADDR'
113 113 _filters = lambda x: _filter_port(_filter_proxy(x))
114 114
115 115 ip = environ.get(proxy_key)
116 116 if ip:
117 117 return _filters(ip)
118 118
119 119 ip = environ.get(proxy_key2)
120 120 if ip:
121 121 return _filters(ip)
122 122
123 123 ip = environ.get(def_key, '0.0.0.0')
124 124 return _filters(ip)
125 125
126 126
127 127 def get_server_ip_addr(environ, log_errors=True):
128 128 hostname = environ.get('SERVER_NAME')
129 129 try:
130 130 return socket.gethostbyname(hostname)
131 131 except Exception as e:
132 132 if log_errors:
133 133 # in some cases this lookup is not possible, and we don't want to
134 134 # make it an exception in logs
135 135 log.exception('Could not retrieve server ip address: %s', e)
136 136 return hostname
137 137
138 138
139 139 def get_server_port(environ):
140 140 return environ.get('SERVER_PORT')
141 141
142 142
143 143 def get_access_path(environ):
144 144 path = environ.get('PATH_INFO')
145 145 org_req = environ.get('pylons.original_request')
146 146 if org_req:
147 147 path = org_req.environ.get('PATH_INFO')
148 148 return path
149 149
150 150
151 151 def get_user_agent(environ):
152 152 return environ.get('HTTP_USER_AGENT')
153 153
154 154
155 155 def vcs_operation_context(
156 156 environ, repo_name, username, action, scm, check_locking=True,
157 157 is_shadow_repo=False, check_branch_perms=False, detect_force_push=False):
158 158 """
159 159 Generate the context for a vcs operation, e.g. push or pull.
160 160
161 161 This context is passed over the layers so that hooks triggered by the
162 162 vcs operation know details like the user, the user's IP address etc.
163 163
164 164 :param check_locking: Allows to switch of the computation of the locking
165 165 data. This serves mainly the need of the simplevcs middleware to be
166 166 able to disable this for certain operations.
167 167
168 168 """
169 169 # Tri-state value: False: unlock, None: nothing, True: lock
170 170 make_lock = None
171 171 locked_by = [None, None, None]
172 172 is_anonymous = username == User.DEFAULT_USER
173 173 user = User.get_by_username(username)
174 174 if not is_anonymous and check_locking:
175 175 log.debug('Checking locking on repository "%s"', repo_name)
176 176 repo = Repository.get_by_repo_name(repo_name)
177 177 make_lock, __, locked_by = repo.get_locking_state(
178 178 action, user.user_id)
179 179 user_id = user.user_id
180 180 settings_model = VcsSettingsModel(repo=repo_name)
181 181 ui_settings = settings_model.get_ui_settings()
182 182
183 183 # NOTE(marcink): This should be also in sync with
184 184 # rhodecode/apps/ssh_support/lib/backends/base.py:update_environment scm_data
185 185 store = [x for x in ui_settings if x.key == '/']
186 186 repo_store = ''
187 187 if store:
188 188 repo_store = store[0].value
189 189
190 190 scm_data = {
191 191 'ip': get_ip_addr(environ),
192 192 'username': username,
193 193 'user_id': user_id,
194 194 'action': action,
195 195 'repository': repo_name,
196 196 'scm': scm,
197 197 'config': rhodecode.CONFIG['__file__'],
198 198 'repo_store': repo_store,
199 199 'make_lock': make_lock,
200 200 'locked_by': locked_by,
201 201 'server_url': utils2.get_server_url(environ),
202 202 'user_agent': get_user_agent(environ),
203 203 'hooks': get_enabled_hook_classes(ui_settings),
204 204 'is_shadow_repo': is_shadow_repo,
205 205 'detect_force_push': detect_force_push,
206 206 'check_branch_perms': check_branch_perms,
207 207 }
208 208 return scm_data
209 209
210 210
211 211 class BasicAuth(AuthBasicAuthenticator):
212 212
213 213 def __init__(self, realm, authfunc, registry, auth_http_code=None,
214 214 initial_call_detection=False, acl_repo_name=None):
215 215 self.realm = realm
216 216 self.initial_call = initial_call_detection
217 217 self.authfunc = authfunc
218 218 self.registry = registry
219 219 self.acl_repo_name = acl_repo_name
220 220 self._rc_auth_http_code = auth_http_code
221 221
222 222 def _get_response_from_code(self, http_code):
223 223 try:
224 224 return get_exception(safe_int(http_code))
225 225 except Exception:
226 226 log.exception('Failed to fetch response for code %s', http_code)
227 227 return HTTPForbidden
228 228
229 229 def get_rc_realm(self):
230 230 return safe_str(self.registry.rhodecode_settings.get('rhodecode_realm'))
231 231
232 232 def build_authentication(self):
233 233 head = WWW_AUTHENTICATE.tuples('Basic realm="%s"' % self.realm)
234 234 if self._rc_auth_http_code and not self.initial_call:
235 235 # return alternative HTTP code if alternative http return code
236 236 # is specified in RhodeCode config, but ONLY if it's not the
237 237 # FIRST call
238 238 custom_response_klass = self._get_response_from_code(
239 239 self._rc_auth_http_code)
240 240 return custom_response_klass(headers=head)
241 241 return HTTPUnauthorized(headers=head)
242 242
243 243 def authenticate(self, environ):
244 244 authorization = AUTHORIZATION(environ)
245 245 if not authorization:
246 246 return self.build_authentication()
247 247 (authmeth, auth) = authorization.split(' ', 1)
248 248 if 'basic' != authmeth.lower():
249 249 return self.build_authentication()
250 250 auth = auth.strip().decode('base64')
251 251 _parts = auth.split(':', 1)
252 252 if len(_parts) == 2:
253 253 username, password = _parts
254 254 auth_data = self.authfunc(
255 255 username, password, environ, VCS_TYPE,
256 256 registry=self.registry, acl_repo_name=self.acl_repo_name)
257 257 if auth_data:
258 258 return {'username': username, 'auth_data': auth_data}
259 259 if username and password:
260 260 # we mark that we actually executed authentication once, at
261 261 # that point we can use the alternative auth code
262 262 self.initial_call = False
263 263
264 264 return self.build_authentication()
265 265
266 266 __call__ = authenticate
267 267
268 268
269 269 def calculate_version_hash(config):
270 270 return sha1(
271 271 config.get('beaker.session.secret', '') +
272 272 rhodecode.__version__)[:8]
273 273
274 274
275 275 def get_current_lang(request):
276 276 # NOTE(marcink): remove after pyramid move
277 277 try:
278 278 return translation.get_lang()[0]
279 279 except:
280 280 pass
281 281
282 282 return getattr(request, '_LOCALE_', request.locale_name)
283 283
284 284
285 285 def attach_context_attributes(context, request, user_id=None):
286 286 """
287 287 Attach variables into template context called `c`.
288 288 """
289 289 config = request.registry.settings
290 290
291 291 rc_config = SettingsModel().get_all_settings(cache=True)
292 292
293 293 context.rhodecode_version = rhodecode.__version__
294 294 context.rhodecode_edition = config.get('rhodecode.edition')
295 295 # unique secret + version does not leak the version but keep consistency
296 296 context.rhodecode_version_hash = calculate_version_hash(config)
297 297
298 298 # Default language set for the incoming request
299 299 context.language = get_current_lang(request)
300 300
301 301 # Visual options
302 302 context.visual = AttributeDict({})
303 303
304 304 # DB stored Visual Items
305 305 context.visual.show_public_icon = str2bool(
306 306 rc_config.get('rhodecode_show_public_icon'))
307 307 context.visual.show_private_icon = str2bool(
308 308 rc_config.get('rhodecode_show_private_icon'))
309 309 context.visual.stylify_metatags = str2bool(
310 310 rc_config.get('rhodecode_stylify_metatags'))
311 311 context.visual.dashboard_items = safe_int(
312 312 rc_config.get('rhodecode_dashboard_items', 100))
313 313 context.visual.admin_grid_items = safe_int(
314 314 rc_config.get('rhodecode_admin_grid_items', 100))
315 315 context.visual.show_revision_number = str2bool(
316 316 rc_config.get('rhodecode_show_revision_number', True))
317 317 context.visual.show_sha_length = safe_int(
318 318 rc_config.get('rhodecode_show_sha_length', 100))
319 319 context.visual.repository_fields = str2bool(
320 320 rc_config.get('rhodecode_repository_fields'))
321 321 context.visual.show_version = str2bool(
322 322 rc_config.get('rhodecode_show_version'))
323 323 context.visual.use_gravatar = str2bool(
324 324 rc_config.get('rhodecode_use_gravatar'))
325 325 context.visual.gravatar_url = rc_config.get('rhodecode_gravatar_url')
326 326 context.visual.default_renderer = rc_config.get(
327 327 'rhodecode_markup_renderer', 'rst')
328 328 context.visual.comment_types = ChangesetComment.COMMENT_TYPES
329 329 context.visual.rhodecode_support_url = \
330 330 rc_config.get('rhodecode_support_url') or h.route_url('rhodecode_support')
331 331
332 332 context.visual.affected_files_cut_off = 60
333 333
334 334 context.pre_code = rc_config.get('rhodecode_pre_code')
335 335 context.post_code = rc_config.get('rhodecode_post_code')
336 336 context.rhodecode_name = rc_config.get('rhodecode_title')
337 337 context.default_encodings = aslist(config.get('default_encoding'), sep=',')
338 338 # if we have specified default_encoding in the request, it has more
339 339 # priority
340 340 if request.GET.get('default_encoding'):
341 341 context.default_encodings.insert(0, request.GET.get('default_encoding'))
342 342 context.clone_uri_tmpl = rc_config.get('rhodecode_clone_uri_tmpl')
343 343 context.clone_uri_ssh_tmpl = rc_config.get('rhodecode_clone_uri_ssh_tmpl')
344 344
345 345 # INI stored
346 346 context.labs_active = str2bool(
347 347 config.get('labs_settings_active', 'false'))
348 348 context.ssh_enabled = str2bool(
349 349 config.get('ssh.generate_authorized_keyfile', 'false'))
350 350 context.ssh_key_generator_enabled = str2bool(
351 351 config.get('ssh.enable_ui_key_generator', 'true'))
352 352
353 353 context.visual.allow_repo_location_change = str2bool(
354 354 config.get('allow_repo_location_change', True))
355 355 context.visual.allow_custom_hooks_settings = str2bool(
356 356 config.get('allow_custom_hooks_settings', True))
357 357 context.debug_style = str2bool(config.get('debug_style', False))
358 358
359 359 context.rhodecode_instanceid = config.get('instance_id')
360 360
361 361 context.visual.cut_off_limit_diff = safe_int(
362 362 config.get('cut_off_limit_diff'))
363 363 context.visual.cut_off_limit_file = safe_int(
364 364 config.get('cut_off_limit_file'))
365 365
366 366 # AppEnlight
367 367 context.appenlight_enabled = str2bool(config.get('appenlight', 'false'))
368 368 context.appenlight_api_public_key = config.get(
369 369 'appenlight.api_public_key', '')
370 370 context.appenlight_server_url = config.get('appenlight.server_url', '')
371 371
372 372 diffmode = {
373 373 "unified": "unified",
374 374 "sideside": "sideside"
375 375 }.get(request.GET.get('diffmode'))
376 376
377 377 if diffmode and diffmode != request.session.get('rc_user_session_attr.diffmode'):
378 378 request.session['rc_user_session_attr.diffmode'] = diffmode
379 379
380 380 # session settings per user
381 381 session_attrs = {
382 382 # defaults
383 383 "clone_url_format": "http",
384 384 "diffmode": "sideside"
385 385 }
386 386 for k, v in request.session.items():
387 387 pref = 'rc_user_session_attr.'
388 388 if k and k.startswith(pref):
389 389 k = k[len(pref):]
390 390 session_attrs[k] = v
391 391
392 392 context.user_session_attrs = session_attrs
393 393
394 394 # JS template context
395 395 context.template_context = {
396 396 'repo_name': None,
397 397 'repo_type': None,
398 398 'repo_landing_commit': None,
399 399 'rhodecode_user': {
400 400 'username': None,
401 401 'email': None,
402 402 'notification_status': False
403 403 },
404 404 'session_attrs': session_attrs,
405 405 'visual': {
406 406 'default_renderer': None
407 407 },
408 408 'commit_data': {
409 409 'commit_id': None
410 410 },
411 411 'pull_request_data': {'pull_request_id': None},
412 412 'timeago': {
413 413 'refresh_time': 120 * 1000,
414 414 'cutoff_limit': 1000 * 60 * 60 * 24 * 7
415 415 },
416 416 'pyramid_dispatch': {
417 417
418 418 },
419 419 'extra': {'plugins': {}}
420 420 }
421 421 # END CONFIG VARS
422 422
423 423 context.csrf_token = auth.get_csrf_token(session=request.session)
424 424 context.backends = rhodecode.BACKENDS.keys()
425 425 context.backends.sort()
426 426 unread_count = 0
427 427 user_bookmark_list = []
428 428 if user_id:
429 429 unread_count = NotificationModel().get_unread_cnt_for_user(user_id)
430 430 user_bookmark_list = UserBookmark.get_bookmarks_for_user(user_id)
431 431 context.unread_notifications = unread_count
432 432 context.bookmark_items = user_bookmark_list
433 433
434 434 # web case
435 435 if hasattr(request, 'user'):
436 436 context.auth_user = request.user
437 437 context.rhodecode_user = request.user
438 438
439 439 # api case
440 440 if hasattr(request, 'rpc_user'):
441 441 context.auth_user = request.rpc_user
442 442 context.rhodecode_user = request.rpc_user
443 443
444 444 # attach the whole call context to the request
445 445 request.call_context = context
446 446
447 447
448 448 def get_auth_user(request):
449 449 environ = request.environ
450 450 session = request.session
451 451
452 452 ip_addr = get_ip_addr(environ)
453 453 # make sure that we update permissions each time we call controller
454 454 _auth_token = (request.GET.get('auth_token', '') or
455 455 request.GET.get('api_key', ''))
456 456
457 457 if _auth_token:
458 458 # when using API_KEY we assume user exists, and
459 459 # doesn't need auth based on cookies.
460 460 auth_user = AuthUser(api_key=_auth_token, ip_addr=ip_addr)
461 461 authenticated = False
462 462 else:
463 463 cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
464 464 try:
465 465 auth_user = AuthUser(user_id=cookie_store.get('user_id', None),
466 466 ip_addr=ip_addr)
467 467 except UserCreationError as e:
468 468 h.flash(e, 'error')
469 469 # container auth or other auth functions that create users
470 470 # on the fly can throw this exception signaling that there's
471 471 # issue with user creation, explanation should be provided
472 472 # in Exception itself. We then create a simple blank
473 473 # AuthUser
474 474 auth_user = AuthUser(ip_addr=ip_addr)
475 475
476 476 # in case someone changes a password for user it triggers session
477 477 # flush and forces a re-login
478 478 if password_changed(auth_user, session):
479 479 session.invalidate()
480 480 cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
481 481 auth_user = AuthUser(ip_addr=ip_addr)
482 482
483 483 authenticated = cookie_store.get('is_authenticated')
484 484
485 485 if not auth_user.is_authenticated and auth_user.is_user_object:
486 486 # user is not authenticated and not empty
487 487 auth_user.set_authenticated(authenticated)
488 488
489 489 return auth_user
490 490
491 491
492 492 def h_filter(s):
493 493 """
494 494 Custom filter for Mako templates. Mako by standard uses `markupsafe.escape`
495 495 we wrap this with additional functionality that converts None to empty
496 496 strings
497 497 """
498 498 if s is None:
499 499 return markupsafe.Markup()
500 500 return markupsafe.escape(s)
501 501
502 502
503 503 def add_events_routes(config):
504 504 """
505 505 Adds routing that can be used in events. Because some events are triggered
506 506 outside of pyramid context, we need to bootstrap request with some
507 507 routing registered
508 508 """
509 509
510 510 from rhodecode.apps._base import ADMIN_PREFIX
511 511
512 512 config.add_route(name='home', pattern='/')
513 513
514 514 config.add_route(name='login', pattern=ADMIN_PREFIX + '/login')
515 515 config.add_route(name='logout', pattern=ADMIN_PREFIX + '/logout')
516 516 config.add_route(name='repo_summary', pattern='/{repo_name}')
517 517 config.add_route(name='repo_summary_explicit', pattern='/{repo_name}/summary')
518 518 config.add_route(name='repo_group_home', pattern='/{repo_group_name}')
519 519
520 520 config.add_route(name='pullrequest_show',
521 521 pattern='/{repo_name}/pull-request/{pull_request_id}')
522 522 config.add_route(name='pull_requests_global',
523 523 pattern='/pull-request/{pull_request_id}')
524 524 config.add_route(name='repo_commit',
525 525 pattern='/{repo_name}/changeset/{commit_id}')
526 526
527 527 config.add_route(name='repo_files',
528 528 pattern='/{repo_name}/files/{commit_id}/{f_path}')
529 529
530 530
531 531 def bootstrap_config(request):
532 532 import pyramid.testing
533 533 registry = pyramid.testing.Registry('RcTestRegistry')
534 534
535 535 config = pyramid.testing.setUp(registry=registry, request=request)
536 536
537 537 # allow pyramid lookup in testing
538 538 config.include('pyramid_mako')
539 config.include('pyramid_beaker')
539 config.include('rhodecode.lib.rc_beaker')
540 540 config.include('rhodecode.lib.rc_cache')
541 541
542 542 add_events_routes(config)
543 543
544 544 return config
545 545
546 546
547 547 def bootstrap_request(**kwargs):
548 548 import pyramid.testing
549 549
550 550 class TestRequest(pyramid.testing.DummyRequest):
551 551 application_url = kwargs.pop('application_url', 'http://example.com')
552 552 host = kwargs.pop('host', 'example.com:80')
553 553 domain = kwargs.pop('domain', 'example.com')
554 554
555 555 def translate(self, msg):
556 556 return msg
557 557
558 558 def plularize(self, singular, plural, n):
559 559 return singular
560 560
561 561 def get_partial_renderer(self, tmpl_name):
562 562
563 563 from rhodecode.lib.partial_renderer import get_partial_renderer
564 564 return get_partial_renderer(request=self, tmpl_name=tmpl_name)
565 565
566 566 _call_context = TemplateArgs()
567 567 _call_context.visual = TemplateArgs()
568 568 _call_context.visual.show_sha_length = 12
569 569 _call_context.visual.show_revision_number = True
570 570
571 571 @property
572 572 def call_context(self):
573 573 return self._call_context
574 574
575 575 class TestDummySession(pyramid.testing.DummySession):
576 576 def save(*arg, **kw):
577 577 pass
578 578
579 579 request = TestRequest(**kwargs)
580 580 request.session = TestDummySession()
581 581
582 582 return request
583 583
General Comments 0
You need to be logged in to leave comments. Login now