Compare commits
2558 Commits
sleek-1.0.
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a30f76892b | ||
![]() |
3de8ee97b5 | ||
![]() |
0de9df92c4 | ||
![]() |
04d5c43853 | ||
![]() |
0707786057 | ||
![]() |
1c762c6b25 | ||
![]() |
f94a4f2dbd | ||
![]() |
75ea0bf039 | ||
![]() |
4cf1286332 | ||
![]() |
8a127f61d0 | ||
![]() |
1f14fb54c2 | ||
![]() |
651e0ea593 | ||
![]() |
4ac41a5250 | ||
![]() |
e03b7661c1 | ||
![]() |
e955cd308a | ||
![]() |
2db5e0199c | ||
![]() |
bf2e006f88 | ||
![]() |
8c8bb5da8b | ||
![]() |
bd638f1b39 | ||
![]() |
0ff9e3661d | ||
![]() |
5ec378cccd | ||
![]() |
a9fc955eda | ||
![]() |
05860f71ac | ||
![]() |
1482bcc395 | ||
![]() |
2e736bc715 | ||
![]() |
8d984cd8a1 | ||
![]() |
100014651c | ||
![]() |
f9a9a0dcb7 | ||
![]() |
c585ec5983 | ||
![]() |
27bbb1ef95 | ||
![]() |
5dfc622539 | ||
![]() |
2ab9b5a05c | ||
![]() |
09d9320b91 | ||
![]() |
fbf298c36d | ||
![]() |
7153d79006 | ||
![]() |
1d3e03a923 | ||
![]() |
3d0b09e2e2 | ||
![]() |
23544731ef | ||
![]() |
a18a6c4eb8 | ||
![]() |
dd903b1792 | ||
![]() |
cf3b30120e | ||
![]() |
d86dccaf85 | ||
![]() |
075812adf3 | ||
![]() |
8955ece461 | ||
![]() |
5051c60262 | ||
![]() |
c495eb73fc | ||
![]() |
12c516d365 | ||
![]() |
d9b0b6dfe6 | ||
![]() |
7979e3b603 | ||
![]() |
f24a7679e5 | ||
![]() |
df0ecfc142 | ||
![]() |
e79b98b266 | ||
![]() |
5ed5e60b20 | ||
![]() |
e5fe53ef45 | ||
![]() |
93608bd2f4 | ||
![]() |
3b2386ee2f | ||
![]() |
b94c6716f7 | ||
![]() |
db8ce9187c | ||
![]() |
7f926a944a | ||
![]() |
e96f8e1ed0 | ||
![]() |
c8c0bb9134 | ||
![]() |
825c51b87d | ||
![]() |
7c79f28587 | ||
![]() |
dcaf812a28 | ||
![]() |
ae4de043d2 | ||
![]() |
998bbb80ad | ||
![]() |
5a5b36ab39 | ||
![]() |
f151f0a7ab | ||
![]() |
2424a3b36f | ||
![]() |
1c4bbbce8e | ||
![]() |
66d552d057 | ||
![]() |
b8205a9ae4 | ||
![]() |
85b7210115 | ||
![]() |
909c865524 | ||
![]() |
586d2f5107 | ||
![]() |
9f7260747f | ||
![]() |
c41209510a | ||
![]() |
9266486f46 | ||
![]() |
5226858e0c | ||
![]() |
7128ea249b | ||
![]() |
992d80dd09 | ||
![]() |
c25305e80f | ||
![]() |
6765f84133 | ||
![]() |
31fe7f7e06 | ||
![]() |
84a7ac020f | ||
![]() |
331c1c1e21 | ||
![]() |
28a60c22e2 | ||
![]() |
af934b5bdf | ||
![]() |
897f876504 | ||
![]() |
2888be17ab | ||
![]() |
975e31229c | ||
![]() |
6e9e66139d | ||
![]() |
380ac04d52 | ||
![]() |
9e5b530607 | ||
![]() |
71de274fab | ||
![]() |
5a0b02378d | ||
![]() |
9fc82e9e6f | ||
![]() |
ca90d3908e | ||
![]() |
7de5cbcf33 | ||
![]() |
76a11d4899 | ||
![]() |
dcfa0f20f9 | ||
![]() |
7732af8991 | ||
![]() |
25c28ff5d1 | ||
![]() |
e3e0d8f43e | ||
![]() |
13729e47a6 | ||
![]() |
f12860bfad | ||
![]() |
bcbc7281e7 | ||
![]() |
8787aa1064 | ||
![]() |
f3522eb84b | ||
![]() |
da9646cdaa | ||
![]() |
db1fc5fbc5 | ||
![]() |
209554e63f | ||
![]() |
2d02ef9bcb | ||
![]() |
18c3db4d6e | ||
![]() |
6d6fdc6419 | ||
![]() |
4936fb06bf | ||
![]() |
5e47286445 | ||
![]() |
8bead23799 | ||
![]() |
56c906f207 | ||
![]() |
876c82037f | ||
![]() |
fae4a38e84 | ||
![]() |
2b59d299a1 | ||
![]() |
51a4efb0f4 | ||
![]() |
8f77bd4ee5 | ||
![]() |
71128349a4 | ||
![]() |
bc2cebae6c | ||
![]() |
2080d08d63 | ||
![]() |
e16f72d32d | ||
![]() |
4fa068da54 | ||
![]() |
21e5cd4435 | ||
![]() |
1a40699bcc | ||
![]() |
ebb8bd1e71 | ||
![]() |
78b42bdbbe | ||
![]() |
abd3f40e96 | ||
![]() |
b6f148e4e6 | ||
![]() |
968fb0bac3 | ||
![]() |
8dcbcbf8a0 | ||
![]() |
de7b2d33a3 | ||
![]() |
fd1af054c5 | ||
![]() |
e34fbfb28f | ||
![]() |
af16832ad0 | ||
![]() |
40a857de65 | ||
![]() |
79ffa1668f | ||
![]() |
b4b1efe058 | ||
![]() |
de358464d0 | ||
![]() |
92b4f2a7eb | ||
![]() |
1f934d375c | ||
![]() |
700ce6b32e | ||
![]() |
5efa9804ba | ||
![]() |
9b0be1ca2b | ||
![]() |
5c19f16287 | ||
![]() |
af07864cbb | ||
![]() |
dc4b1c7367 | ||
![]() |
4a6064772c | ||
![]() |
80a89061f1 | ||
![]() |
8f4d8f76d1 | ||
![]() |
656248ede7 | ||
![]() |
980afe791f | ||
![]() |
3725177d0b | ||
![]() |
26fb0d1f91 | ||
![]() |
5eb17e7633 | ||
![]() |
fdca7d82c4 | ||
![]() |
9b89401b36 | ||
![]() |
7300f1285e | ||
![]() |
9b51be1e17 | ||
![]() |
89b1e1e682 | ||
![]() |
a7501abe56 | ||
![]() |
6940e4276b | ||
![]() |
752f4258df | ||
![]() |
b60b1b985d | ||
![]() |
e93e43df66 | ||
![]() |
cfd1af88eb | ||
![]() |
65636b8cce | ||
![]() |
7a0fb97083 | ||
![]() |
189bbcce19 | ||
![]() |
79607e43f1 | ||
![]() |
e062181f84 | ||
![]() |
97b0c7ffac | ||
![]() |
c2ece57dee | ||
![]() |
afdfa1ee57 | ||
![]() |
cba5dc7ddc | ||
![]() |
b3a6c7a4ea | ||
![]() |
11e27d1d7d | ||
![]() |
fbdff30dda | ||
![]() |
62701bc562 | ||
![]() |
b14918808c | ||
![]() |
f5cb9fe66b | ||
![]() |
8bd53f7098 | ||
![]() |
c955cf1c66 | ||
![]() |
6904ae63f5 | ||
![]() |
1caada197a | ||
![]() |
450aaa7f86 | ||
![]() |
d43c83800e | ||
![]() |
14786abd34 | ||
![]() |
1f47acaec1 | ||
![]() |
ed820bf551 | ||
![]() |
afedfa4b06 | ||
![]() |
5998069203 | ||
![]() |
356f16f5af | ||
![]() |
b8f301b26f | ||
![]() |
ffaeb31219 | ||
![]() |
9560f39de7 | ||
![]() |
f7a38a028a | ||
![]() |
65d70fe417 | ||
![]() |
108a256537 | ||
![]() |
78a5f79240 | ||
![]() |
fc63768cfc | ||
![]() |
90e79af18a | ||
![]() |
5e5a741994 | ||
![]() |
b44ab17c8f | ||
![]() |
afb5419b68 | ||
![]() |
a1a5f3984d | ||
![]() |
8eb8769862 | ||
![]() |
5ceb48bbcd | ||
![]() |
916894ab7c | ||
![]() |
2b45c22fcb | ||
![]() |
566e7dc771 | ||
![]() |
aa492f905c | ||
![]() |
e1a240ec6c | ||
![]() |
771839242c | ||
![]() |
8bac744009 | ||
![]() |
88d2f5dae4 | ||
![]() |
f7902d056e | ||
![]() |
41afbb10df | ||
![]() |
aca4addb9c | ||
![]() |
914ce40fd5 | ||
![]() |
82ff68cfac | ||
![]() |
28d44ecf74 | ||
![]() |
fcec6742cf | ||
![]() |
fedbb248ec | ||
![]() |
e8679fe32b | ||
![]() |
06e4e480c1 | ||
![]() |
82ee250295 | ||
![]() |
53d38a8115 | ||
![]() |
41d733e77f | ||
![]() |
0fba8fd7f8 | ||
![]() |
b899baabd8 | ||
![]() |
acad41f3b7 | ||
![]() |
bde5aaaf3e | ||
![]() |
7222ade0dd | ||
![]() |
14a6c7801d | ||
![]() |
b52540e49f | ||
![]() |
c1aeab328b | ||
![]() |
51644e301b | ||
![]() |
bc8af3cc61 | ||
![]() |
3c08f471cf | ||
![]() |
54b724c28b | ||
![]() |
abd699593f | ||
![]() |
4202ed4cd5 | ||
![]() |
60df4ef7aa | ||
![]() |
ad610c7ded | ||
![]() |
e8f45dedfe | ||
![]() |
51a7cad7e1 | ||
![]() |
389a358996 | ||
![]() |
001e0c7060 | ||
![]() |
5c4c867dee | ||
![]() |
b23b805dc5 | ||
![]() |
11b555af20 | ||
![]() |
06172ea896 | ||
![]() |
815b7d5af7 | ||
![]() |
28fe68c7d3 | ||
![]() |
d15a37e146 | ||
![]() |
98dba869c7 | ||
![]() |
bcb4495c6d | ||
![]() |
22b00c6073 | ||
![]() |
a50bffae89 | ||
![]() |
92c3f69829 | ||
![]() |
1e7d7bf8cb | ||
![]() |
53f0971fd0 | ||
![]() |
e543e22e78 | ||
![]() |
714f9aae0d | ||
![]() |
9eb4462acc | ||
![]() |
d5502c9be7 | ||
![]() |
33efbd4d7b | ||
![]() |
e344c0c303 | ||
![]() |
9f38c8944d | ||
![]() |
e56930e0a1 | ||
![]() |
d733c54518 | ||
![]() |
834ea8ed74 | ||
![]() |
90662d148e | ||
![]() |
237405e3a0 | ||
![]() |
623d2cc27e | ||
![]() |
6fb4617732 | ||
![]() |
0e5a4726af | ||
![]() |
8ba054dd53 | ||
![]() |
e1b135c667 | ||
![]() |
4ca1de92b3 | ||
![]() |
799a6a07a9 | ||
![]() |
be6dde17f1 | ||
![]() |
14ae84d666 | ||
![]() |
0cc1095ffc | ||
![]() |
4cab1f62aa | ||
![]() |
4d7786a830 | ||
![]() |
8fccfc452b | ||
![]() |
ed514e6f73 | ||
![]() |
bac6a4b2bf | ||
![]() |
d4067275ff | ||
![]() |
91d32bd066 | ||
![]() |
22fa8bc4d9 | ||
![]() |
5c54806578 | ||
![]() |
42ca51e2b1 | ||
![]() |
de6c19c9cd | ||
![]() |
ca1cc73c79 | ||
![]() |
9489586cb4 | ||
![]() |
524c352da3 | ||
![]() |
35eafadb44 | ||
![]() |
af958fd1fe | ||
![]() |
0971bab30a | ||
![]() |
ed3bb878a7 | ||
![]() |
f2d7e86fc7 | ||
![]() |
fe1a325aa7 | ||
![]() |
ea7f7d8119 | ||
![]() |
3516016f32 | ||
![]() |
a57aae792d | ||
![]() |
d6924fa7ad | ||
![]() |
20e4c2c257 | ||
![]() |
df963542c1 | ||
![]() |
7fc3c48cad | ||
![]() |
7d4172808f | ||
![]() |
95b034797f | ||
![]() |
f1b429199f | ||
![]() |
db48c8f4da | ||
![]() |
c07476e7de | ||
![]() |
62e66e7d03 | ||
![]() |
79f71ec0c1 | ||
![]() |
451bee0892 | ||
![]() |
00d38c1b29 | ||
![]() |
fed55d3dda | ||
![]() |
4931e7e604 | ||
![]() |
9f01d368c0 | ||
![]() |
ef06429941 | ||
![]() |
b1411d8ed7 | ||
![]() |
889cfaa95b | ||
![]() |
b7f0160c0d | ||
![]() |
528553be57 | ||
![]() |
6f4ac7e7ce | ||
![]() |
aaab58d229 | ||
![]() |
0b5f6cb0a8 | ||
![]() |
027545eb71 | ||
![]() |
290d84cd0f | ||
![]() |
f058e62680 | ||
![]() |
104917163d | ||
![]() |
d184442337 | ||
![]() |
a4789acbfb | ||
![]() |
3630c3d1cc | ||
![]() |
41fc6a2e6b | ||
![]() |
7f0febb929 | ||
![]() |
44392fa2d9 | ||
![]() |
7bb94afdc8 | ||
![]() |
8828a5b99d | ||
![]() |
0d52344a31 | ||
![]() |
768089d457 | ||
![]() |
eee185ff90 | ||
![]() |
99c6fc923a | ||
![]() |
d4e1b68534 | ||
![]() |
3bb01de120 | ||
![]() |
7057773d18 | ||
![]() |
894131d772 | ||
![]() |
fcf666e3cb | ||
![]() |
3e5943f458 | ||
![]() |
7ddcc3428f | ||
![]() |
d77eb3a7e8 | ||
![]() |
7f90fb594a | ||
![]() |
1cf6393b61 | ||
![]() |
7c86c43fc7 | ||
![]() |
8a1f9bec56 | ||
![]() |
ad2673fd2c | ||
![]() |
0115feaa31 | ||
![]() |
3613cd5f14 | ||
![]() |
644ebfe89f | ||
![]() |
e329eadbed | ||
![]() |
4cdcc4d155 | ||
![]() |
97a63b9f25 | ||
![]() |
dbbc47e02d | ||
![]() |
7d2b245bb0 | ||
![]() |
e5f4794a36 | ||
![]() |
d7d4baefa3 | ||
![]() |
1289cf575c | ||
![]() |
a568363a6c | ||
![]() |
eac5ad50a8 | ||
![]() |
e97f5ccb9c | ||
![]() |
432a332636 | ||
![]() |
30b1d27fc1 | ||
![]() |
cb83ebe32c | ||
![]() |
cd0845515a | ||
![]() |
ade1b010ed | ||
![]() |
5ff46d6245 | ||
![]() |
5a3ab2c5c1 | ||
![]() |
27cf97458b | ||
![]() |
ae31f78b63 | ||
![]() |
c1a598c34b | ||
![]() |
2314ee422a | ||
![]() |
9b5f3d9df0 | ||
![]() |
49416dacbc | ||
![]() |
e3027dabb2 | ||
![]() |
10611525a0 | ||
![]() |
2ff72d88fd | ||
![]() |
9561a2a305 | ||
![]() |
2dac77e680 | ||
![]() |
0726b79345 | ||
![]() |
9f1ded7f5f | ||
![]() |
bea2669907 | ||
![]() |
a288094b64 | ||
![]() |
f12b04bd0b | ||
![]() |
059cb290d8 | ||
![]() |
3cdec464a5 | ||
![]() |
9927e69435 | ||
![]() |
8e388df8e0 | ||
![]() |
8eee559d39 | ||
![]() |
2fed9f9ad2 | ||
![]() |
9947d3db85 | ||
![]() |
ab87b25030 | ||
![]() |
e24e2f58d4 | ||
![]() |
4960cffcb4 | ||
![]() |
f0aec1614f | ||
![]() |
504067d5a8 | ||
![]() |
0b3233a6e8 | ||
![]() |
f7ecce42ac | ||
![]() |
d17967f58e | ||
![]() |
13de36baa1 | ||
![]() |
7772e26a8c | ||
![]() |
0b6326e1cc | ||
![]() |
d51c4e307d | ||
![]() |
8da5310ea6 | ||
![]() |
5f9ab45a5e | ||
![]() |
6d241be789 | ||
![]() |
babd98dac7 | ||
![]() |
b8b57960f1 | ||
![]() |
5764ef7ff7 | ||
![]() |
7381460556 | ||
![]() |
8b7648502b | ||
![]() |
17a663b0fd | ||
![]() |
9270d1e538 | ||
![]() |
35c68738a7 | ||
![]() |
751987e2b0 | ||
![]() |
35a9526a4c | ||
![]() |
7e3e056e6b | ||
![]() |
94700de7a3 | ||
![]() |
2f0660c6ff | ||
![]() |
ba7e5e417f | ||
![]() |
2ba89727a6 | ||
![]() |
a397cc3a7d | ||
![]() |
626bf5ff8a | ||
![]() |
cef7b5cf05 | ||
![]() |
8d92027d01 | ||
![]() |
dcab3de1b4 | ||
![]() |
3453ebf0c5 | ||
![]() |
699a2620b7 | ||
![]() |
5d7918b122 | ||
![]() |
3eeef6b4b6 | ||
![]() |
f50dfd6644 | ||
![]() |
bbcc977d1d | ||
![]() |
3668e79fbc | ||
![]() |
febfb6d6ca | ||
![]() |
3b43d8eb7f | ||
![]() |
6520376977 | ||
![]() |
8b5776faec | ||
![]() |
ea2d851a93 | ||
![]() |
a7d690813c | ||
![]() |
02262679e9 | ||
![]() |
654178b960 | ||
![]() |
02e0afbf0f | ||
![]() |
ace82c9bc4 | ||
![]() |
53dc9847e2 | ||
![]() |
bfbc433c8d | ||
![]() |
ba7c7f4bb9 | ||
![]() |
7cde0db4aa | ||
![]() |
1c4e06d510 | ||
![]() |
80ee551acd | ||
![]() |
f0601cdb84 | ||
![]() |
0978f66736 | ||
![]() |
679432591e | ||
![]() |
bc04da256a | ||
![]() |
b9e479f213 | ||
![]() |
648ca16b4c | ||
![]() |
622cfd4ed7 | ||
![]() |
d850b9a9f7 | ||
![]() |
fb74e46c35 | ||
![]() |
603cbccddd | ||
![]() |
bbd351e9c1 | ||
![]() |
cff4588499 | ||
![]() |
89601289fe | ||
![]() |
6c3f26161e | ||
![]() |
d6ab3124ce | ||
![]() |
cb8d2edc8d | ||
![]() |
69e04d7d2e | ||
![]() |
ace5aeb80e | ||
![]() |
712ac671e1 | ||
![]() |
99c2e5cafd | ||
![]() |
8e612bf229 | ||
![]() |
7860edefe9 | ||
![]() |
fbb8993244 | ||
![]() |
77c8caf205 | ||
![]() |
c82e1a4039 | ||
![]() |
69b265b975 | ||
![]() |
917cb555d5 | ||
![]() |
d3fb993b29 | ||
![]() |
ccbba89cbd | ||
![]() |
d3063a0368 | ||
![]() |
40196aefeb | ||
![]() |
782dbdea65 | ||
![]() |
650e1a2ed5 | ||
![]() |
c486c0e821 | ||
![]() |
f8c39bae60 | ||
![]() |
d9975aa4c0 | ||
![]() |
17f08929f9 | ||
![]() |
d8dbfaa37e | ||
![]() |
cb3d9dd41c | ||
![]() |
e6e57f6e8c | ||
![]() |
64299d6a54 | ||
![]() |
f6761e513d | ||
![]() |
f2878e1764 | ||
![]() |
2585764b46 | ||
![]() |
a16792e990 | ||
![]() |
6448d09c30 | ||
![]() |
a85e5225f9 | ||
![]() |
3c19f69c25 | ||
![]() |
846c42e386 | ||
![]() |
1f97462391 | ||
![]() |
c7d87a27e1 | ||
![]() |
a8113dca49 | ||
![]() |
eda692d1c6 | ||
![]() |
7932a03378 | ||
![]() |
e9b07e32bb | ||
![]() |
8689212602 | ||
![]() |
68649d0089 | ||
![]() |
473575d276 | ||
![]() |
ab9b7115de | ||
![]() |
58f4ccf5c7 | ||
![]() |
f41fd7cce4 | ||
![]() |
04a3f609e2 | ||
![]() |
119f59ecbe | ||
![]() |
ee671dfb29 | ||
![]() |
d954283fb6 | ||
![]() |
ed2c03fade | ||
![]() |
a381267d21 | ||
![]() |
1e1576473b | ||
![]() |
dbcd0c6050 | ||
![]() |
f93af07882 | ||
![]() |
3f739e513b | ||
![]() |
fc7d7b4eb7 | ||
![]() |
3642e2c7f4 | ||
![]() |
f15311bda8 | ||
![]() |
b2dfb4c1f3 | ||
![]() |
d227579d56 | ||
![]() |
571774edb4 | ||
![]() |
456dff0b61 | ||
![]() |
a0b6bfcefe | ||
![]() |
9fbd40578c | ||
![]() |
8700f8d162 | ||
![]() |
efdcd396d8 | ||
![]() |
0eed84d0b2 | ||
![]() |
370abb1d98 | ||
![]() |
51866f0d46 | ||
![]() |
9390794401 | ||
![]() |
70b5081018 | ||
![]() |
4cb679ae2a | ||
![]() |
ab280b44cc | ||
![]() |
0193667ace | ||
![]() |
9cb5131f1c | ||
![]() |
0bf1b96859 | ||
![]() |
c6a0da63ae | ||
![]() |
3f10dfe138 | ||
![]() |
49577e6c84 | ||
![]() |
04dcc8628d | ||
![]() |
81ebf4e8ba | ||
![]() |
b784b68bcd | ||
![]() |
f38c61a6b9 | ||
![]() |
2631b25e3e | ||
![]() |
2b11d81b86 | ||
![]() |
ca465032e7 | ||
![]() |
6369ee0e5f | ||
![]() |
1e23167ce4 | ||
![]() |
cccc1253aa | ||
![]() |
fb31e9c1fd | ||
![]() |
b4dd1e0132 | ||
![]() |
525855c17b | ||
![]() |
ce0d615786 | ||
![]() |
1e08c90018 | ||
![]() |
c05cafc963 | ||
![]() |
166b265de0 | ||
![]() |
d91eea3a3a | ||
![]() |
569b9c5ee2 | ||
![]() |
a3ca4c11c3 | ||
![]() |
489e419e38 | ||
![]() |
0b2594aa2c | ||
![]() |
1b3a00c894 | ||
![]() |
ef201b6ae9 | ||
![]() |
69af0fc1dc | ||
![]() |
7ecdc7fced | ||
![]() |
39c624f958 | ||
![]() |
4c9591d5c9 | ||
![]() |
31841ef3bf | ||
![]() |
6773dc4409 | ||
![]() |
71888b24a6 | ||
![]() |
3b00c56bdc | ||
![]() |
bf17c32705 | ||
![]() |
bc58c5a045 | ||
![]() |
d6be776640 | ||
![]() |
878870255f | ||
![]() |
1e2d15b8f5 | ||
![]() |
155fc58a22 | ||
![]() |
95d40a3ca3 | ||
![]() |
010bf6dd70 | ||
![]() |
9d61655215 | ||
![]() |
f768a980d8 | ||
![]() |
d371828041 | ||
![]() |
b63dc3bc8c | ||
![]() |
8258202681 | ||
![]() |
c892fba778 | ||
![]() |
758dfb930c | ||
![]() |
91c3d64ca2 | ||
![]() |
340b0f0f16 | ||
![]() |
a1ef32a122 | ||
![]() |
ef6dab81b9 | ||
![]() |
b3e2a8eb91 | ||
![]() |
11ac5867ff | ||
![]() |
a61f2248fd | ||
![]() |
7a4ea4c1ae | ||
![]() |
c0acb7e34f | ||
![]() |
c89a21463f | ||
![]() |
1836b2b887 | ||
![]() |
12e3c9988d | ||
![]() |
b8f368acf3 | ||
![]() |
bcd8cf085f | ||
![]() |
cd4c9f82fc | ||
![]() |
73cc2a4008 | ||
![]() |
aa5d422f38 | ||
![]() |
684247b375 | ||
![]() |
6db5bb65d3 | ||
![]() |
cc96e4a6e7 | ||
![]() |
bb3c61f6e0 | ||
![]() |
2c764b7c7d | ||
![]() |
77587a4843 | ||
![]() |
2cb2fcefbf | ||
![]() |
d3dc09ce94 | ||
![]() |
e6d1badb81 | ||
![]() |
3d1e539d2b | ||
![]() |
05749c4969 | ||
![]() |
c2b09c5c83 | ||
![]() |
fdb0749cd1 | ||
![]() |
2c523d1a3b | ||
![]() |
41dea80d94 | ||
![]() |
c4ca15a040 | ||
![]() |
54d556280a | ||
![]() |
c63e9a32b9 | ||
![]() |
58c3579f74 | ||
![]() |
e592a46c99 | ||
![]() |
fa6fe5e851 | ||
![]() |
6c52843d71 | ||
![]() |
d660e447ee | ||
![]() |
70cf35e9bf | ||
![]() |
5c5780503a | ||
![]() |
203628d707 | ||
![]() |
922ad8d9ea | ||
![]() |
8eb756d55c | ||
![]() |
4da1c8573e | ||
![]() |
380f0e4e38 | ||
![]() |
56f44dc47d | ||
![]() |
fa7e33110f | ||
![]() |
7033bc0061 | ||
![]() |
98b9a6f9e3 | ||
![]() |
de548fbcce | ||
![]() |
af46efc12a | ||
![]() |
88132def60 | ||
![]() |
26db6175f2 | ||
![]() |
4d5586f4a1 | ||
![]() |
4eb2bb7da8 | ||
![]() |
15bf6bc827 | ||
![]() |
3d1615ea54 | ||
![]() |
350f85a8d1 | ||
![]() |
b62ea49de3 | ||
![]() |
bdc12c00c6 | ||
![]() |
51cc459bd0 | ||
![]() |
54b9721f3a | ||
![]() |
c20b72376e | ||
![]() |
b27510f05b | ||
![]() |
45a14871ee | ||
![]() |
6ff5162fb4 | ||
![]() |
c3a6352a6b | ||
![]() |
086dc894d1 | ||
![]() |
a245ba54bd | ||
![]() |
c86a6ad299 | ||
![]() |
7e4b664742 | ||
![]() |
ddc3974d1b | ||
![]() |
9b5ab741c8 | ||
![]() |
a9a7bdc6c3 | ||
![]() |
fe68d19f91 | ||
![]() |
fe46643f2f | ||
![]() |
985505297c | ||
![]() |
0b38eeaa4a | ||
![]() |
4dbabfa211 | ||
![]() |
57c8196d9c | ||
![]() |
f90713cb9e | ||
![]() |
9b9ace97f4 | ||
![]() |
d497f94e6f | ||
![]() |
cde9ac123d | ||
![]() |
c8d1eaa2dc | ||
![]() |
200e1a6128 | ||
![]() |
9c7f3d59d8 | ||
![]() |
145bb7a36e | ||
![]() |
67fb5fe4c3 | ||
![]() |
605a58a864 | ||
![]() |
a3d343b253 | ||
![]() |
d58f59980f | ||
![]() |
9e8ac6b769 | ||
![]() |
3b3eed544e | ||
![]() |
03ee9bc4cc | ||
![]() |
4fad5c62ce | ||
![]() |
5ccae3ce2a | ||
![]() |
a104e3722e | ||
![]() |
bb61f0f39d | ||
![]() |
a29ce4b547 | ||
![]() |
07b1a4c1cd | ||
![]() |
cec34686fc | ||
![]() |
03148ed92e | ||
![]() |
6f4e9b485f | ||
![]() |
28123083f7 | ||
![]() |
ef961392be | ||
![]() |
2e31de3f45 | ||
![]() |
8a52730f11 | ||
![]() |
04df50feac | ||
![]() |
c7bd224182 | ||
![]() |
bac1e9b44a | ||
![]() |
b62f0e90c1 | ||
![]() |
9ace053992 | ||
![]() |
c7cd2fcf33 | ||
![]() |
e57289358f | ||
![]() |
4aa35c11ab | ||
![]() |
d6f7d32bbe | ||
![]() |
0dd32be7f5 | ||
![]() |
bf69698af1 | ||
![]() |
aa732b3c94 | ||
![]() |
d076cef023 | ||
![]() |
f884b67b8b | ||
![]() |
0d3116dbdf | ||
![]() |
f1ab9ab964 | ||
![]() |
e520ab1f5e | ||
![]() |
3dcb96d9d8 | ||
![]() |
0a7a4c3abe | ||
![]() |
a4bbc404ed | ||
![]() |
1314e70460 | ||
![]() |
f84bfce5f3 | ||
![]() |
c3fbc6cb80 | ||
![]() |
355d789061 | ||
![]() |
47ed67c04e | ||
![]() |
34567f450a | ||
![]() |
9126bd8392 | ||
![]() |
02202f7cd8 | ||
![]() |
2add94f5b0 | ||
![]() |
5fc757f200 | ||
![]() |
98108d0445 | ||
![]() |
76f4fb49d6 | ||
![]() |
5be46a5e68 | ||
![]() |
ab9040c30e | ||
![]() |
a16e2a0f6c | ||
![]() |
842aa3be8f | ||
![]() |
6c28b49e7f | ||
![]() |
621255027d | ||
![]() |
efe316dc8c | ||
![]() |
e9a87a0b77 | ||
![]() |
85c9967b9c | ||
![]() |
deb6d4f176 | ||
![]() |
7218bb4499 | ||
![]() |
d85efec7a2 | ||
![]() |
9fd8684c5a | ||
![]() |
fc77fb7648 | ||
![]() |
c8d802a6c7 | ||
![]() |
3529a36974 | ||
![]() |
fe6458303a | ||
![]() |
b15d4aa0fa | ||
![]() |
01371041a3 | ||
![]() |
9c4e3956a7 | ||
![]() |
cd5b47f76c | ||
![]() |
115c234527 | ||
![]() |
a0f5cb6e09 | ||
![]() |
110bbf8afc | ||
![]() |
d97efa0bd8 | ||
![]() |
672f1b28f6 | ||
![]() |
27d3ae958b | ||
![]() |
a32794ec35 | ||
![]() |
aa11ba463e | ||
![]() |
a83c00e933 | ||
![]() |
31f6ef6814 | ||
![]() |
9b3874b5df | ||
![]() |
0139fb291e | ||
![]() |
e58988484a | ||
![]() |
5d5e5cda19 | ||
![]() |
11f707987d | ||
![]() |
db13794e0f | ||
![]() |
37bc1bb9b3 | ||
![]() |
9be30e5291 | ||
![]() |
9fe20a4056 | ||
![]() |
3253d34c0a | ||
![]() |
fef575ee1a | ||
![]() |
540ff89427 | ||
![]() |
dd8ac8fc87 | ||
![]() |
2249d878d1 | ||
![]() |
89fa9dc1dd | ||
![]() |
d7729e8683 | ||
![]() |
d618f55dea | ||
![]() |
b0e688eb35 | ||
![]() |
0e7176483b | ||
![]() |
f35569a2c1 | ||
![]() |
bec6f7c8f3 | ||
![]() |
027ce2434d | ||
![]() |
d57fbb57a2 | ||
![]() |
85cd7a9166 | ||
![]() |
d50d996c68 | ||
![]() |
371ad20ca7 | ||
![]() |
5f49df6b56 | ||
![]() |
b50bfb2f34 | ||
![]() |
b29bb30eb7 | ||
![]() |
4435c81d77 | ||
![]() |
2638ba2744 | ||
![]() |
dbc9758311 | ||
![]() |
47968963b1 | ||
![]() |
4e8800f954 | ||
![]() |
40053518aa | ||
![]() |
1ee0f72ead | ||
![]() |
4bb81228ae | ||
![]() |
60a7a5b8df | ||
![]() |
946674f424 | ||
![]() |
412a9169bd | ||
![]() |
72b355de8c | ||
![]() |
af246dcfe1 | ||
![]() |
9612e518fb | ||
![]() |
fde8264191 | ||
![]() |
1cdc656208 | ||
![]() |
0042108a67 | ||
![]() |
704161a285 | ||
![]() |
6b1b58a339 | ||
![]() |
4f96e5fa75 | ||
![]() |
bcb90a653e | ||
![]() |
7e435b703d | ||
![]() |
2dda6b80d4 | ||
![]() |
5629e44710 | ||
![]() |
6a06881d8b | ||
![]() |
2b666eb1de | ||
![]() |
400e7a3903 | ||
![]() |
fbab3ad214 | ||
![]() |
628b357b06 | ||
![]() |
88260cc240 | ||
![]() |
e9f2f503b8 | ||
![]() |
696a72247b | ||
![]() |
05d76e4b1d | ||
![]() |
d52d4fbbbe | ||
![]() |
e53c0fcb30 | ||
![]() |
97d68c5196 | ||
![]() |
b42fafabb4 | ||
![]() |
3a44ec8f15 | ||
![]() |
93f385562f | ||
![]() |
9cab02438b | ||
![]() |
74ed50e626 | ||
![]() |
9d378c611c | ||
![]() |
d85d8f4479 | ||
![]() |
fb75f7cda9 | ||
![]() |
41419a2161 | ||
![]() |
7cd73b594e | ||
![]() |
15c6b775ff | ||
![]() |
4b482477e2 | ||
![]() |
f7e4caadfe | ||
![]() |
5f25b0b6a0 | ||
![]() |
d228bc42ea | ||
![]() |
ecdc44a601 | ||
![]() |
33370e42f1 | ||
![]() |
4699861925 | ||
![]() |
2d228bdb56 | ||
![]() |
570e653ac2 | ||
![]() |
282a481059 | ||
![]() |
f386db380b | ||
![]() |
7b87d98fff | ||
![]() |
8779d40602 | ||
![]() |
f0b21c42d5 | ||
![]() |
e241d4e3c7 | ||
![]() |
bd22a41a78 | ||
![]() |
a29a29227a | ||
![]() |
d4d542b741 | ||
![]() |
dc4936a6d3 | ||
![]() |
897610d819 | ||
![]() |
d33366badd | ||
![]() |
809c500002 | ||
![]() |
dda4e18b81 | ||
![]() |
8c09d932c8 | ||
![]() |
31f5e84671 | ||
![]() |
ad0dc33df9 | ||
![]() |
7c3b3827b4 | ||
![]() |
9f6fa65139 | ||
![]() |
35fa33e3c2 | ||
![]() |
86a2f280d2 | ||
![]() |
490f15b8fc | ||
![]() |
62661ee04f | ||
![]() |
37d1f2a6b0 | ||
![]() |
20107ad516 | ||
![]() |
7738a01311 | ||
![]() |
a9abed6151 | ||
![]() |
0f690d4005 | ||
![]() |
59d4420739 | ||
![]() |
a88f317bbf | ||
![]() |
2fc2a88970 | ||
![]() |
c55e9279ac | ||
![]() |
3502480384 | ||
![]() |
caae713dd6 | ||
![]() |
df0198abfe | ||
![]() |
c20f4bf5fa | ||
![]() |
9740e93aeb | ||
![]() |
e7872aaa29 | ||
![]() |
037706552c | ||
![]() |
b881c6729b | ||
![]() |
66909aafb3 | ||
![]() |
cdfb5d56fc | ||
![]() |
d146ce9fb6 | ||
![]() |
cb59d60034 | ||
![]() |
1d9fe3553e | ||
![]() |
fe66c022ad | ||
![]() |
92ea131721 | ||
![]() |
dd7f67d10d | ||
![]() |
c1562b76b2 | ||
![]() |
32839f5252 | ||
![]() |
80b7cf6ff8 | ||
![]() |
128cc2eeb4 | ||
![]() |
037912ee89 | ||
![]() |
769bc6d3bf | ||
![]() |
084d6cb5d9 | ||
![]() |
5184713356 | ||
![]() |
2f1225bad3 | ||
![]() |
841f5a5a5b | ||
![]() |
0c6de5e972 | ||
![]() |
81dc61c55c | ||
![]() |
bd63b1ce70 | ||
![]() |
29faf114a7 | ||
![]() |
94ea8151d4 | ||
![]() |
66500ef5fb | ||
![]() |
979396bb1e | ||
![]() |
e177726387 | ||
![]() |
20e88fda50 | ||
![]() |
f252be9b6d | ||
![]() |
ee98159586 | ||
![]() |
c6443af29a | ||
![]() |
d73f56a7af | ||
![]() |
7c7f4308c5 | ||
![]() |
eab8c265f4 | ||
![]() |
80b9cd43b1 | ||
![]() |
af1f9e08ad | ||
![]() |
e3fd0af9c8 | ||
![]() |
27e23672c1 | ||
![]() |
b38e229359 | ||
![]() |
9a563f1425 | ||
![]() |
8b6f5953a7 | ||
![]() |
2d2a80c73d | ||
![]() |
4dfdd5d8e3 | ||
![]() |
1994ed3025 | ||
![]() |
aaa45846d3 | ||
![]() |
d7ffcb54eb | ||
![]() |
c33749e57a | ||
![]() |
e4107d8b4d | ||
![]() |
da5cb72d3a | ||
![]() |
c372bd5168 | ||
![]() |
cabf623131 | ||
![]() |
ffc240d5b6 | ||
![]() |
cc4522d9cd | ||
![]() |
5bf69dca76 | ||
![]() |
59dad12820 | ||
![]() |
007c836296 | ||
![]() |
3721bf9f6b | ||
![]() |
802949eba8 | ||
![]() |
24f35e433f | ||
![]() |
22664ee7b8 | ||
![]() |
6476cfcde5 | ||
![]() |
5bb347e884 | ||
![]() |
eb1251b919 | ||
![]() |
820144c40c | ||
![]() |
6034df0a78 | ||
![]() |
df4012e66d | ||
![]() |
c372f3071a | ||
![]() |
829c8b27b6 | ||
![]() |
fb3ac78bf9 | ||
![]() |
ffd9436e5c | ||
![]() |
bbb1344d79 | ||
![]() |
457785b286 | ||
![]() |
4847f834bd | ||
![]() |
53191ff1cf | ||
![]() |
ffdb6ffd69 | ||
![]() |
7560db856b | ||
![]() |
63d245ac48 | ||
![]() |
7ddd37be29 | ||
![]() |
a4d3a4a25e | ||
![]() |
58bd07628b | ||
![]() |
3569038493 | ||
![]() |
20c4ff823a | ||
![]() |
8a7448a5a1 | ||
![]() |
d23d8f901e | ||
![]() |
391f12eeab | ||
![]() |
d008988843 | ||
![]() |
dcacc7d7d5 | ||
![]() |
c4285961df | ||
![]() |
1038f656eb | ||
![]() |
8b06aa1146 | ||
![]() |
3c7236fe73 | ||
![]() |
36824379c3 | ||
![]() |
a0a37c19ff | ||
![]() |
1b5fe57a5e | ||
![]() |
5da31db0c7 | ||
![]() |
f8cea760b6 | ||
![]() |
5ef01ecdd1 | ||
![]() |
62aafe0ee7 | ||
![]() |
cf3f36ac52 | ||
![]() |
b88d2ecd77 | ||
![]() |
e691850a2b | ||
![]() |
d4bff8dee6 | ||
![]() |
187c350805 | ||
![]() |
96d1c26f90 | ||
![]() |
46a90749f8 | ||
![]() |
0c63a4bbda | ||
![]() |
e4696e0471 | ||
![]() |
8217dc5239 | ||
![]() |
2586abc0d3 | ||
![]() |
28f84ab3d9 | ||
![]() |
813b45aded | ||
![]() |
3a9b45e4f2 | ||
![]() |
b8e091233e | ||
![]() |
0edeefd977 | ||
![]() |
6ba53cf1ff | ||
![]() |
d7758eb7f4 | ||
![]() |
125336aeee | ||
![]() |
7cd1cf32ae | ||
![]() |
d099e353a4 | ||
![]() |
1e4a301c6e | ||
![]() |
f53b12d227 | ||
![]() |
e2562dcccf | ||
![]() |
7b69ae3738 | ||
![]() |
ab6df235d7 | ||
![]() |
52cd8f4b22 | ||
![]() |
e28318c271 | ||
![]() |
39ee833c29 | ||
![]() |
9019e2bc71 | ||
![]() |
9208bf5bf1 | ||
![]() |
f0f1698e46 | ||
![]() |
eccd7f1c98 | ||
![]() |
2587d82af8 | ||
![]() |
7ea121b115 | ||
![]() |
bb81fbbdfc | ||
![]() |
1a00a08b7d | ||
![]() |
90ea2a3411 | ||
![]() |
8fc6814b6d | ||
![]() |
ffced0ed9a | ||
![]() |
e7248d9af9 | ||
![]() |
6b1a04f59d | ||
![]() |
4905407092 | ||
![]() |
bd6ec10939 | ||
![]() |
e15e6735f1 | ||
![]() |
67afd6a462 | ||
![]() |
2e2b97c53b | ||
![]() |
a35df7fe1f | ||
![]() |
fbc8562779 | ||
![]() |
b549db959a | ||
![]() |
d5188ac68a | ||
![]() |
ada9444bf8 | ||
![]() |
acc52fd935 | ||
![]() |
1100ff1feb | ||
![]() |
c17fc3a869 | ||
![]() |
4dba697075 | ||
![]() |
e42d651d7e | ||
![]() |
4305eddb4f | ||
![]() |
c2dc44cfd1 | ||
![]() |
5fc14de32e | ||
![]() |
d245558fd5 | ||
![]() |
9d45370e8a | ||
![]() |
cc1cc61d36 | ||
![]() |
c6740a4908 | ||
![]() |
55114bcffe | ||
![]() |
4fa5dedc47 | ||
![]() |
5525ef2285 | ||
![]() |
a7ac969215 | ||
![]() |
329cb5a9f8 | ||
![]() |
d9b47b33f5 | ||
![]() |
3582ac9941 | ||
![]() |
2a127a57a7 | ||
![]() |
7059400020 | ||
![]() |
0b14ef82d4 | ||
![]() |
83953af53d | ||
![]() |
110cf25c6d | ||
![]() |
f2bf6072ec | ||
![]() |
5f9abe2e0e | ||
![]() |
ea65b672e7 | ||
![]() |
93c705fb31 | ||
![]() |
0724f623bb | ||
![]() |
82e549c0e9 | ||
![]() |
1aa15792b4 | ||
![]() |
ffb2b6bc04 | ||
![]() |
27f98bf22c | ||
![]() |
3978078710 | ||
![]() |
00a0698720 | ||
![]() |
4a24f58be2 | ||
![]() |
da14ce16ec | ||
![]() |
18e5abb9dd | ||
![]() |
1a75b76916 | ||
![]() |
53b56899a0 | ||
![]() |
804b23d390 | ||
![]() |
04eaf52b1d | ||
![]() |
dc7fef1064 | ||
![]() |
488c433555 | ||
![]() |
9c5dd024b1 | ||
![]() |
6e61adf3db | ||
![]() |
041bd63864 | ||
![]() |
a366482551 | ||
![]() |
a721084f6e | ||
![]() |
1b4187fa56 | ||
![]() |
cf7a60705e | ||
![]() |
349b05b9b7 | ||
![]() |
9fbacf377a | ||
![]() |
2da9e35cbc | ||
![]() |
8adc8fa2ba | ||
![]() |
9efa909dfc | ||
![]() |
7f21fdbe26 | ||
![]() |
f9c7fa92ea | ||
![]() |
e75a160d52 | ||
![]() |
170bd51387 | ||
![]() |
abcec1e2d3 | ||
![]() |
eeab646bfa | ||
![]() |
2c69144189 | ||
![]() |
f54ebec654 | ||
![]() |
2ce931cb7a | ||
![]() |
84eddd2ed2 | ||
![]() |
2042e1a4d5 | ||
![]() |
be14f0cc52 | ||
![]() |
edd9199be8 | ||
![]() |
bb094cc649 | ||
![]() |
dbaa6ed952 | ||
![]() |
8c94d894ab | ||
![]() |
ffc7eac4dc | ||
![]() |
555fd6d926 | ||
![]() |
c024ac8f0b | ||
![]() |
f00177c0cf | ||
![]() |
d0ad25745a | ||
![]() |
55be23a6da | ||
![]() |
75ba283572 | ||
![]() |
f7164d35d2 | ||
![]() |
4afbb0322b | ||
![]() |
7bce1ecc8a | ||
![]() |
bbce16d526 | ||
![]() |
c29fc39ef1 | ||
![]() |
8335c08782 | ||
![]() |
224d7ae133 | ||
![]() |
04bff00171 | ||
![]() |
f3e31baf04 | ||
![]() |
9b25a7cf77 | ||
![]() |
7a908ac07b | ||
![]() |
92901637ec | ||
![]() |
3590b663ed | ||
![]() |
a33bde9cc3 | ||
![]() |
ac50fdccfc | ||
![]() |
a0c6bf15e9 | ||
![]() |
a2852eb249 | ||
![]() |
f1e6d6b0a9 | ||
![]() |
116a33ba51 | ||
![]() |
a8ac115310 | ||
![]() |
1345b7c1d0 | ||
![]() |
d60a652259 | ||
![]() |
61a7cecb31 | ||
![]() |
192b7e0349 | ||
![]() |
80b60fc048 | ||
![]() |
b8d7b9520c | ||
![]() |
0305ce66b7 | ||
![]() |
474405ab90 | ||
![]() |
4415d3be1a | ||
![]() |
058c530787 | ||
![]() |
766d0dfd40 | ||
![]() |
ac31913a65 | ||
![]() |
d34ddf33db | ||
![]() |
eb4e09b0ca | ||
![]() |
ce085bf4f4 | ||
![]() |
990113f8e7 | ||
![]() |
aa022204ee | ||
![]() |
c1f23b566b | ||
![]() |
45f7cb8bda | ||
![]() |
bdb1f66ac9 | ||
![]() |
842157a6cc | ||
![]() |
a63cc01482 | ||
![]() |
1bbb6f3ff9 | ||
![]() |
93894247a4 | ||
![]() |
16bb5e2537 | ||
![]() |
d19a6e05b2 | ||
![]() |
86e85f9835 | ||
![]() |
cc145d20b0 | ||
![]() |
881d9040c4 | ||
![]() |
1e77ea0944 | ||
![]() |
140f0885b2 | ||
![]() |
83f71a6610 | ||
![]() |
271343a32d | ||
![]() |
48857b0030 | ||
![]() |
1fe7f5f4e6 | ||
![]() |
d5b1904ebb | ||
![]() |
b6b0e82dec | ||
![]() |
632b7b4afe | ||
![]() |
81b7b2c190 | ||
![]() |
460de7d301 | ||
![]() |
69022c6db7 | ||
![]() |
0ef3fa2703 | ||
![]() |
8da269de88 | ||
![]() |
93ce318259 | ||
![]() |
997928de91 | ||
![]() |
83d00a5913 | ||
![]() |
bf5d7c83af | ||
![]() |
c66a4d4097 | ||
![]() |
e112e86475 | ||
![]() |
e034b31d6b | ||
![]() |
18a4978456 | ||
![]() |
17464b10a4 | ||
![]() |
6fb3ecd414 | ||
![]() |
c214e4f037 | ||
![]() |
2ee05d9616 | ||
![]() |
f795ac02e3 | ||
![]() |
6e8235544c | ||
![]() |
6e35948276 | ||
![]() |
4da870fd19 | ||
![]() |
cd7ff685fb | ||
![]() |
1e4944d47e | ||
![]() |
e68135f59f | ||
![]() |
6408c5a747 | ||
![]() |
115fe954ac | ||
![]() |
3d243f7da5 | ||
![]() |
ea5615f236 | ||
![]() |
69da1c1d7c | ||
![]() |
e85fa4203e | ||
![]() |
506ca69917 | ||
![]() |
8ac0ecdf40 | ||
![]() |
dbd8115557 | ||
![]() |
74b4ea20bf | ||
![]() |
11fbaa4241 | ||
![]() |
8fd0d7c993 | ||
![]() |
1450d36377 | ||
![]() |
06358d0665 | ||
![]() |
2b3b86e281 | ||
![]() |
92e4bc752a | ||
![]() |
ffb2e05f21 | ||
![]() |
1e2665df19 | ||
![]() |
4d063e287e | ||
![]() |
44f02fb3ab | ||
![]() |
f6b3a0c6cf | ||
![]() |
8b36e918e8 | ||
![]() |
9044807121 | ||
![]() |
24264d3a07 | ||
![]() |
8bc70264ef | ||
![]() |
957c635fb7 | ||
![]() |
4027927c6e | ||
![]() |
c16b862200 | ||
![]() |
a96f608469 | ||
![]() |
e1f25604ec | ||
![]() |
0fe057b5c3 | ||
![]() |
be76dda21d | ||
![]() |
ecd124dd06 | ||
![]() |
4a8951c4ee | ||
![]() |
8afba7de85 | ||
![]() |
1ce42d3a2f | ||
![]() |
2f4d811db4 | ||
![]() |
61127f521d | ||
![]() |
62eefdbd6a | ||
![]() |
225e07eb64 | ||
![]() |
1207c81ab5 | ||
![]() |
565da65ccd | ||
![]() |
47fbd4cead | ||
![]() |
1b9b4199e8 | ||
![]() |
b5930ca958 | ||
![]() |
063e73c0d2 | ||
![]() |
423974f90d | ||
![]() |
d261318e1a | ||
![]() |
d33cc00fe9 | ||
![]() |
5fcf08a415 | ||
![]() |
3c06568ed5 | ||
![]() |
27582f6fd2 | ||
![]() |
e328ff4833 | ||
![]() |
68e35e631a | ||
![]() |
ad8c76602b | ||
![]() |
b5c98ba99e | ||
![]() |
711f8dc6af | ||
![]() |
5b41fb98de | ||
![]() |
6da625dbdb | ||
![]() |
e862c47b8b | ||
![]() |
4a8fe56470 | ||
![]() |
7c3e61950d | ||
![]() |
61f89eef2e | ||
![]() |
06de587ed2 | ||
![]() |
49beb3ac08 | ||
![]() |
403462fdb8 | ||
![]() |
f22d8e67b4 | ||
![]() |
e1c944d723 | ||
![]() |
83442b9849 | ||
![]() |
edd6ffeb01 | ||
![]() |
5a8881000c | ||
![]() |
70839368c1 | ||
![]() |
9d8a2a1a7a | ||
![]() |
17174016ec | ||
![]() |
ed37174a2b | ||
![]() |
8660148960 | ||
![]() |
67ca2dd0f4 | ||
![]() |
882f984b26 | ||
![]() |
6175cbcd99 | ||
![]() |
476d76a533 | ||
![]() |
df68bb4896 | ||
![]() |
815e647c97 | ||
![]() |
ad70ffba59 | ||
![]() |
0e95015410 | ||
![]() |
35f33f1614 | ||
![]() |
c9f8ddff65 | ||
![]() |
f5ae98aaf1 | ||
![]() |
b92dac72f3 | ||
![]() |
073e85381a | ||
![]() |
afc939708f | ||
![]() |
aabec8b993 | ||
![]() |
e5e2fbb16b | ||
![]() |
3dd379cdf1 | ||
![]() |
a20582aba4 | ||
![]() |
09cdbf1b76 | ||
![]() |
ca306e7cec | ||
![]() |
1bf34f7fe6 | ||
![]() |
4144d60017 | ||
![]() |
7265682a4d | ||
![]() |
08c62a6bf1 | ||
![]() |
d61f1cd035 | ||
![]() |
1063feb33b | ||
![]() |
79f3c1ac8f | ||
![]() |
cdb9a6ff7e | ||
![]() |
a59148dfeb | ||
![]() |
a5c03b763a | ||
![]() |
3670d82f1c | ||
![]() |
07e46837d9 | ||
![]() |
fa21e262c7 | ||
![]() |
93934c7992 | ||
![]() |
73edd42774 | ||
![]() |
ab03ad54aa | ||
![]() |
2e571ac950 | ||
![]() |
6c15d65107 | ||
![]() |
e5af0597a6 | ||
![]() |
74117453b5 | ||
![]() |
5611b30022 | ||
![]() |
ede9dcd18f | ||
![]() |
d3b56a5d94 | ||
![]() |
f5d4334963 | ||
![]() |
5c769632e8 | ||
![]() |
373505f483 | ||
![]() |
a2cad40f91 | ||
![]() |
4328762076 | ||
![]() |
c2f6f07776 | ||
![]() |
5ab77c7452 | ||
![]() |
e94a73553d | ||
![]() |
577fd71472 | ||
![]() |
e5582694c0 | ||
![]() |
768136e493 | ||
![]() |
753cb3580e | ||
![]() |
60b050b82a | ||
![]() |
ad91a8cd5e | ||
![]() |
02f79fc94b | ||
![]() |
230a73fad2 | ||
![]() |
d94dd486fe | ||
![]() |
6ecc39b816 | ||
![]() |
9c240df9db | ||
![]() |
a918bf3a95 | ||
![]() |
9434ae267f | ||
![]() |
94187d215a | ||
![]() |
ef2f5d2978 | ||
![]() |
62671e0f56 | ||
![]() |
93869f77a0 | ||
![]() |
8282d135cc | ||
![]() |
9acc78c81d | ||
![]() |
3642469630 | ||
![]() |
34cd20339c | ||
![]() |
7548f44047 | ||
![]() |
7cf55ef695 | ||
![]() |
543250da13 | ||
![]() |
69e55d7316 | ||
![]() |
158411e918 | ||
![]() |
3f873002c4 | ||
![]() |
818f4e5973 | ||
![]() |
c8d6e512d2 | ||
![]() |
a2423b8499 | ||
![]() |
49acdac776 | ||
![]() |
7e1587faa2 | ||
![]() |
84a6ed8e80 | ||
![]() |
654420e351 | ||
![]() |
651915f31c | ||
![]() |
d9db1b84fe | ||
![]() |
bd03f071c6 | ||
![]() |
eb6ac68d5c | ||
![]() |
848e6ebd83 | ||
![]() |
f76524fc9f | ||
![]() |
b95532b68b | ||
![]() |
d002d4c06f | ||
![]() |
7c03cc622c | ||
![]() |
cebfd84416 | ||
![]() |
12995e280e | ||
![]() |
4ae6d44efc | ||
![]() |
01e1878900 | ||
![]() |
df9ad82336 | ||
![]() |
c183fd5e35 | ||
![]() |
820d07f309 | ||
![]() |
f4e3c04bbf | ||
![]() |
540d6e9dbb | ||
![]() |
79a3a2befd | ||
![]() |
08a0fd5420 | ||
![]() |
92d6bc6875 | ||
![]() |
fb5d20c4f8 | ||
![]() |
65e3122f52 | ||
![]() |
be874e3c70 | ||
![]() |
beae845281 | ||
![]() |
6f64dac262 | ||
![]() |
cd2d25cf87 | ||
![]() |
b8b2f37e7b | ||
![]() |
00152358de | ||
![]() |
a2784be4d6 | ||
![]() |
ad7a57103d | ||
![]() |
19b24b276d | ||
![]() |
23750357e2 | ||
![]() |
07284f380f | ||
![]() |
e60401278f | ||
![]() |
24c474a9ec | ||
![]() |
8fd3781ef5 | ||
![]() |
c85f2494a8 | ||
![]() |
6c2fa7a382 | ||
![]() |
45689fd879 | ||
![]() |
45a2cfb01b | ||
![]() |
c4bb6c900c | ||
![]() |
f7c042fc77 | ||
![]() |
b20dc9fe2b | ||
![]() |
a030e05993 | ||
![]() |
648b03f811 | ||
![]() |
e57e321d33 | ||
![]() |
b6e53c7b1b | ||
![]() |
1c3bfd949b | ||
![]() |
6401c9aaaa | ||
![]() |
c02adbb8e1 | ||
![]() |
88e64dbfae | ||
![]() |
afd48b9e08 | ||
![]() |
db0ab9a0b3 | ||
![]() |
556e4bd74d | ||
![]() |
d439c4f215 | ||
![]() |
a9f2e1482c | ||
![]() |
2c26fb0d76 | ||
![]() |
18dde97c8c | ||
![]() |
85bc6f5301 | ||
![]() |
8f364b9a95 | ||
![]() |
ee6c5632ac | ||
![]() |
cc81a0e8da | ||
![]() |
262652992d | ||
![]() |
eb63825dfd | ||
![]() |
c49017c6f1 | ||
![]() |
7d08bd3142 | ||
![]() |
f12c241dca | ||
![]() |
cedc9dd175 | ||
![]() |
669e708b70 | ||
![]() |
e76a483931 | ||
![]() |
c0437d2de8 | ||
![]() |
37a8043202 | ||
![]() |
f4c69d4045 | ||
![]() |
a3606d9e4d | ||
![]() |
805f1c0e39 | ||
![]() |
7430a8ca40 | ||
![]() |
1776e2edcc | ||
![]() |
baf9aaf26c | ||
![]() |
4864b07e13 | ||
![]() |
13c919773e | ||
![]() |
ed3a4fb8d4 | ||
![]() |
df3e826d0a | ||
![]() |
a9e7d489b8 | ||
![]() |
da6b549f8b | ||
![]() |
76e07a9089 | ||
![]() |
4a590d1497 | ||
![]() |
82e1508d6f | ||
![]() |
400f08db9d | ||
![]() |
e48b650caa | ||
![]() |
d9f595283a | ||
![]() |
85fd14f47f | ||
![]() |
b7adaafb3e | ||
![]() |
d0bba87cdd | ||
![]() |
2cc75d4bbd | ||
![]() |
24bd591faa | ||
![]() |
2e9ccd0623 | ||
![]() |
7b49c82210 | ||
![]() |
d3284f1604 | ||
![]() |
3279697128 | ||
![]() |
60cfab995f | ||
![]() |
8ec18bdb2c | ||
![]() |
3c3cd65235 | ||
![]() |
7ac75de19d | ||
![]() |
fae39e1ab4 | ||
![]() |
3732139fc3 | ||
![]() |
0a2737dc77 | ||
![]() |
481971928c | ||
![]() |
020197718f | ||
![]() |
a0c77c04a5 | ||
![]() |
620ee9719f | ||
![]() |
c0d02d9935 | ||
![]() |
01356d23e5 | ||
![]() |
8b73c2bcff | ||
![]() |
5a771dbe2f | ||
![]() |
9ba5b644cf | ||
![]() |
f76f0c3787 | ||
![]() |
01abd6a705 | ||
![]() |
44e2b5d945 | ||
![]() |
82bbe5d1a6 | ||
![]() |
a1d71d31e8 | ||
![]() |
766e0b685d | ||
![]() |
58f5e4702b | ||
![]() |
d9906756cf | ||
![]() |
9a45ebd98b | ||
![]() |
7f9ff9d0e7 | ||
![]() |
8c763fcf43 | ||
![]() |
6dd4456b11 | ||
![]() |
c30c47d291 | ||
![]() |
d8c9662302 | ||
![]() |
ec5e819b16 | ||
![]() |
55e50ad979 | ||
![]() |
99ecb166d3 | ||
![]() |
cdeae7e72f | ||
![]() |
fbf79755d7 | ||
![]() |
78bd21b7cf | ||
![]() |
88c7c29954 | ||
![]() |
d4dde89ea6 | ||
![]() |
774bf35fab | ||
![]() |
1a2db7fb11 | ||
![]() |
da3223ac92 | ||
![]() |
b0fed5a48d | ||
![]() |
43132dab85 | ||
![]() |
badd327360 | ||
![]() |
9a6bfc6614 | ||
![]() |
79914fb56b | ||
![]() |
75a792eb6f | ||
![]() |
23f112602c | ||
![]() |
639a3aa832 | ||
![]() |
79a8c5ceae | ||
![]() |
97a2f4449d | ||
![]() |
7f42d15175 | ||
![]() |
ef9c8e910c | ||
![]() |
a1b33da9ca | ||
![]() |
1741059cf6 | ||
![]() |
1f137735e1 | ||
![]() |
a186972f09 | ||
![]() |
751628401e | ||
![]() |
403b1802ec | ||
![]() |
9165cbf7f6 | ||
![]() |
bad405bea9 | ||
![]() |
4f9a95b011 | ||
![]() |
903e641457 | ||
![]() |
f34b9399cc | ||
![]() |
7d0d96f940 | ||
![]() |
27196a21ae | ||
![]() |
ea0381fa09 | ||
![]() |
3423589ba1 | ||
![]() |
1f9286d39e | ||
![]() |
93b8e66b5d | ||
![]() |
a1716de683 | ||
![]() |
ccf7916257 | ||
![]() |
d86adfa1b1 | ||
![]() |
648f3f978a | ||
![]() |
5e4b8bd67c | ||
![]() |
64ef690432 | ||
![]() |
41991b5982 | ||
![]() |
01da222d67 | ||
![]() |
518eee05c2 | ||
![]() |
1dbfa29a1e | ||
![]() |
6bac4741f6 | ||
![]() |
a0266dac6f | ||
![]() |
ce977a7809 | ||
![]() |
8644a83ed9 | ||
![]() |
7b45245b1d | ||
![]() |
f04f4e4a1a | ||
![]() |
b07f1b3bd3 | ||
![]() |
0e7486d7b4 | ||
![]() |
6c0afb87b9 | ||
![]() |
e5750b368e | ||
![]() |
ef76f923ad | ||
![]() |
2c04ae084c | ||
![]() |
91dc58d967 | ||
![]() |
0e2abe74d5 | ||
![]() |
fea444925e | ||
![]() |
0998429b07 | ||
![]() |
597eb1779c | ||
![]() |
9ae3a7dbff | ||
![]() |
3519e845a3 | ||
![]() |
29c049612a | ||
![]() |
ed48185732 | ||
![]() |
f431bbfca2 | ||
![]() |
8b29900be4 | ||
![]() |
6f8a4f8354 | ||
![]() |
def34f0e42 | ||
![]() |
e25a49f804 | ||
![]() |
b820351f64 | ||
![]() |
0eb009496e | ||
![]() |
2c2498b658 | ||
![]() |
a1d988fed5 | ||
![]() |
b0c50b7a59 | ||
![]() |
1a2b404076 | ||
![]() |
2d066c34fd | ||
![]() |
7a1ed64985 | ||
![]() |
1b449585f7 | ||
![]() |
032d41dbb8 | ||
![]() |
3a7569e3ea | ||
![]() |
d444930494 | ||
![]() |
6045a6bfb3 | ||
![]() |
f3f543b31e | ||
![]() |
0fea4262ea | ||
![]() |
ef1c4368d0 | ||
![]() |
4b7ec4a32a | ||
![]() |
2229ad8d8e | ||
![]() |
61aff9f49a | ||
![]() |
67235c4214 | ||
![]() |
48def71d0c | ||
![]() |
a00eee1bbe | ||
![]() |
12e8bb6ddc | ||
![]() |
c8c20fff71 | ||
![]() |
75a18b5ffe | ||
![]() |
06a690a259 | ||
![]() |
52feabbe76 | ||
![]() |
14c9e9a9cc | ||
![]() |
a22ca228cc | ||
![]() |
d0666a5eb6 | ||
![]() |
931d49560a | ||
![]() |
2a4e435228 | ||
![]() |
3655827ef2 | ||
![]() |
c5046b9c91 | ||
![]() |
4598031dd2 | ||
![]() |
12e0e1a16b | ||
![]() |
5e9266ba90 | ||
![]() |
0d448b8221 | ||
![]() |
e6c95f0a2a | ||
![]() |
63b58edda1 | ||
![]() |
af9632519c | ||
![]() |
d367fb938d | ||
![]() |
77f2a339e1 | ||
![]() |
4190027a78 | ||
![]() |
ef48a8c4d9 | ||
![]() |
829b225053 | ||
![]() |
747a6e94e6 | ||
![]() |
cebc798e72 | ||
![]() |
7c485c6a8b | ||
![]() |
e2e8c4b5dc | ||
![]() |
675c0112ac | ||
![]() |
4dd2c15775 | ||
![]() |
9f6decdbc1 | ||
![]() |
fc07e23ff8 | ||
![]() |
4ea328b9f2 | ||
![]() |
84a2fc382b | ||
![]() |
098714b3c4 | ||
![]() |
cf2c94d974 | ||
![]() |
657102e938 | ||
![]() |
44e7585bf8 | ||
![]() |
94488fa2ea | ||
![]() |
a2c60a4911 | ||
![]() |
ee9c4abd08 | ||
![]() |
b5b1c932c7 | ||
![]() |
b8f04983e1 | ||
![]() |
90807dd973 | ||
![]() |
ef974114ea | ||
![]() |
f6e1fecdf8 | ||
![]() |
94e8b2becf | ||
![]() |
a6ca6701a0 | ||
![]() |
c4edb9724b | ||
![]() |
b5c669bdff | ||
![]() |
e449dce65c | ||
![]() |
73ce9a5ecc | ||
![]() |
671f680bb3 | ||
![]() |
dfff19ffbf | ||
![]() |
a4abdf9fa6 | ||
![]() |
6c57bb0553 | ||
![]() |
d385b9e708 | ||
![]() |
c2ae1ee891 | ||
![]() |
67147570e9 | ||
![]() |
fb3e6b7e35 | ||
![]() |
cf28d4586d | ||
![]() |
f65eb5eeea | ||
![]() |
26fa9bd87e | ||
![]() |
0016d9a638 | ||
![]() |
a88b9737ff | ||
![]() |
df9ac58d05 | ||
![]() |
357406d801 | ||
![]() |
19a78f63f4 | ||
![]() |
c7ec6a72cd | ||
![]() |
e68b07dbce | ||
![]() |
e20610ab80 | ||
![]() |
1ca0c46333 | ||
![]() |
e510875f64 | ||
![]() |
f52a10b061 | ||
![]() |
7d382a2bfd | ||
![]() |
09bec1c4fe | ||
![]() |
ff28b0a005 | ||
![]() |
8a03bd72ae | ||
![]() |
a249f8736a | ||
![]() |
f0e1fc5aad | ||
![]() |
f09adf0014 | ||
![]() |
c6ac64ed2d | ||
![]() |
04dc68f5f6 | ||
![]() |
92be051450 | ||
![]() |
5c25208fb5 | ||
![]() |
779c258e27 | ||
![]() |
962dfad216 | ||
![]() |
f7a710e55b | ||
![]() |
814a50e36f | ||
![]() |
230465b946 | ||
![]() |
d11a67702e | ||
![]() |
4e12e228cb | ||
![]() |
4a94aeba49 | ||
![]() |
14aa831169 | ||
![]() |
295d23ccf3 | ||
![]() |
75d904ed01 | ||
![]() |
aebcf6ff82 | ||
![]() |
8c2ece3bca | ||
![]() |
80a90a6221 | ||
![]() |
f81d5e4bd6 | ||
![]() |
2324c90232 | ||
![]() |
2f65fdbc76 | ||
![]() |
59ff08174f | ||
![]() |
2f4149c7d0 | ||
![]() |
b84e359770 | ||
![]() |
fb4275648c | ||
![]() |
475ccfa8dc | ||
![]() |
267c24c8ef | ||
![]() |
06a9d9fc30 | ||
![]() |
1383ca19b5 | ||
![]() |
4c3ff2abab | ||
![]() |
7c6ef18e4f | ||
![]() |
f8856467d5 | ||
![]() |
3bd84b8d27 | ||
![]() |
bc8b5774ac | ||
![]() |
8009b0485e | ||
![]() |
8742a56b3e | ||
![]() |
a792bcdafe | ||
![]() |
167d1ce97b | ||
![]() |
695cd95657 | ||
![]() |
44ce01a70b | ||
![]() |
e4b4c67637 | ||
![]() |
422e77ae40 | ||
![]() |
5ae6c8f8fa | ||
![]() |
54656b331a | ||
![]() |
9047b627a4 | ||
![]() |
6645a3be40 | ||
![]() |
c2189b4ecd | ||
![]() |
e3fab66dfb | ||
![]() |
5867f08bf1 | ||
![]() |
a06fa2de67 | ||
![]() |
c9b2cf6043 | ||
![]() |
35396d2977 | ||
![]() |
3bff743d9f | ||
![]() |
5a878f829b | ||
![]() |
16ec0f151a | ||
![]() |
26dc6e90ea | ||
![]() |
94c749fd5a | ||
![]() |
7b80ed0807 | ||
![]() |
98b7e8b10a | ||
![]() |
c42f1ad4c7 | ||
![]() |
9d8de7fc15 | ||
![]() |
70883086b7 | ||
![]() |
9a08dfc7d4 | ||
![]() |
3e43b36a9d | ||
![]() |
352ee2f2fd | ||
![]() |
78aa5c3dfa | ||
![]() |
613323b5fb | ||
![]() |
6c4b01db8a | ||
![]() |
d06897a635 | ||
![]() |
1600bb0aaf | ||
![]() |
b5c9c98a8b | ||
![]() |
e4e18a416f | ||
![]() |
01cc0e6def | ||
![]() |
a3ec1af205 | ||
![]() |
d571d691a7 | ||
![]() |
ea3d39b50e | ||
![]() |
2e580304f9 | ||
![]() |
fb221a8dc0 | ||
![]() |
459e1ed345 | ||
![]() |
6680c244f5 | ||
![]() |
06423964ec | ||
![]() |
5492e9028d | ||
![]() |
474390fa00 | ||
![]() |
81d3723084 | ||
![]() |
32e798967e | ||
![]() |
060c9ab679 | ||
![]() |
acd9c32a9f | ||
![]() |
b8581b0278 | ||
![]() |
917faecdcb | ||
![]() |
78f0325398 | ||
![]() |
f6edaa56a6 | ||
![]() |
51fee28bf4 | ||
![]() |
e8a3e92ceb | ||
![]() |
5df3839b7a | ||
![]() |
8dcb441f44 | ||
![]() |
a347cf625a | ||
![]() |
46f49c7a12 | ||
![]() |
99701c947e | ||
![]() |
1baae1b81e | ||
![]() |
7d20f0e9a6 | ||
![]() |
fbad22a1cd | ||
![]() |
5af2f62c04 | ||
![]() |
4a4a03858e | ||
![]() |
1efe049959 | ||
![]() |
2393148908 | ||
![]() |
6819b57353 | ||
![]() |
88b5e60807 | ||
![]() |
c7594b3ef0 | ||
![]() |
b210870f48 | ||
![]() |
a26a8bd79c | ||
![]() |
9307a6915f | ||
![]() |
5d6019a962 | ||
![]() |
85ef2d8d0b | ||
![]() |
c2c7cc032b | ||
![]() |
e4911e9391 | ||
![]() |
b11e1ee92d | ||
![]() |
5027d00c10 | ||
![]() |
69ddeceb49 | ||
![]() |
82698672bb | ||
![]() |
9cec284947 | ||
![]() |
dc501d1902 | ||
![]() |
100e504b7f | ||
![]() |
eb5df1aa37 | ||
![]() |
8a745c5e81 | ||
![]() |
bf0a157c5d | ||
![]() |
f49818be06 | ||
![]() |
1ad171dfe5 | ||
![]() |
2a78570d65 | ||
![]() |
546066d677 | ||
![]() |
7a112f2523 | ||
![]() |
3234596974 | ||
![]() |
e86444e5fb | ||
![]() |
5820d49cd4 | ||
![]() |
36c11ad9de | ||
![]() |
019a4b20ae | ||
![]() |
433ee08687 | ||
![]() |
7858d969d8 | ||
![]() |
8119551049 | ||
![]() |
061489f03a | ||
![]() |
d92aa05b5c | ||
![]() |
f7a74d960e | ||
![]() |
95a0e51b41 | ||
![]() |
110e45e187 | ||
![]() |
534aaf2b2a | ||
![]() |
4cc20fdd05 | ||
![]() |
f3fae192a8 | ||
![]() |
7d59a8a0ad | ||
![]() |
8da387a38a | ||
![]() |
ff6fc44215 | ||
![]() |
62391a895a | ||
![]() |
9bcdd7d18f | ||
![]() |
5c4f7bfe8b | ||
![]() |
0b7f134021 | ||
![]() |
378a42889f | ||
![]() |
f824950552 | ||
![]() |
3d2d11f169 | ||
![]() |
181aea737d | ||
![]() |
1ab66e5767 | ||
![]() |
aab2682f9a | ||
![]() |
55d332bcc8 | ||
![]() |
ee702f4071 | ||
![]() |
a08c2161a7 | ||
![]() |
f89df6e70c | ||
![]() |
0e36a01354 | ||
![]() |
c39ad7dfbb | ||
![]() |
b92ae706e9 | ||
![]() |
250d28e870 | ||
![]() |
19f65c8510 | ||
![]() |
f70b49882f | ||
![]() |
a7b092a305 | ||
![]() |
daa73a3f3c | ||
![]() |
6997261c6b | ||
![]() |
0b51afe87a | ||
![]() |
6cfb5cb14c | ||
![]() |
8567d6034f | ||
![]() |
e06368f8cd | ||
![]() |
4b37a4706f | ||
![]() |
7b1564947d | ||
![]() |
2b298766c9 | ||
![]() |
10664d723b | ||
![]() |
c012208a8f | ||
![]() |
0953896d2d | ||
![]() |
cf9e89d0ae | ||
![]() |
48dd01b0bb | ||
![]() |
7247efe055 | ||
![]() |
8def3758e4 | ||
![]() |
1851ab6f5f | ||
![]() |
289b052338 | ||
![]() |
26147f5ae0 | ||
![]() |
ae01f1071a | ||
![]() |
dcdf5dcd09 | ||
![]() |
c59a6d0f51 | ||
![]() |
2cd936318d | ||
![]() |
2f38857681 | ||
![]() |
39505ae1ff | ||
![]() |
44ee0633f2 | ||
![]() |
b52d2768b0 | ||
![]() |
cf24b870b1 | ||
![]() |
69cffce7dc | ||
![]() |
a14979375b | ||
![]() |
40ef4a16b1 | ||
![]() |
f5652a667b | ||
![]() |
3b2c865a58 | ||
![]() |
db0e683d01 | ||
![]() |
e29a9e0394 | ||
![]() |
edf65f4f52 | ||
![]() |
98677fd602 | ||
![]() |
61a4f76c8d | ||
![]() |
856a826eea | ||
![]() |
387ef513d6 | ||
![]() |
2858dbf57f | ||
![]() |
350a2b8bbc | ||
![]() |
c9093c9972 | ||
![]() |
d1ad31696e | ||
![]() |
f49311ef9e | ||
![]() |
678e529efc | ||
![]() |
6ddb430fef | ||
![]() |
74d1f88146 | ||
![]() |
7842c55da3 | ||
![]() |
f5beac2afa | ||
![]() |
8a23f28dfa | ||
![]() |
9c4886e746 | ||
![]() |
e0bcd5d722 | ||
![]() |
ba854e7d85 | ||
![]() |
4ded34ebc9 | ||
![]() |
e918a86028 | ||
![]() |
24234bf718 | ||
![]() |
ec99339140 | ||
![]() |
03dedfc871 | ||
![]() |
9e86a7b357 | ||
![]() |
6a32417957 | ||
![]() |
97a7be7dfa | ||
![]() |
fa86f956ef | ||
![]() |
a9acff5294 | ||
![]() |
ad5b61de50 | ||
![]() |
f53b815855 | ||
![]() |
bf8a9dc20d | ||
![]() |
08716c35fd | ||
![]() |
fd81bab906 | ||
![]() |
1cf55c14b0 | ||
![]() |
8b47159788 | ||
![]() |
2eeaf4d80c | ||
![]() |
4d89d26a1c | ||
![]() |
0cc14cee4d | ||
![]() |
a20a9c505d | ||
![]() |
913738444e | ||
![]() |
8ee30179ea | ||
![]() |
cb2469322b | ||
![]() |
94aa6673ca | ||
![]() |
4b2b2d16b8 | ||
![]() |
4cd5d3b3b5 | ||
![]() |
e48e50c6ff | ||
![]() |
01189376e2 | ||
![]() |
60195cf2dc | ||
![]() |
15ef273141 | ||
![]() |
eed6da538a | ||
![]() |
d3e8993e22 | ||
![]() |
8a8926c5e8 | ||
![]() |
f9d0ee824b | ||
![]() |
af099737ab | ||
![]() |
9ffde5ab37 | ||
![]() |
272ddf9f01 | ||
![]() |
259c84e99a | ||
![]() |
7391288668 | ||
![]() |
7734aee7ad | ||
![]() |
9f855b9679 | ||
![]() |
aedbecd673 | ||
![]() |
83c5a4cd2f | ||
![]() |
9c61c2882f | ||
![]() |
e0dd9c3618 | ||
![]() |
4921c44d0a | ||
![]() |
3161f104c7 | ||
![]() |
898f5f4b51 | ||
![]() |
3ee3fdca91 | ||
![]() |
488f7ed886 | ||
![]() |
51e5aee830 | ||
![]() |
af13bea2b8 | ||
![]() |
cdf0b353db | ||
![]() |
48504ed5e2 | ||
![]() |
4d4d1e0ee5 | ||
![]() |
c1d36cad46 | ||
![]() |
aad2eb31fc | ||
![]() |
1bd7824f24 | ||
![]() |
912463ed6a | ||
![]() |
dda2473d35 | ||
![]() |
94923ae898 | ||
![]() |
f1fde07eb9 | ||
![]() |
a1ddd88208 | ||
![]() |
ee6a9b981a | ||
![]() |
9879c7af59 | ||
![]() |
fa4c52e499 | ||
![]() |
d5484808a7 | ||
![]() |
1c83391948 | ||
![]() |
59d1b8e131 | ||
![]() |
859822ff05 | ||
![]() |
3acc7d0914 | ||
![]() |
b077ef9150 | ||
![]() |
e2ce5ae222 | ||
![]() |
73cabcb6ae | ||
![]() |
fbdf2bed49 | ||
![]() |
33d01fb694 | ||
![]() |
ab2e43d052 | ||
![]() |
0c24fbdb06 | ||
![]() |
eb25998e72 | ||
![]() |
eafd2aee93 | ||
![]() |
a6f3d740a2 | ||
![]() |
19a6f61b44 | ||
![]() |
58e0f1e6c3 | ||
![]() |
96ff2d43c0 | ||
![]() |
1b00b7e8df | ||
![]() |
7284ceb90c | ||
![]() |
24ec448b7f | ||
![]() |
ed5a2f400d | ||
![]() |
9596616b42 | ||
![]() |
8d38fb511b | ||
![]() |
5a2cbbb731 | ||
![]() |
32d6f85649 | ||
![]() |
a2b47e5749 | ||
![]() |
14d4062f4a | ||
![]() |
67972c5e84 | ||
![]() |
3467ac18cc | ||
![]() |
cabf27424f | ||
![]() |
162e955bd6 | ||
![]() |
57d761b8a2 | ||
![]() |
8b2023225c | ||
![]() |
f8f2b541db | ||
![]() |
9d645ad5cd | ||
![]() |
610d366bdb | ||
![]() |
64c46562d3 | ||
![]() |
87d6ade06d | ||
![]() |
4a009515c1 | ||
![]() |
6497857495 | ||
![]() |
5a324c01de | ||
![]() |
17279de4a3 | ||
![]() |
34a7a62c35 | ||
![]() |
2305cc61fd | ||
![]() |
2f677c98f8 | ||
![]() |
3fda053606 | ||
![]() |
6d855ec06c | ||
![]() |
23cc62fe7c | ||
![]() |
26ea67d211 | ||
![]() |
d43cd9fa54 | ||
![]() |
6f337b5425 | ||
![]() |
d104a5fe75 | ||
![]() |
cdd69c6842 | ||
![]() |
4a3a9067d4 | ||
![]() |
1aecb2293a | ||
![]() |
ad8fd91b7a | ||
![]() |
1f5a3a4445 | ||
![]() |
be363e0b46 | ||
![]() |
a104cd6dae | ||
![]() |
e287282782 | ||
![]() |
8b06d10415 | ||
![]() |
1a153487c3 | ||
![]() |
01b2499915 | ||
![]() |
9f43d31bf5 | ||
![]() |
a318beded4 | ||
![]() |
5f4b528e6b | ||
![]() |
f759b0ada1 | ||
![]() |
7d89fa27a8 | ||
![]() |
10ec92f7c6 | ||
![]() |
58d2f317a0 | ||
![]() |
34b094561f | ||
![]() |
91155444c0 | ||
![]() |
7f71ac7e0a | ||
![]() |
e5fc59a4c6 | ||
![]() |
549a9ab472 | ||
![]() |
09720dcf42 | ||
![]() |
ec044affd4 | ||
![]() |
af39945009 | ||
![]() |
78a50d0237 | ||
![]() |
861d279b08 | ||
![]() |
eb1a32fc90 | ||
![]() |
4610a6615c | ||
![]() |
4cb8a8d389 | ||
![]() |
a71823dc04 | ||
![]() |
d41ada6b66 | ||
![]() |
fdfe2cd64f | ||
![]() |
7b51c6f5cc | ||
![]() |
be7f07ad12 | ||
![]() |
830db11b41 | ||
![]() |
53bcd33e1d | ||
![]() |
e3d596c9fa | ||
![]() |
ecd6ad6930 | ||
![]() |
c36073b40e | ||
![]() |
afe0d16797 | ||
![]() |
977fcc0632 | ||
![]() |
94b57d232d | ||
![]() |
7cdedb2ec0 | ||
![]() |
676324805e | ||
![]() |
7d74a7b027 | ||
![]() |
9d5eb864d1 | ||
![]() |
86a482e032 | ||
![]() |
c43c7be86c | ||
![]() |
c58462f154 | ||
![]() |
31d3e3b2b6 | ||
![]() |
fb2582e53b | ||
![]() |
d807613117 | ||
![]() |
6d922d00c3 | ||
![]() |
61ea84093b | ||
![]() |
e76d6a481f | ||
![]() |
c1357717d9 | ||
![]() |
ca5145c210 | ||
![]() |
1a272fd276 | ||
![]() |
952260b423 | ||
![]() |
caa967105c | ||
![]() |
d565e4be20 | ||
![]() |
85dd005abc | ||
![]() |
021c57205f | ||
![]() |
261a501afc | ||
![]() |
9a38a101d2 | ||
![]() |
4665c5cf1a | ||
![]() |
bd52a5e6c1 | ||
![]() |
f98e5a03de | ||
![]() |
2217c69757 | ||
![]() |
5a4df56836 | ||
![]() |
3ab7c8bcc3 | ||
![]() |
8f25acd0f3 | ||
![]() |
999f1932cc | ||
![]() |
69940a8ab9 | ||
![]() |
13158e3cdf | ||
![]() |
f06589c913 | ||
![]() |
2735b680b9 | ||
![]() |
5f1d4ce433 | ||
![]() |
25f87607aa | ||
![]() |
f81fb6af44 | ||
![]() |
bb0a5186d6 | ||
![]() |
baad907422 | ||
![]() |
1022fc0060 | ||
![]() |
3a22d798f8 | ||
![]() |
71ea430c62 | ||
![]() |
0d2125e737 | ||
![]() |
02f4006153 | ||
![]() |
b25668b5b7 | ||
![]() |
bb3080e829 | ||
![]() |
bd85e95398 | ||
![]() |
22cc194ed8 | ||
![]() |
79b71228c1 | ||
![]() |
fd515d807c | ||
![]() |
4f4c121d9b | ||
![]() |
72e1ab47fc | ||
![]() |
3575084640 | ||
![]() |
1e01903072 | ||
![]() |
3672856ab4 | ||
![]() |
86d8736dcc | ||
![]() |
2923f56561 | ||
![]() |
4274f49ada | ||
![]() |
a4b27ff031 | ||
![]() |
f49b6fa79f | ||
![]() |
7b854a190e | ||
![]() |
947d1ffbb3 | ||
![]() |
de35848500 | ||
![]() |
1ae219025a | ||
![]() |
e8b2dd6698 | ||
![]() |
c0074f95b1 | ||
![]() |
a79ce1c35e | ||
![]() |
1eb69f7075 | ||
![]() |
a86935a42f | ||
![]() |
1674bd753e | ||
![]() |
6b9a55e62d | ||
![]() |
c578ddeb1a | ||
![]() |
8ef7188dae | ||
![]() |
738ec92b8e | ||
![]() |
be9e26b4a3 | ||
![]() |
b345c227b2 | ||
![]() |
c7e95c8dec | ||
![]() |
3a4e3d3f51 | ||
![]() |
8fd2efa2fa | ||
![]() |
97378998a5 | ||
![]() |
79f1aa0e1b | ||
![]() |
fb5a6a7d71 | ||
![]() |
7d1c5f4a2b | ||
![]() |
6b6995bb0b | ||
![]() |
27c658922e | ||
![]() |
1b0fd76b45 | ||
![]() |
35954cdc90 | ||
![]() |
46e93bea09 | ||
![]() |
cbc6a0296b | ||
![]() |
cc63bef179 | ||
![]() |
cbcfa156c4 | ||
![]() |
fa912aeb84 | ||
![]() |
4a12e1059a | ||
![]() |
9a5e2ae768 | ||
![]() |
f9cd051209 | ||
![]() |
e0545bf0bc | ||
![]() |
03bc38f7e3 | ||
![]() |
4e23a4e08e | ||
![]() |
d817d64c65 | ||
![]() |
8a29ec67ac | ||
![]() |
6722b0224a | ||
![]() |
8eb225bdec | ||
![]() |
a7df76a275 | ||
![]() |
efae8f3369 | ||
![]() |
a11e6c0b77 | ||
![]() |
1bb0b38868 | ||
![]() |
8cafa8578f | ||
![]() |
b74ea47650 | ||
![]() |
2dc230a68b | ||
![]() |
4df1641689 | ||
![]() |
5ef0b96d5c | ||
![]() |
d979b5f2b9 | ||
![]() |
1a61bdb302 | ||
![]() |
e8545dd2bc | ||
![]() |
2f2ebb37e4 | ||
![]() |
522f0dac16 | ||
![]() |
cd5ae944ec | ||
![]() |
42a86fe0d4 | ||
![]() |
e928b9c434 | ||
![]() |
fb55d9e9d1 | ||
![]() |
74e7e5a291 | ||
![]() |
6c58b8cc4b | ||
![]() |
2b3d11a7a5 | ||
![]() |
9950208d06 | ||
![]() |
a67e16d1b7 | ||
![]() |
c98a22e065 | ||
![]() |
8f9d1bcfe0 | ||
![]() |
a7a2fd1d5b | ||
![]() |
d496417deb | ||
![]() |
f6e30edbc4 | ||
![]() |
45ed68006f | ||
![]() |
dcb0d8b00e | ||
![]() |
116bb6e1b9 | ||
![]() |
9c6dde5d22 | ||
![]() |
cb635dcd5a | ||
![]() |
eff3330e75 | ||
![]() |
fc8a13df5a | ||
![]() |
85e9042db6 | ||
![]() |
62e6d6fb4c | ||
![]() |
16c72e8efd | ||
![]() |
efe1b9f5a9 | ||
![]() |
65dbddb6b6 | ||
![]() |
2a67a31120 | ||
![]() |
a720c3348b | ||
![]() |
79ac60b6e8 | ||
![]() |
e01c2d222a | ||
![]() |
8922e2050a | ||
![]() |
a85891c611 | ||
![]() |
2586fdffda | ||
![]() |
c9dc9ec11e | ||
![]() |
b9332142c9 | ||
![]() |
b7b53362e1 | ||
![]() |
68cf66a5fe | ||
![]() |
4eb7eeb40f | ||
![]() |
a1d64fa215 | ||
![]() |
5f44c0e678 | ||
![]() |
b87c4d786d | ||
![]() |
329b0df3f6 | ||
![]() |
6906c15e8e | ||
![]() |
ff5421cefc | ||
![]() |
4498e992a2 | ||
![]() |
2d610dfdc8 | ||
![]() |
2b0a05ee32 | ||
![]() |
bc2d0ee9a8 | ||
![]() |
862a2a1440 | ||
![]() |
fba60ffff1 | ||
![]() |
d1a945a305 | ||
![]() |
685b9ab102 | ||
![]() |
24f27c0fe3 | ||
![]() |
3019c82d8a | ||
![]() |
f9d0b55ca3 | ||
![]() |
b54cc97e4c | ||
![]() |
e3b9d5abbf | ||
![]() |
2332970cf2 | ||
![]() |
48af3d3322 | ||
![]() |
429c94d6a9 | ||
![]() |
deb52ad350 | ||
![]() |
6f3cc77bb5 | ||
![]() |
1baf139ca4 | ||
![]() |
7945b3e738 | ||
![]() |
d4c1ff5309 | ||
![]() |
22868c3924 | ||
![]() |
2de1be188c | ||
![]() |
9faecec2db | ||
![]() |
5d7111fe3b | ||
![]() |
0c86f8288d | ||
![]() |
5a6a65fd9f | ||
![]() |
43c4d23896 | ||
![]() |
9f9e8db814 | ||
![]() |
b8efcc7cf0 | ||
![]() |
2f29d18e53 | ||
![]() |
888e286a09 | ||
![]() |
1a93a187f0 | ||
![]() |
a8d5da5091 | ||
![]() |
e2720fac9e | ||
![]() |
4374729f20 | ||
![]() |
87999333cb | ||
![]() |
335dc2927b | ||
![]() |
ccbef6b696 | ||
![]() |
3e384d3cfe | ||
![]() |
e33949c397 | ||
![]() |
eccac859ad | ||
![]() |
7dd586f2fd | ||
![]() |
3607c5b792 | ||
![]() |
e37adace62 | ||
![]() |
d10f591bf4 | ||
![]() |
262da78ca7 | ||
![]() |
0b83edf439 | ||
![]() |
cf7fcf496e | ||
![]() |
1765271f84 | ||
![]() |
0ec79f8dc3 | ||
![]() |
6f72c05ebf | ||
![]() |
20cacc84ba | ||
![]() |
24a14a0284 | ||
![]() |
982c2d9b83 | ||
![]() |
efa4a9b330 | ||
![]() |
39ec1cff19 | ||
![]() |
24c5f8d374 | ||
![]() |
d6b0158ddb | ||
![]() |
7e5e9542e9 | ||
![]() |
d7fc2aaa9c | ||
![]() |
8471a485d1 | ||
![]() |
462b375c8f | ||
![]() |
afbd506cfc | ||
![]() |
ec01e45ed1 | ||
![]() |
993829b23f | ||
![]() |
002257b820 | ||
![]() |
0af35c2224 | ||
![]() |
76bc0a2ba6 | ||
![]() |
d2dc4824ee | ||
![]() |
3f9ca0366b | ||
![]() |
b68785e19e | ||
![]() |
a1bbb719e1 | ||
![]() |
46f23f7348 | ||
![]() |
09252baa71 | ||
![]() |
3623a7a16a | ||
![]() |
cc504ab07c | ||
![]() |
2500a0649b | ||
![]() |
5ec4e4a026 | ||
![]() |
c3df4dd052 | ||
![]() |
730c3fada0 | ||
![]() |
628978fc8c | ||
![]() |
7fb9d68714 | ||
![]() |
e0a1c477d0 | ||
![]() |
b70565720f | ||
![]() |
33ac0c9dd6 | ||
![]() |
4699bdff60 | ||
![]() |
354641a3ce | ||
![]() |
58a43e40c7 | ||
![]() |
6b7fde10d3 | ||
![]() |
13fdab0139 | ||
![]() |
2ce617b2ce | ||
![]() |
63e0496c30 | ||
![]() |
850e3bb99b | ||
![]() |
2d90deb96a | ||
![]() |
3fb3f63e51 | ||
![]() |
d12949ff1c | ||
![]() |
e3e985220e | ||
![]() |
802dd8393d | ||
![]() |
fe6bc31c60 | ||
![]() |
2162d6042e | ||
![]() |
b8a4ffece9 | ||
![]() |
d929e0deb2 | ||
![]() |
4c08c9c524 | ||
![]() |
63b8444abe | ||
![]() |
82546d776d | ||
![]() |
84f9505a8d | ||
![]() |
ede59ab40e | ||
![]() |
2a80824076 | ||
![]() |
f92f96325a | ||
![]() |
b98555c512 | ||
![]() |
e02a42a008 | ||
![]() |
3e51126e18 | ||
![]() |
a714fa82b2 | ||
![]() |
e86e6eae81 | ||
![]() |
592c25f352 | ||
![]() |
015f662249 | ||
![]() |
8d998d71a3 | ||
![]() |
f75b6bf955 | ||
![]() |
fb78bf0996 | ||
![]() |
cd7cd30b4c | ||
![]() |
4ea22ff69b | ||
![]() |
3853898ab3 | ||
![]() |
7d8aa4157b | ||
![]() |
3fc20e10f5 | ||
![]() |
004eabf809 | ||
![]() |
62230fc970 | ||
![]() |
961668d420 | ||
![]() |
01061a0355 | ||
![]() |
9fdd85d9f1 | ||
![]() |
331db30f8f | ||
![]() |
017d7ec62b | ||
![]() |
76826b5495 | ||
![]() |
de315ff6d8 | ||
![]() |
c26b716164 | ||
![]() |
dcaddb8042 | ||
![]() |
5ef197e5fd | ||
![]() |
52ed02bd06 | ||
![]() |
bd427849fb | ||
![]() |
127d7acb91 | ||
![]() |
484efff156 | ||
![]() |
8f1d0e7a79 | ||
![]() |
88184ff955 | ||
![]() |
bd8c110f00 | ||
![]() |
0050c51124 | ||
![]() |
9b7ed73f95 | ||
![]() |
a189cb8333 | ||
![]() |
0d4825d3ea | ||
![]() |
156b3200e3 | ||
![]() |
572becad44 | ||
![]() |
75f23d1130 | ||
![]() |
e83fae3a6f | ||
![]() |
5be5b8c02b | ||
![]() |
6c4cb2bf00 | ||
![]() |
148a23579c | ||
![]() |
ea95811c4c | ||
![]() |
08cb5f42e7 | ||
![]() |
9abf37bbd1 | ||
![]() |
168203c94d | ||
![]() |
47bc50d9fb | ||
![]() |
93a4a3f8a0 | ||
![]() |
940e3eba35 | ||
![]() |
b7cd119b0c | ||
![]() |
7f90de887a | ||
![]() |
6c8a135612 | ||
![]() |
caec2976d7 | ||
![]() |
4d8933abdf | ||
![]() |
6eac0606cf | ||
![]() |
89cffd43f4 | ||
![]() |
b9764cc120 | ||
![]() |
7cd39a6aad | ||
![]() |
a8f57d012f | ||
![]() |
a0767f6af6 | ||
![]() |
9ffdba8643 | ||
![]() |
9591cd3a7e | ||
![]() |
afeb8a679a | ||
![]() |
db92fa2330 | ||
![]() |
d94517d9ca | ||
![]() |
0bec040cfe | ||
![]() |
3918ddb075 | ||
![]() |
d4091dbde6 | ||
![]() |
d7fe724145 | ||
![]() |
ad978700fc | ||
![]() |
e022b2a36c | ||
![]() |
ad032e5ed7 | ||
![]() |
45412fd404 | ||
![]() |
ccc6ab1281 | ||
![]() |
712da4c46e | ||
![]() |
b2d42b1d6c | ||
![]() |
1d22a04721 | ||
![]() |
5efb170e1d | ||
![]() |
cccccdcc0a | ||
![]() |
8d384ce44f | ||
![]() |
4d6e7c7dbb | ||
![]() |
9c5885c6b6 | ||
![]() |
ec3a14e6d9 | ||
![]() |
c98f5d4450 | ||
![]() |
2e8e542bc9 | ||
![]() |
7ccc67c06d | ||
![]() |
20df6348a4 | ||
![]() |
48fb7006f7 | ||
![]() |
9a6eb333e6 | ||
![]() |
086bf89d69 | ||
![]() |
0224d028e7 | ||
![]() |
540d749695 | ||
![]() |
219df582da | ||
![]() |
b898b14b77 | ||
![]() |
fba235a801 | ||
![]() |
b0297af38d | ||
![]() |
04def6d925 | ||
![]() |
7057984831 | ||
![]() |
2a2ac73845 | ||
![]() |
634f5d691b | ||
![]() |
754ac5092a | ||
![]() |
9ed972ffeb | ||
![]() |
3b1f3fddf0 | ||
![]() |
fa716457a5 | ||
![]() |
847510c6b5 | ||
![]() |
774e0f2022 | ||
![]() |
d1e12cd46f | ||
![]() |
adf6d49fd1 | ||
![]() |
0826a44d4b | ||
![]() |
ce145b04ac | ||
![]() |
29d775e675 | ||
![]() |
251a47db8c | ||
![]() |
e4b3a191d6 | ||
![]() |
393d702e77 | ||
![]() |
4efd41f1ba | ||
![]() |
a3597d6deb | ||
![]() |
8fada4d015 | ||
![]() |
5d11ab269d | ||
![]() |
6d59f55fd4 | ||
![]() |
7a60e4b458 | ||
![]() |
937dce8e65 | ||
![]() |
5c1562f36b | ||
![]() |
823c13707d | ||
![]() |
8eb59072b4 | ||
![]() |
20d053807d | ||
![]() |
8aa4396e44 | ||
![]() |
8f9100c762 | ||
![]() |
788a5b73f9 | ||
![]() |
83a73ac9b7 | ||
![]() |
5ed27bf5f6 | ||
![]() |
ccb0eeefbd | ||
![]() |
62bdaab7c7 | ||
![]() |
9851a2a057 | ||
![]() |
bb2bc64d15 | ||
![]() |
baa1eaf73a | ||
![]() |
4c7da3899e | ||
![]() |
4d3593ac86 | ||
![]() |
c49a8e9114 | ||
![]() |
a269be485f | ||
![]() |
d3bd9cd31d | ||
![]() |
e694e4a791 | ||
![]() |
e2de82ac8d | ||
![]() |
e3b14bc5a9 | ||
![]() |
b1439df72a | ||
![]() |
8e46aa7054 | ||
![]() |
8a22597180 | ||
![]() |
e919906c8c | ||
![]() |
46dc6eac88 | ||
![]() |
ea8c40c7b6 | ||
![]() |
b9bf30e095 | ||
![]() |
b60c51ef13 | ||
![]() |
ae5ce17035 | ||
![]() |
6b05938573 | ||
![]() |
f125c11a81 | ||
![]() |
77601f7262 | ||
![]() |
bf2f2782b7 | ||
![]() |
d9be51b2ef | ||
![]() |
694673b9bd | ||
![]() |
393259c24b | ||
![]() |
306bdd8021 | ||
![]() |
756c4c032f | ||
![]() |
a9685a00b3 | ||
![]() |
e1360ae049 | ||
![]() |
af45b51f4f | ||
![]() |
566ec8a5f9 | ||
![]() |
b048f8d733 | ||
![]() |
dca8516cec | ||
![]() |
f2c99798a6 | ||
![]() |
f65f88325b | ||
![]() |
42c8f6ae87 | ||
![]() |
c2161ca56b | ||
![]() |
d5b3a52827 | ||
![]() |
e4f3b777f9 | ||
![]() |
a278f79bdb | ||
![]() |
606c369173 | ||
![]() |
3c871920b1 | ||
![]() |
de6170a13d | ||
![]() |
1a270dc05c | ||
![]() |
bd9bf3f1c7 | ||
![]() |
65931bb384 | ||
![]() |
a5d53b3349 | ||
![]() |
4487a90623 | ||
![]() |
05da8cc3d1 | ||
![]() |
23e499998f | ||
![]() |
c156a4f723 | ||
![]() |
3657bf6636 | ||
![]() |
adade2e5ec | ||
![]() |
c16913c999 | ||
![]() |
12b61365ad | ||
![]() |
9214dc6610 | ||
![]() |
58b95e4ae4 | ||
![]() |
debf909359 | ||
![]() |
0d4d84b2fa | ||
![]() |
d2aca3e7e0 | ||
![]() |
26aca2b789 | ||
![]() |
5424ede413 | ||
![]() |
20112f8e16 | ||
![]() |
4260a754e5 | ||
![]() |
ce30f72738 | ||
![]() |
69d430dd75 | ||
![]() |
673545c7e4 | ||
![]() |
4f69a03bb1 | ||
![]() |
c2c18acd6a | ||
![]() |
12ead36f96 | ||
![]() |
41a642e06c | ||
![]() |
c6ed4b8a1d | ||
![]() |
65aa6573df |
17
.gitignore
vendored
17
.gitignore
vendored
@ -1,2 +1,17 @@
|
|||||||
*.pyc
|
*.py[co]
|
||||||
build/
|
build/
|
||||||
|
dist/
|
||||||
|
MANIFEST
|
||||||
|
docs/_build/
|
||||||
|
*.swp
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
slixmpp.egg-info/
|
||||||
|
.ropeproject/
|
||||||
|
4913
|
||||||
|
*~
|
||||||
|
.baboon/
|
||||||
|
.DS_STORE
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
venv/
|
22
.readthedocs.yaml
Normal file
22
.readthedocs.yaml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# .readthedocs.yaml
|
||||||
|
# Read the Docs configuration file
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Set the version of Python and other tools you might need
|
||||||
|
build:
|
||||||
|
os: ubuntu-22.04
|
||||||
|
tools:
|
||||||
|
python: "3.11"
|
||||||
|
|
||||||
|
# Build documentation in the docs/ directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
configuration: docs/conf.py
|
||||||
|
|
||||||
|
# We recommend specifying your dependencies to enable reproducible builds:
|
||||||
|
# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
|
||||||
|
python:
|
||||||
|
install:
|
||||||
|
- requirements: docs/requirements.txt
|
9
.woodpecker/lint.yml
Normal file
9
.woodpecker/lint.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
mypy:
|
||||||
|
image: python:3
|
||||||
|
commands:
|
||||||
|
- pip3 install mypy types-setuptools
|
||||||
|
- mypy slixmpp
|
23
.woodpecker/test-integration.yml
Normal file
23
.woodpecker/test-integration.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
test_integration:
|
||||||
|
image: "python:3.11"
|
||||||
|
environment:
|
||||||
|
CI_ACCOUNT1:
|
||||||
|
from_secret: ci_account1
|
||||||
|
CI_ACCOUNT1_PASSWORD:
|
||||||
|
from_secret: ci_account1_password
|
||||||
|
CI_ACCOUNT2:
|
||||||
|
from_secret: ci_account2
|
||||||
|
CI_ACCOUNT2_PASSWORD:
|
||||||
|
from_secret: ci_account2_password
|
||||||
|
CI_MUC_SERVER:
|
||||||
|
from_secret: ci_muc_server
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y python3-pip cython3 gpg idn libidn-dev
|
||||||
|
- pip3 install emoji aiohttp aiodns
|
||||||
|
- python3 setup.py build_ext --inplace
|
||||||
|
- ./run_integration_tests.py
|
19
.woodpecker/test.yml
Normal file
19
.woodpecker/test.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
when:
|
||||||
|
event: [ push, pull_request ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
unit_tests:
|
||||||
|
image: "python:${TAG}"
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y python3 python3-pip cython3 gpg
|
||||||
|
- pip3 install emoji aiohttp cryptography setuptools
|
||||||
|
- ./run_tests.py
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
TAG:
|
||||||
|
- "3.9"
|
||||||
|
- "3.10"
|
||||||
|
- "3.11"
|
||||||
|
- "3.12"
|
||||||
|
- "3.13"
|
14
CONTRIBUTING.rst
Normal file
14
CONTRIBUTING.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Contributing to the Slixmpp project
|
||||||
|
===================================
|
||||||
|
|
||||||
|
To contribute, the preferred way is to commit your changes on some
|
||||||
|
publicly-available git repository (on a fork `on github
|
||||||
|
<https://github.com/poezio/slixmpp>`_ or on your own repository) and to
|
||||||
|
notify the developers with either:
|
||||||
|
- a ticket `on the bug tracker <https://codeberg.org/poezio/slixmpp/issues/new>`_
|
||||||
|
- a pull request on github
|
||||||
|
- a simple message on `the XMPP MUC <xmpp:slixmpp@muc.poez.io>`_
|
||||||
|
|
||||||
|
Even though Slixmpp’s github repository is just a read-only mirror, we can
|
||||||
|
still be notified of the pull requests and fetch your mirror manually to
|
||||||
|
integrate your changes.
|
6
INSTALL
6
INSTALL
@ -1,5 +1,7 @@
|
|||||||
Pre-requisites:
|
Pre-requisites:
|
||||||
- Python 3.1 or 2.6
|
- Python 3.7+
|
||||||
|
- Cython 0.22 and libidn, optionally (making JID faster by compiling the stringprep module)
|
||||||
|
- GnuPG, for testing
|
||||||
|
|
||||||
Install:
|
Install:
|
||||||
> python3 setup.py install
|
> python3 setup.py install
|
||||||
@ -9,4 +11,4 @@ Root install:
|
|||||||
|
|
||||||
To test:
|
To test:
|
||||||
> cd examples
|
> cd examples
|
||||||
> python echo_client.py -v -j [USER@example.com] -p [PASSWORD]
|
> python3 echo_client.py -d -j [USER@example.com] -p [PASSWORD]
|
||||||
|
122
LICENSE
122
LICENSE
@ -17,3 +17,125 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Licenses of Bundled Third Party Code
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
dateutil - Extensions to the standard python 2.3+ datetime module.
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
fixed_datetime
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Copyright (c) 2008, Red Innovation Ltd., Finland
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of Red Innovation nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY RED INNOVATION ``AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL RED INNOVATION BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUELTA – A PURE-PYTHON SASL CLIENT LIBRARY
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This software is subject to "The MIT License"
|
||||||
|
|
||||||
|
Copyright 2004-2013 David Alan Cridland
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
python-gnupg: A Python wrapper for the GNU Privacy Guard
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Copyright (c) 2008-2012 by Vinay Sajip.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* The name(s) of the copyright holder(s) may not be used to endorse or
|
||||||
|
promote products derived from this software without specific prior
|
||||||
|
written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) "AS IS" AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
7
MANIFEST.in
Normal file
7
MANIFEST.in
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
include README.rst
|
||||||
|
include LICENSE
|
||||||
|
include run_tests.py
|
||||||
|
include slixmpp/stringprep.pyx
|
||||||
|
recursive-include docs Makefile *.bat *.py *.rst *.css *.ttf *.png
|
||||||
|
recursive-include examples *.py
|
||||||
|
recursive-include tests *.py
|
47
README
47
README
@ -1,47 +0,0 @@
|
|||||||
SleekXMPP is an XMPP library written for Python 3.1+ (with 2.6 compatibility).
|
|
||||||
Hosted at http://wiki.github.com/fritzy/SleekXMPP/
|
|
||||||
|
|
||||||
Featured in examples in XMPP: The Definitive Guide by Kevin Smith, Remko Tronçon, and Peter Saint-Andre
|
|
||||||
If you're coming here from The Definitive Guide, please read http://wiki.github.com/fritzy/SleekXMPP/xmpp-the-definitive-guide
|
|
||||||
|
|
||||||
Requirements:
|
|
||||||
We try to keep requirements to a minimum, but we suggest that you install http://dnspython.org although it isn't strictly required.
|
|
||||||
If you do not install this library, you may need to specify the server/port for services that use SRV records (like GTalk).
|
|
||||||
"sudo pip install dnspython" on a *nix system with pip installed.
|
|
||||||
|
|
||||||
SleekXMPP has several design goals/philosophies:
|
|
||||||
- Low number of dependencies.
|
|
||||||
- Every XEP as a plugin.
|
|
||||||
- Rewarding to work with.
|
|
||||||
|
|
||||||
The goals for 1.0 include (and we're getting close):
|
|
||||||
- Nearly Full test coverage of stanzas.
|
|
||||||
- Wide range of functional tests.
|
|
||||||
- Stanza objects for all interaction with the stream
|
|
||||||
- Documentation on using and extending SleekXMPP.
|
|
||||||
- Complete documentation on all implemented stanza objects
|
|
||||||
- Documentation on all examples used in XMPP: The Definitive Guide
|
|
||||||
|
|
||||||
1.1 will include:
|
|
||||||
- More functional and unit tests
|
|
||||||
- PEP-8 compliance
|
|
||||||
- XEP-225 support
|
|
||||||
|
|
||||||
Since 0.2, here's the Changelog:
|
|
||||||
- MANY bugfixes
|
|
||||||
- Re-implementation of handlers/threading to greatly simplify and remove bugs (no more spawning threads in handlers)
|
|
||||||
- Stanza objects for jabber:client and all implemented XEPs
|
|
||||||
- Raising XMPPError for jabber:client and extended errors in handlers
|
|
||||||
- Robust error handling and better insurance of iq responses
|
|
||||||
- Stanza objects have made life a lot easier!
|
|
||||||
- Massive audit/cleanup.
|
|
||||||
|
|
||||||
Credits
|
|
||||||
----------------
|
|
||||||
Main Author: Nathan Fritz fritz@netflint.net
|
|
||||||
Contributors: Kevin Smith & Lance Stout
|
|
||||||
Patches: Remko Tronçon
|
|
||||||
|
|
||||||
Feel free to add fritzy@netflint.net to your roster for direct support and comments.
|
|
||||||
Join sleekxmpp-discussion@googlegroups.com / http://groups.google.com/group/sleekxmpp-discussion for email discussion.
|
|
||||||
Join sleek@conference.jabber.org for groupchat discussion.
|
|
155
README.rst
Normal file
155
README.rst
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
Slixmpp
|
||||||
|
#########
|
||||||
|
|
||||||
|
Slixmpp is an MIT licensed XMPP library for Python 3.7+. It is a fork of
|
||||||
|
SleekXMPP.
|
||||||
|
|
||||||
|
Slixmpp's goals is to only rewrite the core of the library (the low level
|
||||||
|
socket handling, the timers, the events dispatching) in order to remove all
|
||||||
|
threads.
|
||||||
|
|
||||||
|
Building
|
||||||
|
--------
|
||||||
|
|
||||||
|
Slixmpp can make use of cython to improve performance on critical modules.
|
||||||
|
To do that, **cython3** is necessary along with **libidn** headers.
|
||||||
|
Otherwise, no compilation is needed. Building is done by running setup.py::
|
||||||
|
|
||||||
|
python3 setup.py build_ext --inplace
|
||||||
|
|
||||||
|
Documentation and Testing
|
||||||
|
-------------------------
|
||||||
|
Documentation can be found both inline in the code, and as a Sphinx project in ``/docs``.
|
||||||
|
To generate the Sphinx documentation, follow the commands below. The HTML output will
|
||||||
|
be in ``docs/_build/html``::
|
||||||
|
|
||||||
|
cd docs
|
||||||
|
make html
|
||||||
|
open _build/html/index.html
|
||||||
|
|
||||||
|
To run the test suite for Slixmpp::
|
||||||
|
|
||||||
|
python run_tests.py
|
||||||
|
|
||||||
|
Integration tests require the following environment variables to be set:::
|
||||||
|
|
||||||
|
$CI_ACCOUNT1
|
||||||
|
$CI_ACCOUNT1_PASSWORD
|
||||||
|
$CI_ACCOUNT2
|
||||||
|
$CI_ACCOUNT2_PASSWORD
|
||||||
|
$CI_MUC_SERVER
|
||||||
|
|
||||||
|
where the account variables are JIDs of valid, existing accounts, and
|
||||||
|
the passwords are the account passwords. The MUC server must allow room
|
||||||
|
creation from those JIDs.
|
||||||
|
|
||||||
|
To run the integration test suite for Slixmpp::
|
||||||
|
|
||||||
|
python run_integration_tests.py
|
||||||
|
|
||||||
|
The Slixmpp Boilerplate
|
||||||
|
-------------------------
|
||||||
|
Projects using Slixmpp tend to follow a basic pattern for setting up client/component
|
||||||
|
connections and configuration. Here is the gist of the boilerplate needed for a Slixmpp
|
||||||
|
based project. See the documentation or examples directory for more detailed archetypes for
|
||||||
|
Slixmpp projects::
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from slixmpp import ClientXMPP
|
||||||
|
from slixmpp.exceptions import IqError, IqTimeout
|
||||||
|
|
||||||
|
|
||||||
|
class EchoBot(ClientXMPP):
|
||||||
|
|
||||||
|
def __init__(self, jid, password):
|
||||||
|
ClientXMPP.__init__(self, jid, password)
|
||||||
|
|
||||||
|
self.add_event_handler("session_start", self.session_start)
|
||||||
|
self.add_event_handler("message", self.message)
|
||||||
|
|
||||||
|
# If you wanted more functionality, here's how to register plugins:
|
||||||
|
# self.register_plugin('xep_0030') # Service Discovery
|
||||||
|
# self.register_plugin('xep_0199') # XMPP Ping
|
||||||
|
|
||||||
|
# Here's how to access plugins once you've registered them:
|
||||||
|
# self['xep_0030'].add_feature('echo_demo')
|
||||||
|
|
||||||
|
# If you are working with an OpenFire server, you will
|
||||||
|
# need to use a different SSL version:
|
||||||
|
# import ssl
|
||||||
|
# self.ssl_version = ssl.PROTOCOL_SSLv3
|
||||||
|
|
||||||
|
def session_start(self, event):
|
||||||
|
self.send_presence()
|
||||||
|
self.get_roster()
|
||||||
|
|
||||||
|
# Most get_*/set_* methods from plugins use Iq stanzas, which
|
||||||
|
# can generate IqError and IqTimeout exceptions
|
||||||
|
#
|
||||||
|
# try:
|
||||||
|
# self.get_roster()
|
||||||
|
# except IqError as err:
|
||||||
|
# logging.error('There was an error getting the roster')
|
||||||
|
# logging.error(err.iq['error']['condition'])
|
||||||
|
# self.disconnect()
|
||||||
|
# except IqTimeout:
|
||||||
|
# logging.error('Server is taking too long to respond')
|
||||||
|
# self.disconnect()
|
||||||
|
|
||||||
|
def message(self, msg):
|
||||||
|
if msg['type'] in ('chat', 'normal'):
|
||||||
|
msg.reply("Thanks for sending\n%(body)s" % msg).send()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# Ideally use optparse or argparse to get JID,
|
||||||
|
# password, and log level.
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG,
|
||||||
|
format='%(levelname)-8s %(message)s')
|
||||||
|
|
||||||
|
xmpp = EchoBot('somejid@example.com', 'use_getpass')
|
||||||
|
xmpp.connect()
|
||||||
|
xmpp.process(forever=True)
|
||||||
|
|
||||||
|
|
||||||
|
Slixmpp Credits
|
||||||
|
---------------
|
||||||
|
|
||||||
|
**Maintainers:**
|
||||||
|
- Florent Le Coz (`louiz@louiz.org <xmpp:louiz@louiz.org?message>`_),
|
||||||
|
- Mathieu Pasquet (`mathieui@mathieui.net <xmpp:mathieui@mathieui.net?message>`_),
|
||||||
|
|
||||||
|
**Contributors:**
|
||||||
|
- Emmanuel Gil Peyrot (`Link mauve <xmpp:linkmauve@linkmauve.fr?message>`_)
|
||||||
|
- Sam Whited (`Sam Whited <mailto:sam@samwhited.com>`_)
|
||||||
|
- Dan Sully (`Dan Sully <mailto:daniel@electricalrain.com>`_)
|
||||||
|
- Gasper Zejn (`Gasper Zejn <mailto:zejn@kiberpipa.org>`_)
|
||||||
|
- Krzysztof Kotlenga (`Krzysztof Kotlenga <mailto:pocek@users.sf.net>`_)
|
||||||
|
- Tsukasa Hiiragi (`Tsukasa Hiiragi <mailto:bakalolka@gmail.com>`_)
|
||||||
|
- Maxime Buquet (`pep <xmpp:pep@bouah.net?message>`_)
|
||||||
|
|
||||||
|
Credits (SleekXMPP)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
**Main Author:** Nathan Fritz
|
||||||
|
`fritzy@netflint.net <xmpp:fritzy@netflint.net?message>`_,
|
||||||
|
`@fritzy <http://twitter.com/fritzy>`_
|
||||||
|
|
||||||
|
Nathan is also the author of XMPPHP and `Seesmic-AS3-XMPP
|
||||||
|
<http://code.google.com/p/seesmic-as3-xmpp/>`_, and a former member of
|
||||||
|
the XMPP Council.
|
||||||
|
|
||||||
|
**Co-Author:** Lance Stout
|
||||||
|
`lancestout@gmail.com <xmpp:lancestout@gmail.com?message>`_,
|
||||||
|
`@lancestout <http://twitter.com/lancestout>`_
|
||||||
|
|
||||||
|
**Contributors:**
|
||||||
|
- Brian Beggs (`macdiesel <http://github.com/macdiesel>`_)
|
||||||
|
- Dann Martens (`dannmartens <http://github.com/dannmartens>`_)
|
||||||
|
- Florent Le Coz (`louiz <http://github.com/louiz>`_)
|
||||||
|
- Kevin Smith (`Kev <http://github.com/Kev>`_, http://kismith.co.uk)
|
||||||
|
- Remko Tronçon (`remko <http://github.com/remko>`_, http://el-tramo.be)
|
||||||
|
- Te-jé Rogers (`te-je <http://github.com/te-je>`_)
|
||||||
|
- Thom Nichols (`tomstrummer <http://github.com/tomstrummer>`_)
|
@ -1,171 +0,0 @@
|
|||||||
import logging
|
|
||||||
import sleekxmpp
|
|
||||||
from optparse import OptionParser
|
|
||||||
from xml.etree import cElementTree as ET
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
import sleekxmpp.plugins.xep_0004
|
|
||||||
from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
|
|
||||||
from sleekxmpp.xmlstream.handler.waiter import Waiter
|
|
||||||
try:
|
|
||||||
import configparser
|
|
||||||
except ImportError:
|
|
||||||
import ConfigParser as configparser
|
|
||||||
try:
|
|
||||||
import queue
|
|
||||||
except ImportError:
|
|
||||||
import Queue as queue
|
|
||||||
|
|
||||||
class TestClient(sleekxmpp.ClientXMPP):
|
|
||||||
def __init__(self, jid, password):
|
|
||||||
sleekxmpp.ClientXMPP.__init__(self, jid, password)
|
|
||||||
self.add_event_handler("session_start", self.start)
|
|
||||||
#self.add_event_handler("message", self.message)
|
|
||||||
self.waitforstart = queue.Queue()
|
|
||||||
|
|
||||||
def start(self, event):
|
|
||||||
self.getRoster()
|
|
||||||
self.sendPresence()
|
|
||||||
self.waitforstart.put(True)
|
|
||||||
|
|
||||||
|
|
||||||
class TestPubsubServer(unittest.TestCase):
|
|
||||||
statev = {}
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
unittest.TestCase.__init__(self, *args, **kwargs)
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test001getdefaultconfig(self):
|
|
||||||
"""Get the default node config"""
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5')
|
|
||||||
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
|
||||||
self.statev['defaultconfig'] = result
|
|
||||||
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
|
||||||
|
|
||||||
def test002createdefaultnode(self):
|
|
||||||
"""Create a node without config"""
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode1'))
|
|
||||||
|
|
||||||
def test003deletenode(self):
|
|
||||||
"""Delete recently created node"""
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode1'))
|
|
||||||
|
|
||||||
def test004createnode(self):
|
|
||||||
"""Create a node with a config"""
|
|
||||||
self.statev['defaultconfig'].field['pubsub#access_model'].setValue('open')
|
|
||||||
self.statev['defaultconfig'].field['pubsub#notify_retract'].setValue(True)
|
|
||||||
self.statev['defaultconfig'].field['pubsub#persist_items'].setValue(True)
|
|
||||||
self.statev['defaultconfig'].field['pubsub#presence_based_delivery'].setValue(True)
|
|
||||||
p = self.xmpp2.Presence()
|
|
||||||
p['to'] = self.pshost
|
|
||||||
p.send()
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode2', self.statev['defaultconfig'], ntype='job'))
|
|
||||||
|
|
||||||
def test005reconfigure(self):
|
|
||||||
"""Retrieving node config and reconfiguring"""
|
|
||||||
nconfig = self.xmpp1['xep_0060'].getNodeConfig(self.pshost, 'testnode2')
|
|
||||||
self.failUnless(nconfig, "No configuration returned")
|
|
||||||
#print("\n%s ==\n %s" % (nconfig.getValues(), self.statev['defaultconfig'].getValues()))
|
|
||||||
self.failUnless(nconfig.getValues() == self.statev['defaultconfig'].getValues(), "Configuration does not match")
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].setNodeConfig(self.pshost, 'testnode2', nconfig))
|
|
||||||
|
|
||||||
def test006subscribetonode(self):
|
|
||||||
"""Subscribe to node from account 2"""
|
|
||||||
self.failUnless(self.xmpp2['xep_0060'].subscribe(self.pshost, "testnode2"))
|
|
||||||
|
|
||||||
def test007publishitem(self):
|
|
||||||
"""Publishing item"""
|
|
||||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
|
||||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
|
||||||
self.xmpp2.registerHandler(w)
|
|
||||||
#result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
|
||||||
result = self.xmpp1['jobs'].createJob(self.pshost, "testnode2", 'test1', item)
|
|
||||||
msg = w.wait(5) # got to get a result in 5 seconds
|
|
||||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
|
||||||
#result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test2', item),))
|
|
||||||
result = self.xmpp1['jobs'].createJob(self.pshost, "testnode2", 'test2', item)
|
|
||||||
w = Waiter('wait publish2', StanzaPath('message/pubsub_event/items'))
|
|
||||||
self.xmpp2.registerHandler(w)
|
|
||||||
self.xmpp2['jobs'].claimJob(self.pshost, 'testnode2', 'test1')
|
|
||||||
msg = w.wait(5) # got to get a result in 5 seconds
|
|
||||||
self.xmpp2['jobs'].claimJob(self.pshost, 'testnode2', 'test2')
|
|
||||||
self.xmpp2['jobs'].finishJob(self.pshost, 'testnode2', 'test1')
|
|
||||||
self.xmpp2['jobs'].finishJob(self.pshost, 'testnode2', 'test2')
|
|
||||||
print result
|
|
||||||
#need to add check for update
|
|
||||||
|
|
||||||
def test900cleanup(self):
|
|
||||||
"Cleaning up"
|
|
||||||
#self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
|
||||||
time.sleep(10)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
#parse command line arguements
|
|
||||||
optp = OptionParser()
|
|
||||||
optp.add_option('-q','--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO)
|
|
||||||
optp.add_option('-d','--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO)
|
|
||||||
optp.add_option('-v','--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO)
|
|
||||||
optp.add_option("-c","--config", dest="configfile", default="config.xml", help="set config file to use")
|
|
||||||
optp.add_option("-n","--nodenum", dest="nodenum", default="1", help="set node number to use")
|
|
||||||
optp.add_option("-p","--pubsub", dest="pubsub", default="1", help="set pubsub host to use")
|
|
||||||
opts,args = optp.parse_args()
|
|
||||||
|
|
||||||
logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s')
|
|
||||||
|
|
||||||
#load xml config
|
|
||||||
logging.info("Loading config file: %s" % opts.configfile)
|
|
||||||
config = configparser.RawConfigParser()
|
|
||||||
config.read(opts.configfile)
|
|
||||||
|
|
||||||
#init
|
|
||||||
logging.info("Account 1 is %s" % config.get('account1', 'jid'))
|
|
||||||
xmpp1 = TestClient(config.get('account1','jid'), config.get('account1','pass'))
|
|
||||||
logging.info("Account 2 is %s" % config.get('account2', 'jid'))
|
|
||||||
xmpp2 = TestClient(config.get('account2','jid'), config.get('account2','pass'))
|
|
||||||
|
|
||||||
xmpp1.registerPlugin('xep_0004')
|
|
||||||
xmpp1.registerPlugin('xep_0030')
|
|
||||||
xmpp1.registerPlugin('xep_0060')
|
|
||||||
xmpp1.registerPlugin('xep_0199')
|
|
||||||
xmpp1.registerPlugin('jobs')
|
|
||||||
xmpp2.registerPlugin('xep_0004')
|
|
||||||
xmpp2.registerPlugin('xep_0030')
|
|
||||||
xmpp2.registerPlugin('xep_0060')
|
|
||||||
xmpp2.registerPlugin('xep_0199')
|
|
||||||
xmpp2.registerPlugin('jobs')
|
|
||||||
|
|
||||||
if not config.get('account1', 'server'):
|
|
||||||
# we don't know the server, but the lib can probably figure it out
|
|
||||||
xmpp1.connect()
|
|
||||||
else:
|
|
||||||
xmpp1.connect((config.get('account1', 'server'), 5222))
|
|
||||||
xmpp1.process(threaded=True)
|
|
||||||
|
|
||||||
#init
|
|
||||||
if not config.get('account2', 'server'):
|
|
||||||
# we don't know the server, but the lib can probably figure it out
|
|
||||||
xmpp2.connect()
|
|
||||||
else:
|
|
||||||
xmpp2.connect((config.get('account2', 'server'), 5222))
|
|
||||||
xmpp2.process(threaded=True)
|
|
||||||
|
|
||||||
TestPubsubServer.xmpp1 = xmpp1
|
|
||||||
TestPubsubServer.xmpp2 = xmpp2
|
|
||||||
TestPubsubServer.pshost = config.get('settings', 'pubsub')
|
|
||||||
xmpp1.waitforstart.get(True)
|
|
||||||
xmpp2.waitforstart.get(True)
|
|
||||||
testsuite = unittest.TestLoader().loadTestsFromTestCase(TestPubsubServer)
|
|
||||||
|
|
||||||
alltests_suite = unittest.TestSuite([testsuite])
|
|
||||||
result = unittest.TextTestRunner(verbosity=2).run(alltests_suite)
|
|
||||||
xmpp1.disconnect()
|
|
||||||
xmpp2.disconnect()
|
|
@ -1,233 +0,0 @@
|
|||||||
import logging
|
|
||||||
import sleekxmpp
|
|
||||||
from optparse import OptionParser
|
|
||||||
from xml.etree import cElementTree as ET
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
import sleekxmpp.plugins.xep_0004
|
|
||||||
from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
|
|
||||||
from sleekxmpp.xmlstream.handler.waiter import Waiter
|
|
||||||
try:
|
|
||||||
import configparser
|
|
||||||
except ImportError:
|
|
||||||
import ConfigParser as configparser
|
|
||||||
try:
|
|
||||||
import queue
|
|
||||||
except ImportError:
|
|
||||||
import Queue as queue
|
|
||||||
|
|
||||||
class TestClient(sleekxmpp.ClientXMPP):
|
|
||||||
def __init__(self, jid, password):
|
|
||||||
sleekxmpp.ClientXMPP.__init__(self, jid, password)
|
|
||||||
self.add_event_handler("session_start", self.start)
|
|
||||||
#self.add_event_handler("message", self.message)
|
|
||||||
self.waitforstart = queue.Queue()
|
|
||||||
|
|
||||||
def start(self, event):
|
|
||||||
self.getRoster()
|
|
||||||
self.sendPresence()
|
|
||||||
self.waitforstart.put(True)
|
|
||||||
|
|
||||||
|
|
||||||
class TestPubsubServer(unittest.TestCase):
|
|
||||||
statev = {}
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
unittest.TestCase.__init__(self, *args, **kwargs)
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test001getdefaultconfig(self):
|
|
||||||
"""Get the default node config"""
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4')
|
|
||||||
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5')
|
|
||||||
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
|
||||||
self.statev['defaultconfig'] = result
|
|
||||||
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
|
||||||
|
|
||||||
def test002createdefaultnode(self):
|
|
||||||
"""Create a node without config"""
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode1'))
|
|
||||||
|
|
||||||
def test003deletenode(self):
|
|
||||||
"""Delete recently created node"""
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode1'))
|
|
||||||
|
|
||||||
def test004createnode(self):
|
|
||||||
"""Create a node with a config"""
|
|
||||||
self.statev['defaultconfig'].field['pubsub#access_model'].setValue('open')
|
|
||||||
self.statev['defaultconfig'].field['pubsub#notify_retract'].setValue(True)
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode2', self.statev['defaultconfig']))
|
|
||||||
|
|
||||||
def test005reconfigure(self):
|
|
||||||
"""Retrieving node config and reconfiguring"""
|
|
||||||
nconfig = self.xmpp1['xep_0060'].getNodeConfig(self.pshost, 'testnode2')
|
|
||||||
self.failUnless(nconfig, "No configuration returned")
|
|
||||||
#print("\n%s ==\n %s" % (nconfig.getValues(), self.statev['defaultconfig'].getValues()))
|
|
||||||
self.failUnless(nconfig.getValues() == self.statev['defaultconfig'].getValues(), "Configuration does not match")
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].setNodeConfig(self.pshost, 'testnode2', nconfig))
|
|
||||||
|
|
||||||
def test006subscribetonode(self):
|
|
||||||
"""Subscribe to node from account 2"""
|
|
||||||
self.failUnless(self.xmpp2['xep_0060'].subscribe(self.pshost, "testnode2"))
|
|
||||||
|
|
||||||
def test007publishitem(self):
|
|
||||||
"""Publishing item"""
|
|
||||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
|
||||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
|
||||||
self.xmpp2.registerHandler(w)
|
|
||||||
result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
|
||||||
msg = w.wait(5) # got to get a result in 5 seconds
|
|
||||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
|
||||||
self.failUnless(result)
|
|
||||||
#need to add check for update
|
|
||||||
|
|
||||||
def test008updateitem(self):
|
|
||||||
"""Updating item"""
|
|
||||||
item = ET.Element('{http://netflint.net/protocol/test}test', {'someattr': 'hi there'})
|
|
||||||
w = Waiter('wait publish', StanzaPath('message/pubsub_event/items'))
|
|
||||||
self.xmpp2.registerHandler(w)
|
|
||||||
result = self.xmpp1['xep_0060'].setItem(self.pshost, "testnode2", (('test1', item),))
|
|
||||||
msg = w.wait(5) # got to get a result in 5 seconds
|
|
||||||
self.failUnless(msg != False, "Account #2 did not get message event")
|
|
||||||
self.failUnless(result)
|
|
||||||
#need to add check for update
|
|
||||||
|
|
||||||
def test009deleteitem(self):
|
|
||||||
"""Deleting item"""
|
|
||||||
w = Waiter('wait retract', StanzaPath('message/pubsub_event/items@node=testnode2'))
|
|
||||||
self.xmpp2.registerHandler(w)
|
|
||||||
result = self.xmpp1['xep_0060'].deleteItem(self.pshost, "testnode2", "test1")
|
|
||||||
self.failUnless(result, "Got error when deleting item.")
|
|
||||||
msg = w.wait(1)
|
|
||||||
self.failUnless(msg != False, "Did not get retract notice.")
|
|
||||||
|
|
||||||
def test010unsubscribenode(self):
|
|
||||||
"Unsubscribing Account #2"
|
|
||||||
self.failUnless(self.xmpp2['xep_0060'].unsubscribe(self.pshost, "testnode2"), "Got error response when unsubscribing.")
|
|
||||||
|
|
||||||
def test011createcollectionnode(self):
|
|
||||||
"Create a collection node w/ Account #2"
|
|
||||||
self.failUnless(self.xmpp2['xep_0060'].create_node(self.pshost, "testnode3", self.statev['defaultconfig'], True), "Could not create collection node")
|
|
||||||
|
|
||||||
def test012subscribecollection(self):
|
|
||||||
"Subscribe Account #1 to collection"
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode3"))
|
|
||||||
|
|
||||||
def test013assignnodetocollection(self):
|
|
||||||
"Assign node to collection"
|
|
||||||
self.failUnless(self.xmpp2['xep_0060'].addNodeToCollection(self.pshost, 'testnode2', 'testnode3'))
|
|
||||||
|
|
||||||
def test014publishcollection(self):
|
|
||||||
"""Publishing item to collection child"""
|
|
||||||
item = ET.Element('{http://netflint.net/protocol/test}test')
|
|
||||||
w = Waiter('wait publish2', StanzaPath('message/pubsub_event/items@node=testnode2'))
|
|
||||||
self.xmpp1.registerHandler(w)
|
|
||||||
result = self.xmpp2['xep_0060'].setItem(self.pshost, "testnode2", (('test2', item),))
|
|
||||||
msg = w.wait(5) # got to get a result in 5 seconds
|
|
||||||
self.failUnless(msg != False, "Account #1 did not get message event: perhaps node was advertised incorrectly?")
|
|
||||||
self.failUnless(result)
|
|
||||||
|
|
||||||
# def test016speedtest(self):
|
|
||||||
# "Uncached speed test"
|
|
||||||
# import time
|
|
||||||
# start = time.time()
|
|
||||||
# for y in range(0, 50000, 1000):
|
|
||||||
# start2 = time.time()
|
|
||||||
# for x in range(y, y+1000):
|
|
||||||
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode4", subscribee="testuser%s@whatever" % x))
|
|
||||||
# print time.time() - start2
|
|
||||||
# seconds = time.time() - start
|
|
||||||
# print "--", seconds
|
|
||||||
# print "---------"
|
|
||||||
# time.sleep(15)
|
|
||||||
# self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4'), "Could not delete non-cached test node")
|
|
||||||
|
|
||||||
# def test015speedtest(self):
|
|
||||||
# "cached speed test"
|
|
||||||
# result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
|
||||||
# self.statev['defaultconfig'] = result
|
|
||||||
# self.statev['defaultconfig'].field['pubsub#node_type'].setValue("leaf")
|
|
||||||
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(True)
|
|
||||||
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode4', self.statev['defaultconfig']))
|
|
||||||
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(False)
|
|
||||||
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode5', self.statev['defaultconfig']))
|
|
||||||
# start = time.time()
|
|
||||||
# for y in range(0, 50000, 1000):
|
|
||||||
# start2 = time.time()
|
|
||||||
# for x in range(y, y+1000):
|
|
||||||
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode5", subscribee="testuser%s@whatever" % x))
|
|
||||||
# print time.time() - start2
|
|
||||||
# seconds = time.time() - start
|
|
||||||
# print "--", seconds
|
|
||||||
|
|
||||||
def test900cleanup(self):
|
|
||||||
"Cleaning up"
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
|
||||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3'), "Could not delete collection node")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
#parse command line arguements
|
|
||||||
optp = OptionParser()
|
|
||||||
optp.add_option('-q','--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO)
|
|
||||||
optp.add_option('-d','--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO)
|
|
||||||
optp.add_option('-v','--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO)
|
|
||||||
optp.add_option("-c","--config", dest="configfile", default="config.xml", help="set config file to use")
|
|
||||||
optp.add_option("-n","--nodenum", dest="nodenum", default="1", help="set node number to use")
|
|
||||||
optp.add_option("-p","--pubsub", dest="pubsub", default="1", help="set pubsub host to use")
|
|
||||||
opts,args = optp.parse_args()
|
|
||||||
|
|
||||||
logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s')
|
|
||||||
|
|
||||||
#load xml config
|
|
||||||
logging.info("Loading config file: %s" % opts.configfile)
|
|
||||||
config = configparser.RawConfigParser()
|
|
||||||
config.read(opts.configfile)
|
|
||||||
|
|
||||||
#init
|
|
||||||
logging.info("Account 1 is %s" % config.get('account1', 'jid'))
|
|
||||||
xmpp1 = TestClient(config.get('account1','jid'), config.get('account1','pass'))
|
|
||||||
logging.info("Account 2 is %s" % config.get('account2', 'jid'))
|
|
||||||
xmpp2 = TestClient(config.get('account2','jid'), config.get('account2','pass'))
|
|
||||||
|
|
||||||
xmpp1.registerPlugin('xep_0004')
|
|
||||||
xmpp1.registerPlugin('xep_0030')
|
|
||||||
xmpp1.registerPlugin('xep_0060')
|
|
||||||
xmpp1.registerPlugin('xep_0199')
|
|
||||||
xmpp2.registerPlugin('xep_0004')
|
|
||||||
xmpp2.registerPlugin('xep_0030')
|
|
||||||
xmpp2.registerPlugin('xep_0060')
|
|
||||||
xmpp2.registerPlugin('xep_0199')
|
|
||||||
|
|
||||||
if not config.get('account1', 'server'):
|
|
||||||
# we don't know the server, but the lib can probably figure it out
|
|
||||||
xmpp1.connect()
|
|
||||||
else:
|
|
||||||
xmpp1.connect((config.get('account1', 'server'), 5222))
|
|
||||||
xmpp1.process(threaded=True)
|
|
||||||
|
|
||||||
#init
|
|
||||||
if not config.get('account2', 'server'):
|
|
||||||
# we don't know the server, but the lib can probably figure it out
|
|
||||||
xmpp2.connect()
|
|
||||||
else:
|
|
||||||
xmpp2.connect((config.get('account2', 'server'), 5222))
|
|
||||||
xmpp2.process(threaded=True)
|
|
||||||
|
|
||||||
TestPubsubServer.xmpp1 = xmpp1
|
|
||||||
TestPubsubServer.xmpp2 = xmpp2
|
|
||||||
TestPubsubServer.pshost = config.get('settings', 'pubsub')
|
|
||||||
xmpp1.waitforstart.get(True)
|
|
||||||
xmpp2.waitforstart.get(True)
|
|
||||||
testsuite = unittest.TestLoader().loadTestsFromTestCase(TestPubsubServer)
|
|
||||||
|
|
||||||
alltests_suite = unittest.TestSuite([testsuite])
|
|
||||||
result = unittest.TextTestRunner(verbosity=2).run(alltests_suite)
|
|
||||||
xmpp1.disconnect()
|
|
||||||
xmpp2.disconnect()
|
|
@ -1,13 +0,0 @@
|
|||||||
[settings]
|
|
||||||
enabled=true
|
|
||||||
pubsub=pubsub.recon
|
|
||||||
|
|
||||||
[account1]
|
|
||||||
jid=fritzy@recon
|
|
||||||
pass=testing123
|
|
||||||
server=
|
|
||||||
|
|
||||||
[account2]
|
|
||||||
jid=fritzy2@recon
|
|
||||||
pass=testing123
|
|
||||||
server=
|
|
@ -1,350 +0,0 @@
|
|||||||
"""
|
|
||||||
SleekXMPP: The Sleek XMPP Library
|
|
||||||
Copyright (C) 2010 Nathanael C. Fritz
|
|
||||||
This file is part of SleekXMPP.
|
|
||||||
|
|
||||||
See the file LICENSE for copying permission.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import logging
|
|
||||||
import sleekxmpp
|
|
||||||
from optparse import OptionParser
|
|
||||||
from xml.etree import cElementTree as ET
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import sys
|
|
||||||
import Queue
|
|
||||||
import thread
|
|
||||||
|
|
||||||
|
|
||||||
class testps(sleekxmpp.ClientXMPP):
|
|
||||||
def __init__(self, jid, password, ssl=False, plugin_config = {}, plugin_whitelist=[], nodenum=0, pshost=None):
|
|
||||||
sleekxmpp.ClientXMPP.__init__(self, jid, password, ssl, plugin_config, plugin_whitelist)
|
|
||||||
self.registerPlugin('xep_0004')
|
|
||||||
self.registerPlugin('xep_0030')
|
|
||||||
self.registerPlugin('xep_0060')
|
|
||||||
self.registerPlugin('xep_0092')
|
|
||||||
self.add_handler("<message xmlns='jabber:client'><event xmlns='http://jabber.org/protocol/pubsub#event' /></message>", self.pubsubEventHandler, name='Pubsub Event', threaded=True)
|
|
||||||
self.add_event_handler("session_start", self.start, threaded=True)
|
|
||||||
self.add_handler("<iq type='error' />", self.handleError, name='Iq Error')
|
|
||||||
self.events = Queue.Queue()
|
|
||||||
self.default_config = None
|
|
||||||
self.ps = self.plugin['xep_0060']
|
|
||||||
self.node = "pstestnode_%s"
|
|
||||||
self.pshost = pshost
|
|
||||||
if pshost is None:
|
|
||||||
self.pshost = self.boundjid.host
|
|
||||||
self.nodenum = int(nodenum)
|
|
||||||
self.leafnode = self.nodenum + 1
|
|
||||||
self.collectnode = self.nodenum + 2
|
|
||||||
self.lasterror = ''
|
|
||||||
self.sprintchars = 0
|
|
||||||
self.defaultconfig = None
|
|
||||||
self.tests = ['test_defaultConfig', 'test_createDefaultNode', 'test_getNodes', 'test_deleteNode', 'test_createWithConfig', 'test_reconfigureNode', 'test_subscribeToNode', 'test_addItem', 'test_updateItem', 'test_deleteItem', 'test_unsubscribeNode', 'test_createCollection', 'test_subscribeCollection', 'test_addNodeCollection', 'test_deleteNodeCollection', 'test_addCollectionNode', 'test_deleteCollectionNode', 'test_unsubscribeNodeCollection', 'test_deleteCollection']
|
|
||||||
self.passed = 0
|
|
||||||
self.width = 120
|
|
||||||
|
|
||||||
def start(self, event):
|
|
||||||
#TODO: make this configurable
|
|
||||||
self.getRoster()
|
|
||||||
self.sendPresence(ppriority=20)
|
|
||||||
thread.start_new(self.test_all, tuple())
|
|
||||||
|
|
||||||
def sprint(self, msg, end=False, color=False):
|
|
||||||
length = len(msg)
|
|
||||||
if color:
|
|
||||||
if color == "red":
|
|
||||||
color = "1;31"
|
|
||||||
elif color == "green":
|
|
||||||
color = "0;32"
|
|
||||||
msg = "%s%s%s" % ("\033[%sm" % color, msg, "\033[0m")
|
|
||||||
if not end:
|
|
||||||
sys.stdout.write(msg)
|
|
||||||
self.sprintchars += length
|
|
||||||
else:
|
|
||||||
self.sprint("%s%s" % ("." * (self.width - self.sprintchars - length), msg))
|
|
||||||
print('')
|
|
||||||
self.sprintchars = 0
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
def pubsubEventHandler(self, xml):
|
|
||||||
for item in xml.findall('{http://jabber.org/protocol/pubsub#event}event/{http://jabber.org/protocol/pubsub#event}items/{http://jabber.org/protocol/pubsub#event}item'):
|
|
||||||
self.events.put(item.get('id', '__unknown__'))
|
|
||||||
for item in xml.findall('{http://jabber.org/protocol/pubsub#event}event/{http://jabber.org/protocol/pubsub#event}items/{http://jabber.org/protocol/pubsub#event}retract'):
|
|
||||||
self.events.put(item.get('id', '__unknown__'))
|
|
||||||
for item in xml.findall('{http://jabber.org/protocol/pubsub#event}event/{http://jabber.org/protocol/pubsub#event}collection/{http://jabber.org/protocol/pubsub#event}disassociate'):
|
|
||||||
self.events.put(item.get('node', '__unknown__'))
|
|
||||||
for item in xml.findall('{http://jabber.org/protocol/pubsub#event}event/{http://jabber.org/protocol/pubsub#event}collection/{http://jabber.org/protocol/pubsub#event}associate'):
|
|
||||||
self.events.put(item.get('node', '__unknown__'))
|
|
||||||
|
|
||||||
def handleError(self, xml):
|
|
||||||
error = xml.find('{jabber:client}error')
|
|
||||||
self.lasterror = error.getchildren()[0].tag.split('}')[-1]
|
|
||||||
|
|
||||||
def test_all(self):
|
|
||||||
print("Running Publish-Subscribe Tests")
|
|
||||||
version = self.plugin['xep_0092'].getVersion(self.pshost)
|
|
||||||
if version:
|
|
||||||
print("%s %s on %s" % (version.get('name', 'Unknown Server'), version.get('version', 'v?'), version.get('os', 'Unknown OS')))
|
|
||||||
print("=" * self.width)
|
|
||||||
for test in self.tests:
|
|
||||||
testfunc = getattr(self, test)
|
|
||||||
self.sprint("%s" % testfunc.__doc__)
|
|
||||||
if testfunc():
|
|
||||||
self.sprint("Passed", True, "green")
|
|
||||||
self.passed += 1
|
|
||||||
else:
|
|
||||||
if not self.lasterror:
|
|
||||||
self.lasterror = 'No response'
|
|
||||||
self.sprint("Failed (%s)" % self.lasterror, True, "red")
|
|
||||||
self.lasterror = ''
|
|
||||||
print("=" * self.width)
|
|
||||||
self.sprint("Cleaning up...")
|
|
||||||
#self.ps.deleteNode(self.pshost, self.node % self.nodenum)
|
|
||||||
self.ps.deleteNode(self.pshost, self.node % self.leafnode)
|
|
||||||
#self.ps.deleteNode(self.pshost, self.node % self.collectnode)
|
|
||||||
self.sprint("Done", True, "green")
|
|
||||||
self.disconnect()
|
|
||||||
self.sprint("%s" % self.passed, False, "green")
|
|
||||||
self.sprint("/%s Passed -- " % len(self.tests))
|
|
||||||
if len(self.tests) - self.passed:
|
|
||||||
self.sprint("%s" % (len(self.tests) - self.passed), False, "red")
|
|
||||||
else:
|
|
||||||
self.sprint("%s" % (len(self.tests) - self.passed), False, "green")
|
|
||||||
self.sprint(" Failed Tests")
|
|
||||||
print
|
|
||||||
#print "%s/%s Passed -- %s Failed Tests" % (self.passed, len(self.tests), len(self.tests) - self.passed)
|
|
||||||
|
|
||||||
def test_defaultConfig(self):
|
|
||||||
"Retreiving default configuration"
|
|
||||||
result = self.ps.getNodeConfig(self.pshost)
|
|
||||||
if result is False or result is None:
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
self.defaultconfig = result
|
|
||||||
try:
|
|
||||||
self.defaultconfig.field['pubsub#access_model'].setValue('open')
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
self.defaultconfig.field['pubsub#notify_retract'].setValue(True)
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
return True
|
|
||||||
|
|
||||||
def test_createDefaultNode(self):
|
|
||||||
"Creating default node"
|
|
||||||
return self.ps.create_node(self.pshost, self.node % self.nodenum)
|
|
||||||
|
|
||||||
def test_getNodes(self):
|
|
||||||
"Getting list of nodes"
|
|
||||||
self.ps.getNodes(self.pshost)
|
|
||||||
self.ps.getItems(self.pshost, 'blog')
|
|
||||||
return True
|
|
||||||
|
|
||||||
def test_deleteNode(self):
|
|
||||||
"Deleting node"
|
|
||||||
return self.ps.deleteNode(self.pshost, self.node % self.nodenum)
|
|
||||||
|
|
||||||
def test_createWithConfig(self):
|
|
||||||
"Creating node with config"
|
|
||||||
if self.defaultconfig is None:
|
|
||||||
self.lasterror = "No Avail Config"
|
|
||||||
return False
|
|
||||||
return self.ps.create_node(self.pshost, self.node % self.leafnode, self.defaultconfig)
|
|
||||||
|
|
||||||
def test_reconfigureNode(self):
|
|
||||||
"Retrieving node config and reconfiguring"
|
|
||||||
nconfig = self.ps.getNodeConfig(self.pshost, self.node % self.leafnode)
|
|
||||||
if nconfig == False:
|
|
||||||
return False
|
|
||||||
return self.ps.setNodeConfig(self.pshost, self.node % self.leafnode, nconfig)
|
|
||||||
|
|
||||||
def test_subscribeToNode(self):
|
|
||||||
"Subscribing to node"
|
|
||||||
return self.ps.subscribe(self.pshost, self.node % self.leafnode)
|
|
||||||
|
|
||||||
def test_addItem(self):
|
|
||||||
"Adding item, waiting for notification"
|
|
||||||
item = ET.Element('test')
|
|
||||||
result = self.ps.setItem(self.pshost, self.node % self.leafnode, (('test_node1', item),))
|
|
||||||
if result == False:
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
return False
|
|
||||||
if event == 'test_node1':
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_updateItem(self):
|
|
||||||
"Updating item, waiting for notification"
|
|
||||||
item = ET.Element('test')
|
|
||||||
item.attrib['crap'] = 'yup, right here'
|
|
||||||
result = self.ps.setItem(self.pshost, self.node % self.leafnode, (('test_node1', item),))
|
|
||||||
if result == False:
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
return False
|
|
||||||
if event == 'test_node1':
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_deleteItem(self):
|
|
||||||
"Deleting item, waiting for notification"
|
|
||||||
result = self.ps.deleteItem(self.pshost, self.node % self.leafnode, 'test_node1')
|
|
||||||
if result == False:
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
self.lasterror = "No Notification"
|
|
||||||
return False
|
|
||||||
if event == 'test_node1':
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_unsubscribeNode(self):
|
|
||||||
"Unsubscribing from node"
|
|
||||||
return self.ps.unsubscribe(self.pshost, self.node % self.leafnode)
|
|
||||||
|
|
||||||
def test_createCollection(self):
|
|
||||||
"Creating collection node"
|
|
||||||
return self.ps.create_node(self.pshost, self.node % self.collectnode, self.defaultconfig, True)
|
|
||||||
|
|
||||||
def test_subscribeCollection(self):
|
|
||||||
"Subscribing to collection node"
|
|
||||||
return self.ps.subscribe(self.pshost, self.node % self.collectnode)
|
|
||||||
|
|
||||||
def test_addNodeCollection(self):
|
|
||||||
"Assigning node to collection, waiting for notification"
|
|
||||||
config = self.ps.getNodeConfig(self.pshost, self.node % self.leafnode)
|
|
||||||
if not config or config is None:
|
|
||||||
self.lasterror = "Config Error"
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
config.field['pubsub#collection'].setValue(self.node % self.collectnode)
|
|
||||||
except KeyError:
|
|
||||||
self.sprint("...Missing Field...", False, "red")
|
|
||||||
config.addField('pubsub#collection', value=self.node % self.collectnode)
|
|
||||||
if not self.ps.setNodeConfig(self.pshost, self.node % self.leafnode, config):
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
self.lasterror = "No Notification"
|
|
||||||
return False
|
|
||||||
if event == self.node % self.leafnode:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_deleteNodeCollection(self):
|
|
||||||
"Removing node assignment to collection, waiting for notification"
|
|
||||||
config = self.ps.getNodeConfig(self.pshost, self.node % self.leafnode)
|
|
||||||
if not config or config is None:
|
|
||||||
self.lasterror = "Config Error"
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
config.field['pubsub#collection'].delValue(self.node % self.collectnode)
|
|
||||||
except KeyError:
|
|
||||||
self.sprint("...Missing Field...", False, "red")
|
|
||||||
config.addField('pubsub#collection', value='')
|
|
||||||
if not self.ps.setNodeConfig(self.pshost, self.node % self.leafnode, config):
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
self.lasterror = "No Notification"
|
|
||||||
return False
|
|
||||||
if event == self.node % self.leafnode:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_addCollectionNode(self):
|
|
||||||
"Assigning node from collection, waiting for notification"
|
|
||||||
config = self.ps.getNodeConfig(self.pshost, self.node % self.collectnode)
|
|
||||||
if not config or config is None:
|
|
||||||
self.lasterror = "Config Error"
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
config.field['pubsub#children'].setValue(self.node % self.leafnode)
|
|
||||||
except KeyError:
|
|
||||||
self.sprint("...Missing Field...", False, "red")
|
|
||||||
config.addField('pubsub#children', value=self.node % self.leafnode)
|
|
||||||
if not self.ps.setNodeConfig(self.pshost, self.node % self.collectnode, config):
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
self.lasterror = "No Notification"
|
|
||||||
return False
|
|
||||||
if event == self.node % self.leafnode:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_deleteCollectionNode(self):
|
|
||||||
"Removing node from collection, waiting for notification"
|
|
||||||
config = self.ps.getNodeConfig(self.pshost, self.node % self.collectnode)
|
|
||||||
if not config or config is None:
|
|
||||||
self.lasterror = "Config Error"
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
config.field['pubsub#children'].delValue(self.node % self.leafnode)
|
|
||||||
except KeyError:
|
|
||||||
self.sprint("...Missing Field...", False, "red")
|
|
||||||
config.addField('pubsub#children', value='')
|
|
||||||
if not self.ps.setNodeConfig(self.pshost, self.node % self.collectnode, config):
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
event = self.events.get(True, 10)
|
|
||||||
except Queue.Empty:
|
|
||||||
self.lasterror = "No Notification"
|
|
||||||
return False
|
|
||||||
if event == self.node % self.leafnode:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_unsubscribeNodeCollection(self):
|
|
||||||
"Unsubscribing from collection"
|
|
||||||
return self.ps.unsubscribe(self.pshost, self.node % self.collectnode)
|
|
||||||
|
|
||||||
def test_deleteCollection(self):
|
|
||||||
"Deleting collection"
|
|
||||||
return self.ps.deleteNode(self.pshost, self.node % self.collectnode)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
#parse command line arguements
|
|
||||||
optp = OptionParser()
|
|
||||||
optp.add_option('-q','--quiet', help='set logging to ERROR', action='store_const', dest='loglevel', const=logging.ERROR, default=logging.INFO)
|
|
||||||
optp.add_option('-d','--debug', help='set logging to DEBUG', action='store_const', dest='loglevel', const=logging.DEBUG, default=logging.INFO)
|
|
||||||
optp.add_option('-v','--verbose', help='set logging to COMM', action='store_const', dest='loglevel', const=5, default=logging.INFO)
|
|
||||||
optp.add_option("-c","--config", dest="configfile", default="config.xml", help="set config file to use")
|
|
||||||
optp.add_option("-n","--nodenum", dest="nodenum", default="1", help="set node number to use")
|
|
||||||
optp.add_option("-p","--pubsub", dest="pubsub", default="1", help="set pubsub host to use")
|
|
||||||
opts,args = optp.parse_args()
|
|
||||||
|
|
||||||
logging.basicConfig(level=opts.loglevel, format='%(levelname)-8s %(message)s')
|
|
||||||
|
|
||||||
#load xml config
|
|
||||||
logging.info("Loading config file: %s" % opts.configfile)
|
|
||||||
config = ET.parse(os.path.expanduser(opts.configfile)).find('auth')
|
|
||||||
|
|
||||||
#init
|
|
||||||
logging.info("Logging in as %s" % config.attrib['jid'])
|
|
||||||
|
|
||||||
|
|
||||||
plugin_config = {}
|
|
||||||
plugin_config['xep_0092'] = {'name': 'SleekXMPP Example', 'version': '0.1-dev'}
|
|
||||||
plugin_config['xep_0199'] = {'keepalive': True, 'timeout': 30, 'frequency': 300}
|
|
||||||
|
|
||||||
con = testps(config.attrib['jid'], config.attrib['pass'], plugin_config=plugin_config, plugin_whitelist=[], nodenum=opts.nodenum, pshost=opts.pubsub)
|
|
||||||
if not config.get('server', None):
|
|
||||||
# we don't know the server, but the lib can probably figure it out
|
|
||||||
con.connect()
|
|
||||||
else:
|
|
||||||
con.connect((config.attrib['server'], 5222))
|
|
||||||
con.process(threaded=False)
|
|
||||||
print("")
|
|
1
docs/.gitignore
vendored
Normal file
1
docs/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
_build/*
|
130
docs/Makefile
Normal file
130
docs/Makefile
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -rf $(BUILDDIR)/*
|
||||||
|
|
||||||
|
html:
|
||||||
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Slixmpp.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Slixmpp.qhc"
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/Slixmpp"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Slixmpp"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
make -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
doctest:
|
||||||
|
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||||
|
@echo "Testing of doctests in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/doctest/output.txt."
|
BIN
docs/_static/images/arch_layers.png
vendored
Normal file
BIN
docs/_static/images/arch_layers.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
docs/_static/images/from_&yet.png
vendored
Normal file
BIN
docs/_static/images/from_&yet.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
88
docs/api/api.rst
Normal file
88
docs/api/api.rst
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
.. _internal-api:
|
||||||
|
|
||||||
|
Internal "API"
|
||||||
|
==============
|
||||||
|
|
||||||
|
Slixmpp has a generic API registry that can be used by its plugins to allow
|
||||||
|
access control, redefinition of behaviour, without having to inherit from the
|
||||||
|
plugin or do more dark magic.
|
||||||
|
|
||||||
|
The idea is that each api call can be replaced, most of them use a form
|
||||||
|
of in-memory storage that can be, for example, replaced with database
|
||||||
|
or file-based storaged.
|
||||||
|
|
||||||
|
|
||||||
|
Each plugin is assigned an API proxy bound to itself, but only a few make use
|
||||||
|
of it.
|
||||||
|
|
||||||
|
See also :ref:`api-simple-tuto`.
|
||||||
|
|
||||||
|
Description of a generic API call
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def get_toto(jid, node, ifrom, args):
|
||||||
|
return 'toto'
|
||||||
|
|
||||||
|
self.xmpp.plugin['xep_XXXX'].api.register(handler, 'get_toto')
|
||||||
|
|
||||||
|
Each API call will receive 4 parameters (which can be ``None`` if data
|
||||||
|
is not relevant to the operation), which are ``jid`` (``Optional[JID]``),
|
||||||
|
``node`` (``Optional[str]``), ``ifrom`` (``Optional[JID]``), and ``args``
|
||||||
|
(``Any``).
|
||||||
|
|
||||||
|
- ``jid``, if relevant, represents the JID targeted by that operation
|
||||||
|
- ``node``, if relevant is an arbitrary string, but was thought for, e.g.,
|
||||||
|
a pubsub or disco node.
|
||||||
|
- ``ifrom``, if relevant, is the JID the event is coming from.
|
||||||
|
- ``args`` is the event-specific data passed on by the plugin, often a dict
|
||||||
|
of arguments (can be None as well).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Since 1.8.0, API calls can be coroutines.
|
||||||
|
|
||||||
|
|
||||||
|
Handler hierarchy
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The ``self.api.register()`` signature is as follows:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def register(handler, op, jid=None, node=None, default=False):
|
||||||
|
pass
|
||||||
|
|
||||||
|
As you can see, :meth:`~.APIRegistry.register` takes an additional ctype
|
||||||
|
parameter, but the :class:`~.APIWrapper` takes care of that for us (in most
|
||||||
|
cases, it is the name of the XEP plugin, such as ``'xep_0XXX'``).
|
||||||
|
|
||||||
|
When you register a handler, you register it for an ``op``, for **operation**.
|
||||||
|
For example, ``get_vcard``.
|
||||||
|
|
||||||
|
``handler`` and ``op`` are the only two required parameters (and in many cases,
|
||||||
|
all you will ever need). You can, however, go further and register handlers
|
||||||
|
for specific values of the ``jid`` and ``node`` parameters of the calls.
|
||||||
|
|
||||||
|
The priority of the execution of handlers is as follows:
|
||||||
|
|
||||||
|
- Check if a handler for both values of ``node`` and ``jid`` has been defined
|
||||||
|
- If not found, check if a handler for this value of ``jid`` has been defined
|
||||||
|
- If not found, check if a handler for this value of ``node`` has been defined
|
||||||
|
- If still not found, get the global handler (no parameter registered)
|
||||||
|
|
||||||
|
|
||||||
|
Raw documentation
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This documentation is provided for reference, but :meth:`~.APIRegistry.register`
|
||||||
|
should be all you need.
|
||||||
|
|
||||||
|
|
||||||
|
.. module:: slixmpp.api
|
||||||
|
|
||||||
|
.. autoclass:: APIRegistry
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autoclass:: APIWrapper
|
||||||
|
|
8
docs/api/basexmpp.rst
Normal file
8
docs/api/basexmpp.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
========
|
||||||
|
BaseXMPP
|
||||||
|
========
|
||||||
|
|
||||||
|
.. module:: slixmpp.basexmpp
|
||||||
|
|
||||||
|
.. autoclass:: BaseXMPP
|
||||||
|
:members:
|
8
docs/api/clientxmpp.rst
Normal file
8
docs/api/clientxmpp.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
==========
|
||||||
|
ClientXMPP
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. module:: slixmpp.clientxmpp
|
||||||
|
|
||||||
|
.. autoclass:: ClientXMPP
|
||||||
|
:members:
|
8
docs/api/componentxmpp.rst
Normal file
8
docs/api/componentxmpp.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
=============
|
||||||
|
ComponentXMPP
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. module:: slixmpp.componentxmpp
|
||||||
|
|
||||||
|
.. autoclass:: ComponentXMPP
|
||||||
|
:members:
|
14
docs/api/exceptions.rst
Normal file
14
docs/api/exceptions.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Exceptions
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. module:: slixmpp.exceptions
|
||||||
|
|
||||||
|
|
||||||
|
.. autoexception:: XMPPError
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autoexception:: IqError
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autoexception:: IqTimeout
|
||||||
|
:members:
|
17
docs/api/index.rst
Normal file
17
docs/api/index.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 3
|
||||||
|
|
||||||
|
clientxmpp
|
||||||
|
componentxmpp
|
||||||
|
basexmpp
|
||||||
|
exceptions
|
||||||
|
xmlstream/jid
|
||||||
|
xmlstream/stanzabase
|
||||||
|
xmlstream/handler
|
||||||
|
xmlstream/matcher
|
||||||
|
xmlstream/xmlstream
|
||||||
|
xmlstream/tostring
|
||||||
|
api
|
111
docs/api/plugins/index.rst
Normal file
111
docs/api/plugins/index.rst
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
Plugin index
|
||||||
|
============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
xep_0004
|
||||||
|
xep_0009
|
||||||
|
xep_0012
|
||||||
|
xep_0013
|
||||||
|
xep_0020
|
||||||
|
xep_0027
|
||||||
|
xep_0030
|
||||||
|
xep_0033
|
||||||
|
xep_0045
|
||||||
|
xep_0047
|
||||||
|
xep_0049
|
||||||
|
xep_0050
|
||||||
|
xep_0054
|
||||||
|
xep_0055
|
||||||
|
xep_0059
|
||||||
|
xep_0060
|
||||||
|
xep_0065
|
||||||
|
xep_0066
|
||||||
|
xep_0070
|
||||||
|
xep_0071
|
||||||
|
xep_0077
|
||||||
|
xep_0079
|
||||||
|
xep_0080
|
||||||
|
xep_0082
|
||||||
|
xep_0084
|
||||||
|
xep_0085
|
||||||
|
xep_0086
|
||||||
|
xep_0092
|
||||||
|
xep_0100
|
||||||
|
xep_0106
|
||||||
|
xep_0107
|
||||||
|
xep_0108
|
||||||
|
xep_0115
|
||||||
|
xep_0118
|
||||||
|
xep_0122
|
||||||
|
xep_0128
|
||||||
|
xep_0131
|
||||||
|
xep_0133
|
||||||
|
xep_0152
|
||||||
|
xep_0153
|
||||||
|
xep_0163
|
||||||
|
xep_0172
|
||||||
|
xep_0184
|
||||||
|
xep_0186
|
||||||
|
xep_0191
|
||||||
|
xep_0196
|
||||||
|
xep_0198
|
||||||
|
xep_0199
|
||||||
|
xep_0202
|
||||||
|
xep_0203
|
||||||
|
xep_0221
|
||||||
|
xep_0222
|
||||||
|
xep_0223
|
||||||
|
xep_0224
|
||||||
|
xep_0231
|
||||||
|
xep_0235
|
||||||
|
xep_0249
|
||||||
|
xep_0256
|
||||||
|
xep_0257
|
||||||
|
xep_0258
|
||||||
|
xep_0264
|
||||||
|
xep_0279
|
||||||
|
xep_0280
|
||||||
|
xep_0292
|
||||||
|
xep_0297
|
||||||
|
xep_0300
|
||||||
|
xep_0308
|
||||||
|
xep_0313
|
||||||
|
xep_0317
|
||||||
|
xep_0319
|
||||||
|
xep_0332
|
||||||
|
xep_0333
|
||||||
|
xep_0334
|
||||||
|
xep_0335
|
||||||
|
xep_0352
|
||||||
|
xep_0353
|
||||||
|
xep_0356
|
||||||
|
xep_0359
|
||||||
|
xep_0363
|
||||||
|
xep_0369
|
||||||
|
xep_0372
|
||||||
|
xep_0377
|
||||||
|
xep_0380
|
||||||
|
xep_0382
|
||||||
|
xep_0385
|
||||||
|
xep_0394
|
||||||
|
xep_0402
|
||||||
|
xep_0403
|
||||||
|
xep_0404
|
||||||
|
xep_0405
|
||||||
|
xep_0421
|
||||||
|
xep_0422
|
||||||
|
xep_0424
|
||||||
|
xep_0425
|
||||||
|
xep_0428
|
||||||
|
xep_0437
|
||||||
|
xep_0439
|
||||||
|
xep_0441
|
||||||
|
xep_0444
|
||||||
|
xep_0446
|
||||||
|
xep_0447
|
||||||
|
xep_0461
|
||||||
|
xep_0469
|
||||||
|
xep_0490
|
||||||
|
xep_0492
|
21
docs/api/plugins/xep_0004.rst
Normal file
21
docs/api/plugins/xep_0004.rst
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
XEP-0004: Data Forms
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0004
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0004
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0004.stanza.field
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0004.stanza.form
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
18
docs/api/plugins/xep_0009.rst
Normal file
18
docs/api/plugins/xep_0009.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0009: Jabber-RPC
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0009
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0009
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0009.stanza.RPC
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
56
docs/api/plugins/xep_0012.rst
Normal file
56
docs/api/plugins/xep_0012.rst
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
XEP-0012: Last Activity
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0012
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0012
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
.. _api-0012:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
This plugin uses an in-memory storage by default to keep track of the
|
||||||
|
received and sent last activities.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
get_last_activity
|
||||||
|
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: who the request is from (None = local)
|
||||||
|
- **args**: ``None`` or an :class:`~.Iq` that is requesting the
|
||||||
|
- **returns**
|
||||||
|
information.
|
||||||
|
|
||||||
|
Get the last activity of a JID from the storage.
|
||||||
|
|
||||||
|
set_last_activity
|
||||||
|
- **jid**: :class:`~.JID` of whom to set the last activity
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: A dict containing ``'seconds'`` and ``'status'``
|
||||||
|
``{'seconds': Optional[int], 'status': Optional[str]}``
|
||||||
|
|
||||||
|
Set the last activity of a JID in the storage.
|
||||||
|
|
||||||
|
del_last_activity
|
||||||
|
- **jid**: :class:`~.JID` to delete from the storage
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Remove the last activity of a JID from the storage.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0012.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0013.rst
Normal file
18
docs/api/plugins/xep_0013.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0013: Flexible Offline Message Retrieval
|
||||||
|
============================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0013
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0013
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0013.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0020.rst
Normal file
18
docs/api/plugins/xep_0020.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0020: Feature Negotiation
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0020
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0020
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0020.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
62
docs/api/plugins/xep_0027.rst
Normal file
62
docs/api/plugins/xep_0027.rst
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
XEP-0027: Current Jabber OpenPGP Usage
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0027
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0027
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
.. _api-0027:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The default API here is managing a JID→Keyid dict in-memory.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
get_keyid
|
||||||
|
- **jid**: :class:`~.JID` to get.
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: ``Optional[str]``, the keyid or None
|
||||||
|
|
||||||
|
Get the KeyiD for a JID, None if it is not found.
|
||||||
|
|
||||||
|
set_keyid
|
||||||
|
- **jid**: :class:`~.JID` to set the id for.
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: ``str``, keyid to set
|
||||||
|
|
||||||
|
Set the KeyiD for a JID.
|
||||||
|
|
||||||
|
del_keyid
|
||||||
|
- **jid**: :class:`~.JID` to delete from the mapping.
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Delete the KeyiD for a JID.
|
||||||
|
|
||||||
|
get_keyids
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: ``Dict[JID, str]`` the full internal mapping
|
||||||
|
|
||||||
|
Get all currently stored KeyIDs.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0027.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
39
docs/api/plugins/xep_0030.rst
Normal file
39
docs/api/plugins/xep_0030.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
XEP-0030: Service Discovery
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0030
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0030
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
.. _api-0030:
|
||||||
|
|
||||||
|
Internal API Methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
All ``api`` operations supported by the 0030 plugin are implemented as part of
|
||||||
|
the :class:`~.StaticDisco` class which implement an in-memory cache for disco
|
||||||
|
info and items.
|
||||||
|
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0030.static
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0030.stanza.info
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0030.stanza.items
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0033.rst
Normal file
18
docs/api/plugins/xep_0033.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0033: Extended Stanza Addressing
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0033
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0033
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0033.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
19
docs/api/plugins/xep_0045.rst
Normal file
19
docs/api/plugins/xep_0045.rst
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
XEP-0045: Multi-User Chat
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0045
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0045
|
||||||
|
:member-order: bysource
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0045.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
89
docs/api/plugins/xep_0047.rst
Normal file
89
docs/api/plugins/xep_0047.rst
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
XEP-0047: In-band Bytestreams
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0047
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0047
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. autoclass:: IBBytestream
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. _api-0047:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The API here is used to manage streams and authorize. The default handlers
|
||||||
|
work with the config parameters.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
authorized_sid (0047 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: :class:`~.Iq` of the stream request.
|
||||||
|
- **returns**: ``True`` if the stream should be accepted,
|
||||||
|
``False`` otherwise.
|
||||||
|
|
||||||
|
Check if the stream should be accepted. Uses
|
||||||
|
the information setup by :term:`preauthorize_sid (0047 version)`
|
||||||
|
by default.
|
||||||
|
|
||||||
|
authorized (0047 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: :class:`~.Iq` of the stream request.
|
||||||
|
- **returns**: ``True`` if the stream should be accepted,
|
||||||
|
``False`` otherwise.
|
||||||
|
|
||||||
|
A fallback handler (run after :term:`authorized_sid (0047 version)`)
|
||||||
|
to check if a stream should be accepted. Uses the ``auto_accept``
|
||||||
|
parameter by default.
|
||||||
|
|
||||||
|
preauthorize_sid (0047 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream will be from.
|
||||||
|
- **args**: Unused.
|
||||||
|
|
||||||
|
Register a stream id to be accepted automatically (called from
|
||||||
|
other plugins such as XEP-0095).
|
||||||
|
|
||||||
|
get_stream
|
||||||
|
- **jid**: :class:`~.JID` of local receiver.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: :class:`~.IBBytestream`
|
||||||
|
|
||||||
|
Return a currently opened stream between two JIDs.
|
||||||
|
|
||||||
|
set_stream
|
||||||
|
- **jid**: :class:`~.JID` of local receiver.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Register an opened stream between two JIDs.
|
||||||
|
|
||||||
|
del_stream
|
||||||
|
- **jid**: :class:`~.JID` of local receiver.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Delete a stream between two JIDs.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0047.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0049.rst
Normal file
18
docs/api/plugins/xep_0049.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0049: Private XML Storage
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0049
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0049
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0049.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0050.rst
Normal file
18
docs/api/plugins/xep_0050.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0050: Ad-Hoc Commands
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0050
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0050
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0050.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
52
docs/api/plugins/xep_0054.rst
Normal file
52
docs/api/plugins/xep_0054.rst
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
XEP-0054: vcard-temp
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0054
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0054
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0054:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
This plugin maintains by default an in-memory cache of the received
|
||||||
|
VCards.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
set_vcard
|
||||||
|
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: :class:`~.VCardTemp` object to store for this JID.
|
||||||
|
|
||||||
|
Set a VCard for a JID.
|
||||||
|
|
||||||
|
get_vcard
|
||||||
|
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: :class:`~.JID` the request is coming from
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: :class:`~.VCardTemp` object for this JID or None.
|
||||||
|
|
||||||
|
Get a stored VCard for a JID.
|
||||||
|
|
||||||
|
del_vcard
|
||||||
|
- **jid**: :class:`~.JID` of whom to set the vcard
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Delete a stored VCard for a JID.
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0054.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0055.rst
Normal file
18
docs/api/plugins/xep_0055.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0055: Jabber search
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0055
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0055
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0055.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
21
docs/api/plugins/xep_0059.rst
Normal file
21
docs/api/plugins/xep_0059.rst
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
XEP-0059: Result Set Management
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0059
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0059
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. autoclass:: ResultIterator
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0059.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
37
docs/api/plugins/xep_0060.rst
Normal file
37
docs/api/plugins/xep_0060.rst
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
XEP-0060: Publish-Subscribe
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0060
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0060
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0060.stanza.base
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_errors
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_owner
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0060.stanza.pubsub_event
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
60
docs/api/plugins/xep_0065.rst
Normal file
60
docs/api/plugins/xep_0065.rst
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
XEP-0065: SOCKS5 Bytestreams
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0065
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0065
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0065:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The internal API is used here to authorize or pre-authorize streams.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
authorized_sid (0065 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: :class:`~.Iq` of the stream request.
|
||||||
|
- **returns**: ``True`` if the stream should be accepted,
|
||||||
|
``False`` otherwise.
|
||||||
|
|
||||||
|
Check if the stream should be accepted. Uses
|
||||||
|
the information setup by :term:`preauthorize_sid (0065 version)`
|
||||||
|
by default.
|
||||||
|
|
||||||
|
authorized (0065 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream is from.
|
||||||
|
- **args**: :class:`~.Iq` of the stream request.
|
||||||
|
- **returns**: ``True`` if the stream should be accepted,
|
||||||
|
``False`` otherwise.
|
||||||
|
|
||||||
|
A fallback handler (run after :term:`authorized_sid (0065 version)`)
|
||||||
|
to check if a stream should be accepted. Uses the ``auto_accept``
|
||||||
|
parameter by default.
|
||||||
|
|
||||||
|
preauthorize_sid (0065 version)
|
||||||
|
- **jid**: :class:`~.JID` receiving the stream initiation.
|
||||||
|
- **node**: stream id
|
||||||
|
- **ifrom**: who the stream will be from.
|
||||||
|
- **args**: Unused.
|
||||||
|
|
||||||
|
Register a stream id to be accepted automatically (called from
|
||||||
|
other plugins such as XEP-0095).
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0065.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0066.rst
Normal file
18
docs/api/plugins/xep_0066.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0066: Out of Band Data
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0066
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0066
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0066.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0070.rst
Normal file
18
docs/api/plugins/xep_0070.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0070: Verifying HTTP Requests via XMPP
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0070
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0070
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0070.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0071.rst
Normal file
18
docs/api/plugins/xep_0071.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0071: XHTML-IM
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0071
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0071
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0071.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
65
docs/api/plugins/xep_0077.rst
Normal file
65
docs/api/plugins/xep_0077.rst
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
XEP-0077: In-Band Registration
|
||||||
|
==============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0077
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0077
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
Internal APi methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The API here is made to allow components to manage registered users.
|
||||||
|
The default handlers make use of the plugin options and store users
|
||||||
|
in memory.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
user_get
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: who the request is coming from
|
||||||
|
- **args**: :class:`~.Iq` registration request.
|
||||||
|
- **returns**: ``dict`` containing user data or None.
|
||||||
|
|
||||||
|
Get user data for a user.
|
||||||
|
|
||||||
|
user_validate
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: who the request is coming from
|
||||||
|
- **args**: :class:`~.Iq` registration request, 'register' payload.
|
||||||
|
- **raises**: ValueError if some fields are invalid
|
||||||
|
|
||||||
|
Validate form fields and save user data.
|
||||||
|
|
||||||
|
user_remove
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: who the request is coming from
|
||||||
|
- **args**: :class:`~.Iq` registration removal request.
|
||||||
|
- **raises**: KeyError if the user is not found.
|
||||||
|
|
||||||
|
Remove a user from the store.
|
||||||
|
|
||||||
|
make_registration_form
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: who the request is coming from
|
||||||
|
- **args**: :class:`~.Iq` registration request.
|
||||||
|
- **raises**: KeyError if the user is not found.
|
||||||
|
|
||||||
|
Return an :class:`~.Iq` reply for the request, with a form and
|
||||||
|
options set. By default, use ``form_fields`` and ``form_instructions``
|
||||||
|
plugin config options.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0077.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0079.rst
Normal file
18
docs/api/plugins/xep_0079.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0079: Advanced Message Processing
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0079
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0079
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0079.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0080.rst
Normal file
18
docs/api/plugins/xep_0080.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0080: User Location
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0080
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0080
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0080.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0082.rst
Normal file
9
docs/api/plugins/xep_0082.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0082: XMPP Date and Time Profiles
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0082
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0082
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0084.rst
Normal file
18
docs/api/plugins/xep_0084.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0084: User Avatar
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0084
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0084
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0084.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0085.rst
Normal file
18
docs/api/plugins/xep_0085.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0085: Chat State Notifications
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0085
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0085
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0085.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0086.rst
Normal file
18
docs/api/plugins/xep_0086.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0086: Error Condition Mappings
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0086
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0086
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0086.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0092.rst
Normal file
18
docs/api/plugins/xep_0092.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0092: Software Version
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0092
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0092
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0092.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0100.rst
Normal file
9
docs/api/plugins/xep_0100.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0100: Gateway interaction
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0100
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0100
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
9
docs/api/plugins/xep_0106.rst
Normal file
9
docs/api/plugins/xep_0106.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0106: JID Escaping
|
||||||
|
======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0106
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0106
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0107.rst
Normal file
18
docs/api/plugins/xep_0107.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0107: User Mood
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0107
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0107
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0107.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0108.rst
Normal file
18
docs/api/plugins/xep_0108.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0108: User Activity
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0108
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0108
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0108.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
66
docs/api/plugins/xep_0115.rst
Normal file
66
docs/api/plugins/xep_0115.rst
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
XEP-0115: Entity Capabilities
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0115
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0115
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0115:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
This internal API extends the Disco internal API, and also manages an
|
||||||
|
in-memory cache of verstring→disco info, and fulljid→verstring.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
cache_caps
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: a ``dict`` containing the verstring and
|
||||||
|
:class:`~.DiscoInfo` payload (
|
||||||
|
``{'verstring': Optional[str], 'info': Optional[DiscoInfo]}``)
|
||||||
|
|
||||||
|
Cache a verification string with its payload.
|
||||||
|
|
||||||
|
get_caps
|
||||||
|
- **jid**: JID to retrieve the verstring for (unused with the default
|
||||||
|
handler)
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: a ``dict`` containing the verstring
|
||||||
|
``{'verstring': str}``
|
||||||
|
- **returns**: The :class:`~.DiscoInfo` payload for that verstring.
|
||||||
|
|
||||||
|
Get a disco payload from a verstring.
|
||||||
|
|
||||||
|
assign_verstring
|
||||||
|
- **jid**: :class:`~.JID` (full) to assign the verstring to
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: a ``dict`` containing the verstring
|
||||||
|
``{'verstring': str}``
|
||||||
|
|
||||||
|
Cache JID→verstring information.
|
||||||
|
|
||||||
|
get_verstring
|
||||||
|
- **jid**: :class:`~.JID` to use for fetching the verstring
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: ``str``, the verstring
|
||||||
|
|
||||||
|
Retrieve a verstring for a JID.
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0115.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0118.rst
Normal file
18
docs/api/plugins/xep_0118.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0118: User Tune
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0118
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0118
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0118.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0122.rst
Normal file
18
docs/api/plugins/xep_0122.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0122: Data Forms Validation
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0122
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0122
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0122.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
44
docs/api/plugins/xep_0128.rst
Normal file
44
docs/api/plugins/xep_0128.rst
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
XEP-0128: Service Discovery Extensions
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0128
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0128
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0128:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
add_extended_info
|
||||||
|
- **jid**: JID to set the extended info for
|
||||||
|
- **node**: note to set the info at
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: A :class:`~.Form` or list of forms to add to the disco
|
||||||
|
extended info for this JID/node.
|
||||||
|
|
||||||
|
Add extended info for a JID/node.
|
||||||
|
|
||||||
|
set_extended_info
|
||||||
|
- **jid**: JID to set the extended info for
|
||||||
|
- **node**: note to set the info at
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: A :class:`~.Form` or list of forms to set as the disco
|
||||||
|
extended info for this JID/node.
|
||||||
|
|
||||||
|
Set extended info for a JID/node.
|
||||||
|
|
||||||
|
del_extended_info
|
||||||
|
- **jid**: JID to delete the extended info from
|
||||||
|
- **node**: note to delete the info from
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
|
||||||
|
Delete extended info for a JID/node.
|
18
docs/api/plugins/xep_0131.rst
Normal file
18
docs/api/plugins/xep_0131.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0131: Stanza Headers and Internet Metadata
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0131
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0131
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0131.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0133.rst
Normal file
9
docs/api/plugins/xep_0133.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0133: Service Administration
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0133
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0133
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0152.rst
Normal file
18
docs/api/plugins/xep_0152.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0152: Reachability Addresses
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0152
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0152
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0152.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
55
docs/api/plugins/xep_0153.rst
Normal file
55
docs/api/plugins/xep_0153.rst
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
|
||||||
|
XEP-0153: vCard-Based Avatars
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0153
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0153
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0153:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The internal API is used here to maintain an in-memory JID→avatar hash
|
||||||
|
cache.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
set_hash
|
||||||
|
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: ``str``, avatar hash
|
||||||
|
|
||||||
|
Set the avatar hash for a JID.
|
||||||
|
|
||||||
|
reset_hash
|
||||||
|
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: :class:`~.JID` of the entity requesting the reset.
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**
|
||||||
|
information.
|
||||||
|
|
||||||
|
Reset the avatar hash for a JID. This downloads the vcard and computes
|
||||||
|
the hash.
|
||||||
|
|
||||||
|
get_hash
|
||||||
|
- **jid**: :class:`~.JID` of whom to retrieve the last activity
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: unused
|
||||||
|
- **returns**: ``Optional[str]``, the avatar hash
|
||||||
|
|
||||||
|
Get the avatar hash for a JID.
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0153.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0163.rst
Normal file
9
docs/api/plugins/xep_0163.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0163: Personal Eventing Protocol (PEP)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0163
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0163
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0172.rst
Normal file
18
docs/api/plugins/xep_0172.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0172: User Nickname
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0172
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0172
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0172.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0184.rst
Normal file
18
docs/api/plugins/xep_0184.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0184: Message Delivery Receipts
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0184
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0184
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0184.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0186.rst
Normal file
18
docs/api/plugins/xep_0186.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0186: Invisible Command
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0186
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0186
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0186.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0191.rst
Normal file
18
docs/api/plugins/xep_0191.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0191: Blocking Command
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0191
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0191
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0191.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0196.rst
Normal file
18
docs/api/plugins/xep_0196.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0196: User Gaming
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0196
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0196
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0196.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0198.rst
Normal file
18
docs/api/plugins/xep_0198.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0198: Stream Management
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0198
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0198
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0198.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0199.rst
Normal file
18
docs/api/plugins/xep_0199.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0199: XMPP Ping
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0199
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0199
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0199.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0202.rst
Normal file
18
docs/api/plugins/xep_0202.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0202: Entity Time
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0202
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0202
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0202.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0203.rst
Normal file
18
docs/api/plugins/xep_0203.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0203: Delayed Delivery
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0203
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0203
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0203.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0221.rst
Normal file
18
docs/api/plugins/xep_0221.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0221: Data Forms Media Element
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0221
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0221
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0221.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0222.rst
Normal file
9
docs/api/plugins/xep_0222.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0222: Persistent Storage of Public Data via PubSub
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0222
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0222
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
9
docs/api/plugins/xep_0223.rst
Normal file
9
docs/api/plugins/xep_0223.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0223: Persistent Storage of Private Data via PubSub
|
||||||
|
=======================================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0223
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0223
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0224.rst
Normal file
18
docs/api/plugins/xep_0224.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0224: Attention
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0224
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0224
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0224.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
53
docs/api/plugins/xep_0231.rst
Normal file
53
docs/api/plugins/xep_0231.rst
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
XEP-0231: Bits of Binary
|
||||||
|
========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0231
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0231
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
.. _api-0231:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The default API handlers for this plugin manage an in-memory cache of
|
||||||
|
bits of binary by content-id.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
set_bob
|
||||||
|
- **jid**: :class:`~.JID` sending the bob
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: :class:`~JID` receiving the bob
|
||||||
|
- **args**: :class:`~.BitsOfBinary` element.
|
||||||
|
|
||||||
|
Set a BoB in the cache.
|
||||||
|
|
||||||
|
get_bob
|
||||||
|
- **jid**: :class:`~.JID` receiving the bob
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: :class:`~JID` sending the bob
|
||||||
|
- **args**: ``str`` content-id of the bob
|
||||||
|
- **returns**: :class:`~.BitsOfBinary` element.
|
||||||
|
|
||||||
|
Get a BoB from the cache.
|
||||||
|
|
||||||
|
del_bob
|
||||||
|
- **jid**: unused
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: :class:`~JID` sending the bob
|
||||||
|
- **args**: ``str`` content-id of the bob
|
||||||
|
|
||||||
|
Delete a BoB from the cache.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0231.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0235.rst
Normal file
18
docs/api/plugins/xep_0235.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0235: OAuth Over XMPP
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0235
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0235
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0235.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0249.rst
Normal file
18
docs/api/plugins/xep_0249.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0249: Direct MUC Invitations
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0249
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0249
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0249.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
9
docs/api/plugins/xep_0256.rst
Normal file
9
docs/api/plugins/xep_0256.rst
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
XEP-0256: Last Activity in Presence
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0256
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0256
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
18
docs/api/plugins/xep_0257.rst
Normal file
18
docs/api/plugins/xep_0257.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0257: Client Certificate Management for SASL EXTERNAL
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0257
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0257
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0257.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0258.rst
Normal file
18
docs/api/plugins/xep_0258.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0258: Security Labels in XMPP
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0258
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0258
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0258.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0264.rst
Normal file
18
docs/api/plugins/xep_0264.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0264: Jingle Content Thumbnails
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0264
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0264
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0264.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0279.rst
Normal file
18
docs/api/plugins/xep_0279.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0279: Server IP Check
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0279
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0279
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0279.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0280.rst
Normal file
18
docs/api/plugins/xep_0280.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0280: Message Carbons
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0280
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0280
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0280.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
17
docs/api/plugins/xep_0292.rst
Normal file
17
docs/api/plugins/xep_0292.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
XEP-0292: vCard4 Over XMPP
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0292
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0292
|
||||||
|
:members:
|
||||||
|
:exclude-members: plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0292.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
18
docs/api/plugins/xep_0297.rst
Normal file
18
docs/api/plugins/xep_0297.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0297: Stanza Forwarding
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0297
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0297
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0297.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0300.rst
Normal file
18
docs/api/plugins/xep_0300.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0300: Use of Cryptographic Hash Functions in XMPP
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0300
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0300
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0300.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0308.rst
Normal file
18
docs/api/plugins/xep_0308.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0308: Last Message Correction
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0308
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0308
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0308.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
19
docs/api/plugins/xep_0313.rst
Normal file
19
docs/api/plugins/xep_0313.rst
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
XEP-0313: Message Archive Management
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0313
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0313
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0313.stanza
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0317.rst
Normal file
18
docs/api/plugins/xep_0317.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0317: Hats
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0317
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0317
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0317.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
45
docs/api/plugins/xep_0319.rst
Normal file
45
docs/api/plugins/xep_0319.rst
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
XEP-0319: Last User Interaction in Presence
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0319
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0319
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
.. _api-0319:
|
||||||
|
|
||||||
|
Internal API methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The default API manages an in-memory cache of idle periods.
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
set_idle
|
||||||
|
- **jid**: :class:`~.JID` who has been idling
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: :class:`datetime`, timestamp of the idle start
|
||||||
|
|
||||||
|
Set the idle start for a JID.
|
||||||
|
|
||||||
|
get_idle
|
||||||
|
- **jid**: :class:`~.JID` to get the idle time of
|
||||||
|
- **node**: unused
|
||||||
|
- **ifrom**: unused
|
||||||
|
- **args**: : unused
|
||||||
|
- **returns**: :class:`datetime`
|
||||||
|
|
||||||
|
Get the idle start timestamp for a JID.
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0319.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
26
docs/api/plugins/xep_0332.rst
Normal file
26
docs/api/plugins/xep_0332.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
XEP-0332: HTTP over XMPP transport
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0332
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0332
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0332.stanza.data
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0332.stanza.request
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0332.stanza.response
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0333.rst
Normal file
18
docs/api/plugins/xep_0333.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0333: Chat Markers
|
||||||
|
======================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0333
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0333
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0333.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
18
docs/api/plugins/xep_0334.rst
Normal file
18
docs/api/plugins/xep_0334.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
XEP-0334: Message Processing Hints
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. module:: slixmpp.plugins.xep_0334
|
||||||
|
|
||||||
|
.. autoclass:: XEP_0334
|
||||||
|
:members:
|
||||||
|
:exclude-members: session_bind, plugin_init, plugin_end
|
||||||
|
|
||||||
|
|
||||||
|
Stanza elements
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: slixmpp.plugins.xep_0334.stanza
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user