Mercurial > hg
annotate mercurial/wireprototypes.py @ 40061:a38a99c74ad4
context: drop incorrect and superfluous docstring
It's been incorrect at least since 8b86acc7aa64 (context: drop support
for looking up context by ambiguous changeid (API), 2018-04-28).
Differential Revision: https://phab.mercurial-scm.org/D4880
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 04 Oct 2018 10:30:05 -0700 |
parents | b099e6032f38 |
children | f7011b44d205 |
rev | line source |
---|---|
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com> |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 from __future__ import absolute_import |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
8 from .node import ( |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
9 bin, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
10 hex, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
11 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
12 from .i18n import _ |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
13 from .thirdparty import ( |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
14 attr, |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
15 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
16 from . import ( |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
17 error, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
18 util, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
19 ) |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
20 from .utils import ( |
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
21 interfaceutil, |
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
22 ) |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
23 |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
24 # Names of the SSH protocol implementations. |
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
25 SSHV1 = 'ssh-v1' |
37046
1cfef5693203
wireproto: support /api/* URL space for exposing APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36801
diff
changeset
|
26 # These are advertised over the wire. Increment the counters at the end |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
27 # to reflect BC breakages. |
39814
d059cb669632
wireprotov2: allow multiple fields to follow revision maps
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39559
diff
changeset
|
28 SSHV2 = 'exp-ssh-v2-0002' |
d059cb669632
wireprotov2: allow multiple fields to follow revision maps
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39559
diff
changeset
|
29 HTTP_WIREPROTO_V2 = 'exp-http-v2-0002' |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
30 |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
31 # All available wire protocol transports. |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
32 TRANSPORTS = { |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
33 SSHV1: { |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
34 'transport': 'ssh', |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
35 'version': 1, |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
36 }, |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
37 SSHV2: { |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
38 'transport': 'ssh', |
37294
27527d8cff5c
wireproto: mark SSHv2 as a version 1 transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37046
diff
changeset
|
39 # TODO mark as version 2 once all commands are implemented. |
27527d8cff5c
wireproto: mark SSHv2 as a version 1 transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37046
diff
changeset
|
40 'version': 1, |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
41 }, |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
42 'http-v1': { |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
43 'transport': 'http', |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
44 'version': 1, |
37046
1cfef5693203
wireproto: support /api/* URL space for exposing APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36801
diff
changeset
|
45 }, |
37644
77c9ee77687c
wireproto: rename HTTPV2 so it less like HTTP/2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37613
diff
changeset
|
46 HTTP_WIREPROTO_V2: { |
37046
1cfef5693203
wireproto: support /api/* URL space for exposing APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36801
diff
changeset
|
47 'transport': 'http', |
1cfef5693203
wireproto: support /api/* URL space for exposing APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36801
diff
changeset
|
48 'version': 2, |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
49 } |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
50 } |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
51 |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
52 class bytesresponse(object): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
53 """A wire protocol response consisting of raw bytes.""" |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
54 def __init__(self, data): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
55 self.data = data |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
56 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 class ooberror(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 """wireproto reply: failure of a batch of operation |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 Something failed during a batch call. The error message is stored in |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 `self.message`. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 """ |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 def __init__(self, message): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 self.message = message |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 class pushres(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 """wireproto reply: success with simple integer return |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 The call was successful and returned an integer contained in `self.res`. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 """ |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
71 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 class pusherr(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 """wireproto reply: failure |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 The call failed. The `self.res` attribute contains the error message. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 """ |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
82 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 class streamres(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 """wireproto reply: binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 The call was successful and the result is a stream. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 Accepts a generator containing chunks of data to be sent to the client. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 ``prefer_uncompressed`` indicates that the data is expected to be |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 uncompressable and that the stream should therefore use the ``none`` |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 engine. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 """ |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 def __init__(self, gen=None, prefer_uncompressed=False): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 self.gen = gen |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 self.prefer_uncompressed = prefer_uncompressed |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 class streamreslegacy(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 """wireproto reply: uncompressed binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 The call was successful and the result is a stream. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 Accepts a generator containing chunks of data to be sent to the client. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 Like ``streamres``, but sends an uncompressed data for "version 1" clients |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 using the application/mercurial-0.1 media type. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 """ |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 def __init__(self, gen=None): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 self.gen = gen |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
111 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
112 # list of nodes encoding / decoding |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
113 def decodelist(l, sep=' '): |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
114 if l: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
115 return [bin(v) for v in l.split(sep)] |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
116 return [] |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
117 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
118 def encodelist(l, sep=' '): |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
119 try: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
120 return sep.join(map(hex, l)) |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
121 except TypeError: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
122 raise |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
123 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
124 # batched call argument encoding |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
125 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
126 def escapebatcharg(plain): |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
127 return (plain |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
128 .replace(':', ':c') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
129 .replace(',', ':o') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
130 .replace(';', ':s') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
131 .replace('=', ':e')) |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
132 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
133 def unescapebatcharg(escaped): |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
134 return (escaped |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
135 .replace(':e', '=') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
136 .replace(':s', ';') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
137 .replace(':o', ',') |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
138 .replace(':c', ':')) |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
139 |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
140 # mapping of options accepted by getbundle and their types |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
141 # |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
142 # Meant to be extended by extensions. It is extensions responsibility to ensure |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
143 # such options are properly processed in exchange.getbundle. |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
144 # |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
145 # supported types are: |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
146 # |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
147 # :nodes: list of binary nodes |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
148 # :csv: list of comma-separated values |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
149 # :scsv: list of comma-separated values return as set |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
150 # :plain: string with no transformation needed. |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
151 GETBUNDLE_ARGUMENTS = { |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
152 'heads': 'nodes', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
153 'bookmarks': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
154 'common': 'nodes', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
155 'obsmarkers': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
156 'phases': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
157 'bundlecaps': 'scsv', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
158 'listkeys': 'csv', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
159 'cg': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
160 'cbattempted': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
161 'stream': 'boolean', |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
162 } |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
163 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
164 class baseprotocolhandler(interfaceutil.Interface): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
165 """Abstract base class for wire protocol handlers. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
166 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
167 A wire protocol handler serves as an interface between protocol command |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
168 handlers and the wire protocol transport layer. Protocol handlers provide |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
169 methods to read command arguments, redirect stdio for the duration of |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
170 the request, handle response types, etc. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
171 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
172 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
173 name = interfaceutil.Attribute( |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
174 """The name of the protocol implementation. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
175 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
176 Used for uniquely identifying the transport type. |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
177 """) |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
178 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
179 def getargs(args): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
180 """return the value for arguments in <args> |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
181 |
37485
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
182 For version 1 transports, returns a list of values in the same |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
183 order they appear in ``args``. For version 2 transports, returns |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
184 a dict mapping argument name to value. |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
185 """ |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
186 |
37393
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
187 def getprotocaps(): |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
188 """Returns the list of protocol-level capabilities of client |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
189 |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
190 Returns a list of capabilities as declared by the client for |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
191 the current request (or connection for stateful protocol handlers).""" |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
192 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
193 def getpayload(): |
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
194 """Provide a generator for the raw payload. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
195 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
196 The caller is responsible for ensuring that the full payload is |
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
197 processed. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
198 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
199 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
200 def mayberedirectstdio(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
201 """Context manager to possibly redirect stdio. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
202 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
203 The context manager yields a file-object like object that receives |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
204 stdout and stderr output when the context manager is active. Or it |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
205 yields ``None`` if no I/O redirection occurs. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
206 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
207 The intent of this context manager is to capture stdio output |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
208 so it may be sent in the response. Some transports support streaming |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
209 stdio to the client in real time. For these transports, stdio output |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
210 won't be captured. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
211 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
212 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
213 def client(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
214 """Returns a string representation of this client (as bytes).""" |
36613
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
215 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
216 def addcapabilities(repo, caps): |
36613
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
217 """Adds advertised capabilities specific to this protocol. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
218 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
219 Receives the list of capabilities collected so far. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
220 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
221 Returns a list of capabilities. The passed in argument can be returned. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
222 """ |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
223 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
224 def checkperm(perm): |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
225 """Validate that the client has permissions to perform a request. |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
226 |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
227 The argument is the permission required to proceed. If the client |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
228 doesn't have that permission, the exception should raise or abort |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
229 in a protocol specific manner. |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
230 """ |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
231 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
232 class commandentry(object): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
233 """Represents a declared wire protocol command.""" |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
234 def __init__(self, func, args='', transports=None, |
40021
c537144fdbef
wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40020
diff
changeset
|
235 permission='push', cachekeyfn=None): |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
236 self.func = func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
237 self.args = args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
238 self.transports = transports or set() |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
239 self.permission = permission |
40021
c537144fdbef
wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40020
diff
changeset
|
240 self.cachekeyfn = cachekeyfn |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
241 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
242 def _merge(self, func, args): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
243 """Merge this instance with an incoming 2-tuple. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
244 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
245 This is called when a caller using the old 2-tuple API attempts |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
246 to replace an instance. The incoming values are merged with |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
247 data not captured by the 2-tuple and a new instance containing |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
248 the union of the two objects is returned. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
249 """ |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
250 return commandentry(func, args=args, transports=set(self.transports), |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
251 permission=self.permission) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
252 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
253 # Old code treats instances as 2-tuples. So expose that interface. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
254 def __iter__(self): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
255 yield self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
256 yield self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
257 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
258 def __getitem__(self, i): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
259 if i == 0: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
260 return self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
261 elif i == 1: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
262 return self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
263 else: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
264 raise IndexError('can only access elements 0 and 1') |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
265 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
266 class commanddict(dict): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
267 """Container for registered wire protocol commands. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
268 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
269 It behaves like a dict. But __setitem__ is overwritten to allow silent |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
270 coercion of values from 2-tuples for API compatibility. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
271 """ |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
272 def __setitem__(self, k, v): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
273 if isinstance(v, commandentry): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
274 pass |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
275 # Cast 2-tuples to commandentry instances. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
276 elif isinstance(v, tuple): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
277 if len(v) != 2: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
278 raise ValueError('command tuples must have exactly 2 elements') |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
279 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
280 # It is common for extensions to wrap wire protocol commands via |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
281 # e.g. ``wireproto.commands[x] = (newfn, args)``. Because callers |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
282 # doing this aren't aware of the new API that uses objects to store |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
283 # command entries, we automatically merge old state with new. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
284 if k in self: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
285 v = self[k]._merge(v[0], v[1]) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
286 else: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
287 # Use default values from @wireprotocommand. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
288 v = commandentry(v[0], args=v[1], |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
289 transports=set(TRANSPORTS), |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
290 permission='push') |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
291 else: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
292 raise ValueError('command entries must be commandentry instances ' |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
293 'or 2-tuples') |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
294 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
295 return super(commanddict, self).__setitem__(k, v) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
296 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
297 def commandavailable(self, command, proto): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
298 """Determine if a command is available for the requested protocol.""" |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
299 assert proto.name in TRANSPORTS |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
300 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
301 entry = self.get(command) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
302 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
303 if not entry: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
304 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
305 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
306 if proto.name not in entry.transports: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
307 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
308 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
309 return True |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
310 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
311 def supportedcompengines(ui, role): |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
312 """Obtain the list of supported compression engines for a request.""" |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
313 assert role in (util.CLIENTROLE, util.SERVERROLE) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
314 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
315 compengines = util.compengines.supportedwireengines(role) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
316 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
317 # Allow config to override default list and ordering. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
318 if role == util.SERVERROLE: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
319 configengines = ui.configlist('server', 'compressionengines') |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
320 config = 'server.compressionengines' |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
321 else: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
322 # This is currently implemented mainly to facilitate testing. In most |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
323 # cases, the server should be in charge of choosing a compression engine |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
324 # because a server has the most to lose from a sub-optimal choice. (e.g. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
325 # CPU DoS due to an expensive engine or a network DoS due to poor |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
326 # compression ratio). |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
327 configengines = ui.configlist('experimental', |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
328 'clientcompressionengines') |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
329 config = 'experimental.clientcompressionengines' |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
330 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
331 # No explicit config. Filter out the ones that aren't supposed to be |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
332 # advertised and return default ordering. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
333 if not configengines: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
334 attr = 'serverpriority' if role == util.SERVERROLE else 'clientpriority' |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
335 return [e for e in compengines |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
336 if getattr(e.wireprotosupport(), attr) > 0] |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
337 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
338 # If compression engines are listed in the config, assume there is a good |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
339 # reason for it (like server operators wanting to achieve specific |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
340 # performance characteristics). So fail fast if the config references |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
341 # unusable compression engines. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
342 validnames = set(e.name() for e in compengines) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
343 invalidnames = set(e for e in configengines if e not in validnames) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
344 if invalidnames: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
345 raise error.Abort(_('invalid compression engine defined in %s: %s') % |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
346 (config, ', '.join(sorted(invalidnames)))) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
347 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
348 compengines = [e for e in compengines if e.name() in configengines] |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
349 compengines = sorted(compengines, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
350 key=lambda e: configengines.index(e.name())) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
351 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
352 if not compengines: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
353 raise error.Abort(_('%s config option does not specify any known ' |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
354 'compression engines') % config, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
355 hint=_('usable compression engines: %s') % |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
356 ', '.sorted(validnames)) |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
357 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
358 return compengines |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
359 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
360 @attr.s |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
361 class encodedresponse(object): |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
362 """Represents response data that is already content encoded. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
363 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
364 Wire protocol version 2 only. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
365 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
366 Commands typically emit Python objects that are encoded and sent over the |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
367 wire. If commands emit an object of this type, the encoding step is bypassed |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
368 and the content from this object is used instead. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
369 """ |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
370 data = attr.ib() |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
371 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
372 @attr.s |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
373 class alternatelocationresponse(object): |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
374 """Represents a response available at an alternate location. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
375 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
376 Instances are sent in place of actual response objects when the server |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
377 is sending a "content redirect" response. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
378 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
379 Only compatible with wire protocol version 2. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
380 """ |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
381 url = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
382 mediatype = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
383 size = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
384 fullhashes = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
385 fullhashseed = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
386 serverdercerts = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
387 servercadercerts = attr.ib(default=None) |