From cafef6b150eb1f8e6ed775fd19798f5e57e1896c Mon Sep 17 00:00:00 2001 From: Nicolas Dumazet Date: Sun, 7 Nov 2021 09:43:28 +0100 Subject: [PATCH 1/3] Support for brightness operations. This adds two Controls, `brightness.Increase` and `brightness.Decrease`, which can increase / decrease brightness respectively. Icons are taken from https://fonts.google.com/icons (SVGs, reexported as plain white-on-transparent 512x512 PNG outlines). Those icons are free, available under an Apache 2.0 license. --- README.md | 22 +++++- devdeck_key_light/assets/brightness-high.png | Bin 0 -> 14802 bytes devdeck_key_light/assets/brightness-low.png | Bin 0 -> 13188 bytes devdeck_key_light/brightness.py | 72 ++++++++++++++++++ tests/devdeck_key_light/test_brightness.py | 22 ++++++ .../test_brightness/test_simple_increase.yaml | 36 +++++++++ 6 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 devdeck_key_light/assets/brightness-high.png create mode 100644 devdeck_key_light/assets/brightness-low.png create mode 100644 devdeck_key_light/brightness.py create mode 100644 tests/devdeck_key_light/test_brightness.py create mode 100644 tests/fixtures/test_brightness/test_simple_increase.yaml diff --git a/README.md b/README.md index 0c1bd1a..a944604 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,17 @@ You can then update your DevDeck configuration to use decks and controls from th ## Controls -* `KeylightToggleControl` +* `key_light_toggle_control.KeylightToggleControl` - Can be used to toggle the state of an Elgato Key Light + Can be used to toggle the state of an Elgato Key Light. + +* `brightness.Increase` + + Can be use to increase light brightness by a static amount. + +* `brightness.Decrease` + + Can be use to decrease light brightness by a static amount. ## Configuration @@ -29,3 +37,13 @@ Example configuration: key: 0 settings: host: 192.168.1.23 + - name: devdeck_key_light.brightness.Increase + key: 1 + settings: + host: 192.168.1.23 + step: 20 + - name: devdeck_key_light.brightness.Decrease + key: 1 + settings: + host: 192.168.1.23 + step: 20 diff --git a/devdeck_key_light/assets/brightness-high.png b/devdeck_key_light/assets/brightness-high.png new file mode 100644 index 0000000000000000000000000000000000000000..67558971deb27133b93db856f9a24541e22b7883 GIT binary patch literal 14802 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 alB}Fnv;SS!bnqS%va+zjlpl5f_x}Owrrk{d literal 0 HcmV?d00001 diff --git a/devdeck_key_light/assets/brightness-low.png b/devdeck_key_light/assets/brightness-low.png new file mode 100644 index 0000000000000000000000000000000000000000..5e20591280842aaaea7f814c61c96580b691f7f8 GIT binary patch literal 13188 zcma)Di9eLz_kU)_5HgISvPY7v8GE*}6G|jmTMQ~Yp=4%0DpLw2G|JMVP@yP9JVmL@ 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 T$d(7cpn)81U2V$u2LAVd$X|?> literal 0 HcmV?d00001 diff --git a/devdeck_key_light/brightness.py b/devdeck_key_light/brightness.py new file mode 100644 index 0000000..11ab466 --- /dev/null +++ b/devdeck_key_light/brightness.py @@ -0,0 +1,72 @@ +import abc +import logging +import os +import requests + +from devdeck_core.controls.deck_control import DeckControl + + +class _BrightnessBase(abc.ABC, DeckControl): + def __init__(self, key_no, **kwargs): + self.elgato = None + self.__logger = logging.getLogger('devdeck') + super().__init__(key_no, **kwargs) + + @property + @abc.abstractmethod + def image_file(self): + 'Image file to render. Relative path to assets directory.' + ... + + @property + def endpoint(self): + return 'http://{}:9123/elgato/lights'.format(self.settings['host']) + + def initialize(self): + with self.deck_context() as context: + with context.renderer() as r: + r.image(os.path.join(os.path.dirname(__file__), 'assets', self.image_file)).end() + + @property + def brightness(self): + try: + r = requests.get(self.endpoint) + except requests.exceptions.ConnectionError as ex: + self.__logger.warning("Error communicating with Elgato Key Light: %s", str(ex)) + return 0 + return r.json()['lights'][0]['brightness'] + + @brightness.setter + def brightness(self, value): + if not 0 <= value <= 100: + raise ValueError('Valid brightness values are between 0 and 100 inclusive.') + data = { + 'lights': [ + { + 'brightness': int(value), + } + ], + 'numberOfLights': 1 + } + try: + requests.put(self.endpoint, json=data) + except requests.exceptions.ConnectionError as ex: + self.__logger.warning("Error communicating with Elgato Key Light: %s", str(ex)) + + +class Increase(_BrightnessBase): + @property + def image_file(self): + return 'brightness-high.png' + + def pressed(self): + self.brightness = min(100, self.brightness + self.settings['step']) + + +class Decrease(_BrightnessBase): + @property + def image_file(self): + return 'brightness-low.png' + + def pressed(self): + self.brightness = max(0, self.brightness - self.settings['step']) \ No newline at end of file diff --git a/tests/devdeck_key_light/test_brightness.py b/tests/devdeck_key_light/test_brightness.py new file mode 100644 index 0000000..b17d000 --- /dev/null +++ b/tests/devdeck_key_light/test_brightness.py @@ -0,0 +1,22 @@ +import vcr +from devdeck_core.mock_deck_context import mock_context, assert_rendered +from tests.testing_utils import TestingUtils + +from devdeck_key_light.brightness import Increase + + +class TestBrightness: + def test_simple_increase(self): + settings = { + 'host': '192.168.2.25', + 'step': 20, + } + control = Increase(0, **settings) + with vcr.use_cassette('tests/fixtures/test_brightness/test_simple_increase.yaml', + match_on=['uri', 'method', 'body']) as cass: + with mock_context(control) as ctx: + control.initialize() + assert_rendered(ctx, TestingUtils.get_filename( + '../devdeck_key_light/assets/brightness-high.png')) + control.pressed() + assert cass.all_played diff --git a/tests/fixtures/test_brightness/test_simple_increase.yaml b/tests/fixtures/test_brightness/test_simple_increase.yaml new file mode 100644 index 0000000..05884f6 --- /dev/null +++ b/tests/fixtures/test_brightness/test_simple_increase.yaml @@ -0,0 +1,36 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [python-requests/2.25.1] + method: GET + uri: http://192.168.2.25:9123/elgato/lights + response: + body: {string: '{"numberOfLights":1,"lights":[{"on":1,"brightness":33,"temperature":215}]}'} + headers: + Connection: [keep-alive] + Content-Length: ['74'] + Content-Type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +- request: + body: '{"lights": [{"brightness": 53}], "numberOfLights": 1}' + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['53'] + Content-Type: [application/json] + User-Agent: [python-requests/2.25.1] + method: PUT + uri: http://192.168.2.25:9123/elgato/lights + response: + body: {string: '{"numberOfLights":1,"lights":[{"on":1,"brightness":100,"temperature":215}]}'} + headers: + Connection: [keep-alive] + Content-Length: ['75'] + Content-Type: [application/json; charset=utf-8] + status: {code: 200, message: OK} +version: 1 From 8cc667ffcd4a54d3f01621a7cc6146e520f60172 Mon Sep 17 00:00:00 2001 From: Nicolas Dumazet Date: Sun, 7 Nov 2021 10:43:44 +0100 Subject: [PATCH 2/3] Replace on/off images. Use the 'lightbulb' material icon, outlined for off, and filled for on. Icons are from https://fonts.google.com/icons (free under Apache 2.0), but have been re-exported as white-on-transparent 512x512 pngs. --- devdeck_key_light/assets/key-light-off.png | Bin 21913 -> 0 bytes devdeck_key_light/assets/key-light-on.png | Bin 21741 -> 0 bytes devdeck_key_light/assets/lightbulb-filled.png | Bin 0 -> 7473 bytes devdeck_key_light/assets/lightbulb-outlined.png | Bin 0 -> 10619 bytes devdeck_key_light/key_light_toggle_control.py | 4 ++-- .../test_keylight_toggle_control.py | 4 ++-- 6 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 devdeck_key_light/assets/key-light-off.png delete mode 100644 devdeck_key_light/assets/key-light-on.png create mode 100644 devdeck_key_light/assets/lightbulb-filled.png create mode 100644 devdeck_key_light/assets/lightbulb-outlined.png diff --git a/devdeck_key_light/assets/key-light-off.png b/devdeck_key_light/assets/key-light-off.png deleted file mode 100644 index d5c68afdbcb21b09c1d06f6e0ad5cd6da56940a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21913 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 Qu944P@4K$_ADpBA4K`i)mH+?% literal 0 HcmV?d00001 diff --git a/devdeck_key_light/assets/lightbulb-outlined.png b/devdeck_key_light/assets/lightbulb-outlined.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d000e1c9d0546ce5093aebae4c02e856247827 GIT binary patch literal 10619 zcmc(Fi$Bxt|Nna%mN2b@oQ9^-Y1}zPMpP4S(a9<2ZVV|V8*-exgB8({CP^u3lS9rU z-uE53%gP~(Pa138EtY0Qnd5%f?$77<`+fg`-|zEy@Zf!&UWe;-y{^~m`MNF~^l;W# zuDcw9APrX+(qRZff`5_FG8OP=I%!}I{86R29F2#d+sTSwgk?eJ7u6aCx7b6uy{9NlZT*bl9@Y^f1ly!S`Y!9&-FRv@?hLf>TMUW52u z{gn>6c)n}brWNN;_nhvT-}Sk1W~TP-w!n?iv+g&aX7tQ{Rk^y}^}qIW|6eP4h^u90 z7K6|Z^bX_>=&jCT-j2IO$)L&({ly3$M0ciArS@V(H=UiiHM1L!Ut1o~|63e%S@$Zl z5g}1}uQL=g9pT35TsrUIpR+_eF0Y5f8>OEcVP$x>G~=lee#xd&9^|U_7s9b{H?x^Q zF$-B660y`OkUJfFD_$>+Ub0(Jq`D2^k;lkh-m;#LL_?1bk}I7WdnaGtS-X(Zcak^r z;uAbhMg6f-kOg05_#X1xpm7sLuVa|U?-lHVcfpI!8FLLoJv<)#2%gFOm^ta(@u}Xm zpJD^KsBN+sL>Z`0sM#%RGN~qqzft$!-RLI83A6=7Y~0C{R|kSIQ2+ICQ6N1lZ)u|I z&Sb-2QsskT9oa_dCx*;5E^lBf7+@DphGtM0B?Hv^`i6&%uMus?)a5pP&Z{2G0#$6h z&LqAe%pK@*%BWdH%Iu_3f}|`&R4SOLZ9X*u{{io&=6!lJG7BGqP4L2LvG$`ipznB2 z%-<>MQajF zbA=nQHc3VL8|U*6UfU7+4AOAMtF!;kPRPZP9HVZhmt<8J7P_NM?i6{dlO$xar)aUuCrecz64`@a* z^dZYl%w}V$tstsN%DzT5(@st!6?x-~30i1KV-GpTxl!tX9__61Z&)eYCe_5odC+p| zdi9}!XlAp9bfbU?`_)?=?>HqWg&mwa%-Es#&k3QDpqJbqneC{cJj0KDVU-9BYN@ke z`J+5AjmVt!74T)OAos3LSdQE!vPKV>U?B0OzFYGns_)x5PEV;TrQaDgcWp_9Drm^c z%)(lE#A60;I5{!6$4@m?JIS3Ca0qBI3q>#7@lN8PKRQz0`9n`|nPGDe%()JluQUDo z_$4$)TDHp9NP!dfTef&bR6tAtYco@aIlEt=91DCjxRyTJt~(L^aE(XB@jYY%sOVyLJ9%(#riJ;G0IXvQboRzPzLcBlAk_(}6&plZ z?NG_(a*aWoSbO|!lB%P{R*M;>U6>QWe7w5=DHzAbrP3HwxA%x%t`2`}##WFNu)wSQ zN|(Rn4u+LEG+4$jxIJQ;zuU2>+4?Ma@q4&{*=FZb+ktSjFt$j9cA+Oc`FH}oHq&HZ z2a~sMrGf8dDFtqh#RE$FH$bvDt*r_s)vEsSkPnHf<_5L$vrbx}5Vs8Q`#MeX=5x^r5;j z^Y{qCR`@o{|Go}oJAVbmkH$FPnF7^4G@m*~?U`wjx!r!8IT$9KAbdSNf?<(it8B6>lYV6POG7 z``SmOpOXbI`{W~rnbG^?>1iSSzV>!PwN~})SdW(V+)Sd<4qvHUjT#z@!dzffU=GP` zph)q)Z22)bo9&-0-Xc&BQKgvjBO=ToQwGCL>wCM6MXdA8jTU0w(vKMUDgE~N$f@%2 z6iw;jEXe&9ie6@FF^Wmjh_|g&@=)?9Nr~dF6to`oS2vH>;M^6AlscrKQu_G(%Gnfu zQfry*o<(pZ9=+sRBVsEgkwY8c8d#G)iHaa~Tzq%`Ma~GVU5%0vVkr1PEm&>IwBFZo zi)}n$h=B?Vxv4v)u{_+RqpC&7)KxaRvfZSL3U@#4(!k#X$5k@3P?}{eqmJ>3E+l{=h?v5?Oeb~6PxC7VB<4+1|;3<0hpHsY7fryD!ScgZLL$~ZoEU$3iUzGG& zwu@&Xy2l!1qq^7#@2+WAa*SrHQj%$PP~7Wn&Cn1LpMC^)?D=qz5_g)5xVipc?K> zc2js2i}lRrb$okdmGX|wubIlhh@Y`PZev*=ppu#}(OsC$CSD{ck7%?S<4vn_b)InF z=SWgkWn@+1)7?m|m9~4nf*mLd7iCfho3iF+M9BgaH8yN&dz+4Va*p)Qm;|dWo>y9# zbeNP{2~?>qz7P=ll8d8X8*9_DCUqgI7>o_Pb$<2SRy2Qj)6CVhzp!`}nXbm=)h3R`AE?PxT>`g0)jC_4h52-lM4YQ&hd{$q1n!}$`E%}%6 z%Bj(=&USn3x6_;htJ~LTzq=GiL>lVhTKc!_gd%A{&NCO^uG^_RWPuOT!ut4hMVfy*Q9r?$nXT-djg8k6$Zr2`LcgJAIE2@tH*T z627gZdw;T5kN76nu5QWBkUMpZ!)fD^$-jg}ofIE|+}k;FM>DEKzRp7PUdl-OWV)su z5#JVoyVqI3%qySI`LSYTz3e_ic7k@6oQf(DPAd7Z?#v9re8Jg&Np6caoh((oX)o;hgvw9M3YgBo?VCFN|BT9qzUd z?yW)=>tll-WBMjua-E?&ciXF4mr&L5qyWHpvIH7anJjJ3mRHfy99c9CFZ2~GIR;nV zh*fW`wcS$-oTBynA99&ESNVz3&{n($I1zgL@|H{7XAE+7CHIf{tLoaAA=KZGrHCVt zi4S9rLZb+SFK!1dFL2*$+Z4t)m&B$kPprmfJj5KrB|_9qivbJm7`vC9!Pj&Nx%0>_ z@5XKP_LBL7S5<)NA-cKkN*-kyX9Rt4CN?gR#&}o2`~q%?Vqd;__}1}VdJE6QD|lnW z7lPw0lMQ6Q0DmgjBv3V7D$Hm2s@N&ZsI>0uj}fhOIt52ZCh%;H~cg4+u%K2dwi22|L1AL z6VO5^?W}?f%6x8m{3z@P$XBmUa#Vys_ddMjrXWYlQ#xb5#>xbH7Wp30)V8~6X=h8I5NVf!`Ar#`{$ zUWxnv_(2U;vum*>srBIKA7mzTH8R6-Vb#%9*h!^be*Epq(cp#va#7GBkm9g-zB810 zpd_ECUKTo)&P3~LPWbW74{Xg0H2%#MsK@(@+V3Kfd!4*zZid=3*CLDF2rLxd4X@!5 zrs`Cr?JVOu>3hUjbKh;bL+Mw9(YV13kz-5pyUk6-OaCR#J?)1$VTk<(3K>m>k}sLvEPv6lG{G!b%LW74-vFsa zkSBlpfmjCP8r%53E2$%oo>3{eSzZt(;($Tg7-;baHKbe2IBlbxltMdec_8*d3c`oo zaBujMqf7`+)ijFmM7rMpE-0z?q9qb!zLkwO&NI6+EU?N`@a1gg$lW^xq-SS;3Ll)o` zkZuhr73Ztkn=1UxI(L8aE>&RaU1yh|6ZXlR-S!_aj&l9|E!pxo5QDK9GIi-!ajxn~ zb$wsl-SJcCk_hvuu#g$hR8cYyy%^`M>)-Q&oATzV(Zf!&_$4F!&qukv(@m&eqc+xEmt>#oU$J1^E3Tg|_eMu1>qE(S zi!+iV_X){9qyRtMI>LE|j36BW1nnQ#I==a657}P<4%@^talb$l4#W#*01Lmp;J(V7 zq7MV(3~6M@;%H|@z!H}te+y6u<>20=CyiXsR`_RWjtdhybVj`oe@j@TighkxgE8OX9 z4FtH<&Hb8L%O*a*4%-_GO?c}LgPYN$`s~lwU5VKs3*|^ zG<5APQg`;gtZ!Tc=a!wg&e+{Vx**5Opx4Q3Z_gmA<-W^>)c%1rH zAR<#AO=JQ7nh4cyw6o8Fq-FMi?sUBvdbGXE6P*(^BZe;ZAWGaHyAOj*H_1;A@*|q4 zqUqjzwrz-d0pw7bds#PrWp96YZT@RlUBKIZvdT&K;n5t%4IcKe+dk_7oDYBd`TunG zG{75q*icyzjXv-&KS-_hG&v>^clVnOR99aAxZxukb$?%d!bDv{jIJG;{(WkOVR}I-^Dh3gn7+N}AkN52 zg61JYBgfyb*N6ND`gbQB2PB)`0O@-Bn_X=n%MBK>sP}g{q3Uid)cxnTgTRW9E#mp& zWv_0d9Q_+gZ)@5FDi;L<+L8c)Sj^bzhZ+Jgemqc8{#URJC7BdPJ3H{C&#lfc`6{_Z z4E=i|8>9V9hleno!|jDSVh3O4SS&@C4krdehvCsPqd4D+-@4I-B5w) zeZLc`3!efKB%w+yaiA~f?t}ONfuc1Vv;ya4^n>K~jOzCJ;UDo(q}$dvKX}-1Dvkgpb_1%#QBgjx05vc&a=e67shI5Gt&qlW>lqQ$ zo12eeg##V+)LBAx)1l!2Xn6MlGScvI>$;9|GzMRN{kwVnFMd6~+l>ej7JYRr!SZ#~ zg8&+N!|R87`}1z>1`2TYM!RfT1@>7Qz*8_#H?3CkAW_SO;9CW(bC>czT>YPE+j;%X z#}%Z&;-9P>qc|YLr~RA7PsGkvL3|qN`SgcADm%5xOQXU_xuE&pRJEZA6_T5!`RR{c2tzE}kX+NeWx>iLK$wOF4)~0@!(8HDEi0mo51r0-j6`&(|hKdz+tAEQ7)aDu`B-!}s#NdDP(0zm^J z{$px+U^nZixr*b}P*?X<1R1$IyLBD@-xlTehUV7pcmL?y{+faQoyVpBnCXxD{PcR4 z+KLCEkN#th4<3vsrx+?<7nxWLA|)WCQ87bUcC4cMr(?os9r}-*{Y^}xv`!u%1|#=# z;;-v|fO;=8e3u6V09P;%HtkaMxHe}K-Y+?PR$<+r%l|p6e{XnoFF*Hg{%dz&!%hTT z7~yv7{i6f@+o|3(`g5S!;yYgGoDaL0%|XEA?{NbRhaP|fOt^jPEXpz4?;XNdZ>ZjO z&+&m6>L@Sr91*$%{Lz7E^uI=cI!b>6SAFf@Z9P@=t!(4xQYr9rhcbX$KED-z@4?J< zpmq_7)c^MWqR}Mk@^b}_qWMswy*HY84RGY;09JUG45L6K^W5%iLJ*`RefA&!Xadga z_!U4V)Q?E^07qE{G&k_>j|OlX4cvU2%Y2)DeHjA`HnTuADGjx9!qtbJI?jQpv7(#X zg81y2nDZeKTNAGE!WhRh`>c@-4QiASFqv@%IGew#5n*kAHKccta{PufT zVDt3}yIcgnjp5ajGqs@Gt-Nz!3BWJXHDG?-zPDk z>kzhPwM{7}bU$$Fk5f+3;G6lR4zGXTOT%qP!BCvVn>>_jqmji7)KDeSepACk6c(Wz zhugeyzhr&}TWBFZ4X*UaZ~FJKqp03$ZUDMz_0U5gmk+|Ta6?RP1q6q%Ne4lgXl#I)0HIu&QZ9(E7Qj(5#izTb}%yQ8}Z&q z`BDD%OsmX6u#VGG=1;8*x^dvb{2w@a@n76|s2qf6Av>$nNCCb$JRzU^UdsmUTh0kb zwvb5K)&^h5APT#{uvueM%LzqBzgb*)_59x&bF?w0@&-V& zh*%KlXUW%MeL#8-eC^!$FC4uDzq;+xN)Rl)96_HrjN5+q{uiGfMHo+7P?9Cky6p5X zGY?ecUM>Sr0Ma0szg@FyU&jHqv1OVfQz!;3CdZOvKpgza89?L<{$NIZx@q4Qu*Bfn z@m(thSVSnx+u3Dm+CyN*G8TQ0GyN6@NoP`92Y+{+O_!ma_t& zH|ah&JU@Uug0RtP3Z-@15l{_=i%AFbno++%*f_-3Q8kESB8X=;#{eigl-Z2ow|w^x zUbx%xb5iI4Ng#C+dE`RO+K}7g{LQjR639~baCVc^mnC`7x>j#PComXO0K)<4q&B1P zM{B;rn$*yqms}rU)(~@67i6+~XZj4+$}>Uk>S#V?3ir_KS^i}q8>%x%`hou>(`lKd znO1E7GB{X{`iOz)q>j@t8i*98A^6B_js}46W{bqq7RhKqwqp&05?~0TkWNRbF_&f<@ZEnIt>>2Cv$QHr ziO5AryZ~_G>`WScjVd$-K#eb1vaD#|eATkH=32TlsiTv(?)d1~n)WW_43OZ-C)gDG ztrkEmKm>SS;%mboehrkM)MlSNf7h~x+iF3vTU4Z0AB7Glz%GFu&X=5rPXc5Ot{P83 zz6N-9ig`R*aBKSG;*xdZI)0V>0dE}(C>VC?xB;uNh+2Pn!;R+gc>wO+U@_^I*q8zK zNvZgY&vB4;SJk&TgD7D>U9$*8k$$ZLDU?cbmAhf@qVdDU@CO)m|2;~^uA+8$Y zaKba!Q#MICjK9R%uZp?q0xP(^f7H;qT_qux(aqlLSyh$s!m5lRLrMPx2-a$N9h^ZH zB?Ht9lp#zhN>Z)4w4l^0+3hg`i~_F9LtLmS2D)PbI zJ7+ytIBJra#sZKf(O9?!+9sBYg=F&L^9tOs*Z?!kU%aM-3OvF=tIVw-(Pok(ntMi-c8* zlH3-jj%GNXP1O3A1$_hav>aT5&SZ&d(ehTs%Am0Nx-z$S0>I~wFES1w41u1)h7s}` z%-C-#elKwJ4;n*cYSCDl zQqzOFcw|cv=Djt(5@3@j;?a(5D~_RHGi=E6Up}F_u*pIWz@d1Hxrq9+$4r+BQ0OLE zw4&N&g8g=ca|>Bj6|=b-E4{*9I6;mH!j<~xGjD~7Oz3&Nixzr?U&co$<1sfxplB7Z zg&l>0j`9zUU4WU)*@xm4d{6SOoR}~3k9dT0LAuycR_;L}SU8_yqn;E@bG}Q+EVYO;gt8b7z?H1W%Zr6Agcy$z$)3wU#5fqbhw-HdTu~`dEHCy zZMt#hyl3O;c@^mxLtFT1=c_YBNY|fKQ8IkozLxV~$OBeoo^~N8ZzEjg=5SLD_*;vz z+GO(8Nl&tyGCqBUpk)h+w*c)MKVaw^LA<20q}LQk>sFU(Nw+y{Z>=_ucjMezINvs} zMA4}p96J}-KeWKRcfqM+7XCY4l*;6#e9KeZ>til?imnu1X#dnp0R%7n~ zSC9b;1uVQU4c^Kk-Y-54fc*CVl%KL0iAZ?>f8CD`J-o12yzECFimpW>wIXcJ#(X*4 zFIy>_XHagw{T);=e%Dz%etO-A_NGhG%F+c!k~1LJ4Qh4Asr>Kb)I2j+zo%>9QBnt* zy>}oM1Nl)(i3N9DW{|5~**~2H@IQ6f#m`WQ6Bg@?nn$=Ps(v&p=@3H(%Aks>U-m|P zn}*%WraBv^LaPEuQ}3zQ5x>=7B~NS|k`gR1;Su_CZ1kEkNDGNzMkknIihqsziOj8x zxpFZL1+Kf-m6$#$D0q@c+msD7TkAPaTfQSWRdb7=Zv5S`Gl4N z!oLE8_VxJmeKTj_79hvwd2QgDijIK0R?)KoUzyD)K%fO15cRQ}DHM{O1-|l8?v)rW z=-iA4h1=z_6Lo&H<21;YlBWL{mtaXM40Zu1M? zgN3=W5pY%J)X@j0!#8*Y-5fT(%c*0KwfFuk1v)r|7upCAa1YCWASD8k;@mOF1|6rM zgJz_Tl_8n}N=SHI?p%bj)F32}VN+_muTbR<^5A5cNCLM*c@;5-%=A$Udr1pT;2p+B zH1y+bG4kig#XdD!+`6ss{u zQq~rXia@!I?INZL#~xq%uf3c4=gC&~da!f9GEaxl&H!||oUM0%3n(4eak*j@-i2j7 znYtBLEYy0}eqsFo2NVCF$7gS2g{@;a0I7|%SHK=;)C>JEM?PT{ zsraa6qdY|s02|l<9`x{|c!({v_iY_nz(wAjPoU9X>id8-E&{ycFnL5pMxYFfwFs>4 zOd{#*fy~Hi@MNXLse=ZWvx#+MyFLMUA4n=#6BikQCN zZS;oh@u|wyXNge%9RNANN2IuKY19oAdUpGC1n?`D6egIla5&)3HWVg@VF66`s1P#Z z?>9j~ z6yhTo6Kh@i>IPSuF7*RBTpICs(+iBQ{=k(@B{t6NL<4@ld`SVK=2&*ODjB^xM6T4Z z!zFE|+!5;Y2R6ekbYo-T9C&)A47gKLl Date: Mon, 27 Nov 2023 10:58:51 +0100 Subject: [PATCH 3/3] devdeck core version 1.0.8 --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index a06bfeb..5d979ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ assertpy==1.1 -devdeck-core==1.0.7 +devdeck-core==1.0.8 pytest==6.2.1 requests==2.25.1 -vcrpy==4.1.1 \ No newline at end of file +vcrpy==4.1.1