Merge remote-tracking branch 'origin/master' into staging-next
This commit is contained in:
@@ -6,12 +6,12 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "adafruit-platformdetect";
|
||||
version = "3.10.0";
|
||||
version = "3.11.0";
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "Adafruit-PlatformDetect";
|
||||
inherit version;
|
||||
sha256 = "sha256-lIyDYt6OsBOPq1ytD4B4JxX7JeSGWprH2kqqFMzZcGY=";
|
||||
sha256 = "sha256-FgE0/OnqUuzpC5jCM4Q1g49F3fg1Mdstr7nys7G1MOs=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ setuptools-scm ];
|
||||
|
||||
@@ -0,0 +1,498 @@
|
||||
From 17b5be250cb5ecf95cf4f77c8c930450d876efa6 Mon Sep 17 00:00:00 2001
|
||||
From: dzen <benoit.calvez@polyconseil.fr>
|
||||
Date: Thu, 12 Mar 2020 08:32:29 +0100
|
||||
Subject: [PATCH 1/3] Moves to pamqp 3.0
|
||||
|
||||
---
|
||||
aioamqp/channel.py | 114 +++++++++++++++++++-------------------
|
||||
aioamqp/frame.py | 1 -
|
||||
aioamqp/protocol.py | 22 ++++----
|
||||
aioamqp/tests/testcase.py | 2 +-
|
||||
4 files changed, 69 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/aioamqp/channel.py b/aioamqp/channel.py
|
||||
index 7f0f402..ea164c4 100644
|
||||
--- a/aioamqp/channel.py
|
||||
+++ b/aioamqp/channel.py
|
||||
@@ -9,7 +9,7 @@
|
||||
from itertools import count
|
||||
import warnings
|
||||
|
||||
-import pamqp.specification
|
||||
+import pamqp.commands
|
||||
|
||||
from . import frame as amqp_frame
|
||||
from . import exceptions
|
||||
@@ -78,35 +78,35 @@ def connection_closed(self, server_code=None, server_reason=None, exception=None
|
||||
|
||||
async def dispatch_frame(self, frame):
|
||||
methods = {
|
||||
- pamqp.specification.Channel.OpenOk.name: self.open_ok,
|
||||
- pamqp.specification.Channel.FlowOk.name: self.flow_ok,
|
||||
- pamqp.specification.Channel.CloseOk.name: self.close_ok,
|
||||
- pamqp.specification.Channel.Close.name: self.server_channel_close,
|
||||
-
|
||||
- pamqp.specification.Exchange.DeclareOk.name: self.exchange_declare_ok,
|
||||
- pamqp.specification.Exchange.BindOk.name: self.exchange_bind_ok,
|
||||
- pamqp.specification.Exchange.UnbindOk.name: self.exchange_unbind_ok,
|
||||
- pamqp.specification.Exchange.DeleteOk.name: self.exchange_delete_ok,
|
||||
-
|
||||
- pamqp.specification.Queue.DeclareOk.name: self.queue_declare_ok,
|
||||
- pamqp.specification.Queue.DeleteOk.name: self.queue_delete_ok,
|
||||
- pamqp.specification.Queue.BindOk.name: self.queue_bind_ok,
|
||||
- pamqp.specification.Queue.UnbindOk.name: self.queue_unbind_ok,
|
||||
- pamqp.specification.Queue.PurgeOk.name: self.queue_purge_ok,
|
||||
-
|
||||
- pamqp.specification.Basic.QosOk.name: self.basic_qos_ok,
|
||||
- pamqp.specification.Basic.ConsumeOk.name: self.basic_consume_ok,
|
||||
- pamqp.specification.Basic.CancelOk.name: self.basic_cancel_ok,
|
||||
- pamqp.specification.Basic.GetOk.name: self.basic_get_ok,
|
||||
- pamqp.specification.Basic.GetEmpty.name: self.basic_get_empty,
|
||||
- pamqp.specification.Basic.Deliver.name: self.basic_deliver,
|
||||
- pamqp.specification.Basic.Cancel.name: self.server_basic_cancel,
|
||||
- pamqp.specification.Basic.Ack.name: self.basic_server_ack,
|
||||
- pamqp.specification.Basic.Nack.name: self.basic_server_nack,
|
||||
- pamqp.specification.Basic.RecoverOk.name: self.basic_recover_ok,
|
||||
- pamqp.specification.Basic.Return.name: self.basic_return,
|
||||
-
|
||||
- pamqp.specification.Confirm.SelectOk.name: self.confirm_select_ok,
|
||||
+ pamqp.commands.Channel.OpenOk.name: self.open_ok,
|
||||
+ pamqp.commands.Channel.FlowOk.name: self.flow_ok,
|
||||
+ pamqp.commands.Channel.CloseOk.name: self.close_ok,
|
||||
+ pamqp.commands.Channel.Close.name: self.server_channel_close,
|
||||
+
|
||||
+ pamqp.commands.Exchange.DeclareOk.name: self.exchange_declare_ok,
|
||||
+ pamqp.commands.Exchange.BindOk.name: self.exchange_bind_ok,
|
||||
+ pamqp.commands.Exchange.UnbindOk.name: self.exchange_unbind_ok,
|
||||
+ pamqp.commands.Exchange.DeleteOk.name: self.exchange_delete_ok,
|
||||
+
|
||||
+ pamqp.commands.Queue.DeclareOk.name: self.queue_declare_ok,
|
||||
+ pamqp.commands.Queue.DeleteOk.name: self.queue_delete_ok,
|
||||
+ pamqp.commands.Queue.BindOk.name: self.queue_bind_ok,
|
||||
+ pamqp.commands.Queue.UnbindOk.name: self.queue_unbind_ok,
|
||||
+ pamqp.commands.Queue.PurgeOk.name: self.queue_purge_ok,
|
||||
+
|
||||
+ pamqp.commands.Basic.QosOk.name: self.basic_qos_ok,
|
||||
+ pamqp.commands.Basic.ConsumeOk.name: self.basic_consume_ok,
|
||||
+ pamqp.commands.Basic.CancelOk.name: self.basic_cancel_ok,
|
||||
+ pamqp.commands.Basic.GetOk.name: self.basic_get_ok,
|
||||
+ pamqp.commands.Basic.GetEmpty.name: self.basic_get_empty,
|
||||
+ pamqp.commands.Basic.Deliver.name: self.basic_deliver,
|
||||
+ pamqp.commands.Basic.Cancel.name: self.server_basic_cancel,
|
||||
+ pamqp.commands.Basic.Ack.name: self.basic_server_ack,
|
||||
+ pamqp.commands.Basic.Nack.name: self.basic_server_nack,
|
||||
+ pamqp.commands.Basic.RecoverOk.name: self.basic_recover_ok,
|
||||
+ pamqp.commands.Basic.Return.name: self.basic_return,
|
||||
+
|
||||
+ pamqp.commands.Confirm.SelectOk.name: self.confirm_select_ok,
|
||||
}
|
||||
|
||||
if frame.name not in methods:
|
||||
@@ -144,7 +144,7 @@ async def _write_frame_awaiting_response(self, waiter_id, channel_id, request,
|
||||
|
||||
async def open(self):
|
||||
"""Open the channel on the server."""
|
||||
- request = pamqp.specification.Channel.Open()
|
||||
+ request = pamqp.commands.Channel.Open()
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'open', self.channel_id, request, no_wait=False, check_open=False))
|
||||
|
||||
@@ -159,7 +159,7 @@ async def close(self, reply_code=0, reply_text="Normal Shutdown"):
|
||||
if not self.is_open:
|
||||
raise exceptions.ChannelClosed("channel already closed or closing")
|
||||
self.close_event.set()
|
||||
- request = pamqp.specification.Channel.Close(reply_code, reply_text, class_id=0, method_id=0)
|
||||
+ request = pamqp.commands.Channel.Close(reply_code, reply_text, class_id=0, method_id=0)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'close', self.channel_id, request, no_wait=False, check_open=False))
|
||||
|
||||
@@ -169,7 +169,7 @@ async def close_ok(self, frame):
|
||||
self.protocol.release_channel_id(self.channel_id)
|
||||
|
||||
async def _send_channel_close_ok(self):
|
||||
- request = pamqp.specification.Channel.CloseOk()
|
||||
+ request = pamqp.commands.Channel.CloseOk()
|
||||
await self._write_frame(self.channel_id, request)
|
||||
|
||||
async def server_channel_close(self, frame):
|
||||
@@ -183,7 +183,7 @@ async def server_channel_close(self, frame):
|
||||
self.connection_closed(results['reply_code'], results['reply_text'])
|
||||
|
||||
async def flow(self, active):
|
||||
- request = pamqp.specification.Channel.Flow(active)
|
||||
+ request = pamqp.commands.Channel.Flow(active)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'flow', self.channel_id, request, no_wait=False,
|
||||
check_open=False))
|
||||
@@ -201,7 +201,7 @@ async def flow_ok(self, frame):
|
||||
|
||||
async def exchange_declare(self, exchange_name, type_name, passive=False, durable=False,
|
||||
auto_delete=False, no_wait=False, arguments=None):
|
||||
- request = pamqp.specification.Exchange.Declare(
|
||||
+ request = pamqp.commands.Exchange.Declare(
|
||||
exchange=exchange_name,
|
||||
exchange_type=type_name,
|
||||
passive=passive,
|
||||
@@ -222,7 +222,7 @@ async def exchange_declare_ok(self, frame):
|
||||
return future
|
||||
|
||||
async def exchange_delete(self, exchange_name, if_unused=False, no_wait=False):
|
||||
- request = pamqp.specification.Exchange.Delete(exchange=exchange_name, if_unused=if_unused, nowait=no_wait)
|
||||
+ request = pamqp.commands.Exchange.Delete(exchange=exchange_name, if_unused=if_unused, nowait=no_wait)
|
||||
return await self._write_frame_awaiting_response(
|
||||
'exchange_delete', self.channel_id, request, no_wait)
|
||||
|
||||
@@ -235,7 +235,7 @@ async def exchange_bind(self, exchange_destination, exchange_source, routing_key
|
||||
no_wait=False, arguments=None):
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
- request = pamqp.specification.Exchange.Bind(
|
||||
+ request = pamqp.commands.Exchange.Bind(
|
||||
destination=exchange_destination,
|
||||
source=exchange_source,
|
||||
routing_key=routing_key,
|
||||
@@ -255,7 +255,7 @@ async def exchange_unbind(self, exchange_destination, exchange_source, routing_k
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
|
||||
- request = pamqp.specification.Exchange.Unbind(
|
||||
+ request = pamqp.commands.Exchange.Unbind(
|
||||
destination=exchange_destination,
|
||||
source=exchange_source,
|
||||
routing_key=routing_key,
|
||||
@@ -297,7 +297,7 @@ async def queue_declare(self, queue_name=None, passive=False, durable=False,
|
||||
|
||||
if not queue_name:
|
||||
queue_name = 'aioamqp.gen-' + str(uuid.uuid4())
|
||||
- request = pamqp.specification.Queue.Declare(
|
||||
+ request = pamqp.commands.Queue.Declare(
|
||||
queue=queue_name,
|
||||
passive=passive,
|
||||
durable=durable,
|
||||
@@ -327,7 +327,7 @@ async def queue_delete(self, queue_name, if_unused=False, if_empty=False, no_wai
|
||||
if_empty: bool, the queue is deleted if it has no messages. Raise if not.
|
||||
no_wait: bool, if set, the server will not respond to the method
|
||||
"""
|
||||
- request = pamqp.specification.Queue.Delete(
|
||||
+ request = pamqp.commands.Queue.Delete(
|
||||
queue=queue_name,
|
||||
if_unused=if_unused,
|
||||
if_empty=if_empty,
|
||||
@@ -346,7 +346,7 @@ async def queue_bind(self, queue_name, exchange_name, routing_key, no_wait=False
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
|
||||
- request = pamqp.specification.Queue.Bind(
|
||||
+ request = pamqp.commands.Queue.Bind(
|
||||
queue=queue_name,
|
||||
exchange=exchange_name,
|
||||
routing_key=routing_key,
|
||||
@@ -367,7 +367,7 @@ async def queue_unbind(self, queue_name, exchange_name, routing_key, arguments=N
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
|
||||
- request = pamqp.specification.Queue.Unbind(
|
||||
+ request = pamqp.commands.Queue.Unbind(
|
||||
queue=queue_name,
|
||||
exchange=exchange_name,
|
||||
routing_key=routing_key,
|
||||
@@ -383,7 +383,7 @@ async def queue_unbind_ok(self, frame):
|
||||
logger.debug("Queue unbound")
|
||||
|
||||
async def queue_purge(self, queue_name, no_wait=False):
|
||||
- request = pamqp.specification.Queue.Purge(
|
||||
+ request = pamqp.commands.Queue.Purge(
|
||||
queue=queue_name, nowait=no_wait
|
||||
)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
@@ -406,7 +406,7 @@ async def basic_publish(self, payload, exchange_name, routing_key,
|
||||
if properties is None:
|
||||
properties = {}
|
||||
|
||||
- method_request = pamqp.specification.Basic.Publish(
|
||||
+ method_request = pamqp.commands.Basic.Publish(
|
||||
exchange=exchange_name,
|
||||
routing_key=routing_key,
|
||||
mandatory=mandatory,
|
||||
@@ -417,7 +417,7 @@ async def basic_publish(self, payload, exchange_name, routing_key,
|
||||
|
||||
header_request = pamqp.header.ContentHeader(
|
||||
body_size=len(payload),
|
||||
- properties=pamqp.specification.Basic.Properties(**properties)
|
||||
+ properties=pamqp.commands.Basic.Properties(**properties)
|
||||
)
|
||||
await self._write_frame(self.channel_id, header_request, drain=False)
|
||||
|
||||
@@ -446,7 +446,7 @@ async def basic_qos(self, prefetch_size=0, prefetch_count=0, connection_global=F
|
||||
settings should apply per-consumer channel; and global=true to mean
|
||||
that the QoS settings should apply per-channel.
|
||||
"""
|
||||
- request = pamqp.specification.Basic.Qos(
|
||||
+ request = pamqp.commands.Basic.Qos(
|
||||
prefetch_size, prefetch_count, connection_global
|
||||
)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
@@ -490,7 +490,7 @@ async def basic_consume(self, callback, queue_name='', consumer_tag='', no_local
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
|
||||
- request = pamqp.specification.Basic.Consume(
|
||||
+ request = pamqp.commands.Basic.Consume(
|
||||
queue=queue_name,
|
||||
consumer_tag=consumer_tag,
|
||||
no_local=no_local,
|
||||
@@ -561,7 +561,7 @@ async def server_basic_cancel(self, frame):
|
||||
callback, error)
|
||||
|
||||
async def basic_cancel(self, consumer_tag, no_wait=False):
|
||||
- request = pamqp.specification.Basic.Cancel(consumer_tag, no_wait)
|
||||
+ request = pamqp.commands.Basic.Cancel(consumer_tag, no_wait)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'basic_cancel', self.channel_id, request, no_wait=no_wait)
|
||||
)
|
||||
@@ -575,7 +575,7 @@ async def basic_cancel_ok(self, frame):
|
||||
logger.debug("Cancel ok")
|
||||
|
||||
async def basic_get(self, queue_name='', no_ack=False):
|
||||
- request = pamqp.specification.Basic.Get(queue=queue_name, no_ack=no_ack)
|
||||
+ request = pamqp.commands.Basic.Get(queue=queue_name, no_ack=no_ack)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'basic_get', self.channel_id, request, no_wait=False)
|
||||
)
|
||||
@@ -606,11 +606,11 @@ async def basic_get_empty(self, frame):
|
||||
future.set_exception(exceptions.EmptyQueue)
|
||||
|
||||
async def basic_client_ack(self, delivery_tag, multiple=False):
|
||||
- request = pamqp.specification.Basic.Ack(delivery_tag, multiple)
|
||||
+ request = pamqp.commands.Basic.Ack(delivery_tag, multiple)
|
||||
await self._write_frame(self.channel_id, request)
|
||||
|
||||
async def basic_client_nack(self, delivery_tag, multiple=False, requeue=True):
|
||||
- request = pamqp.specification.Basic.Nack(delivery_tag, multiple, requeue)
|
||||
+ request = pamqp.commands.Basic.Nack(delivery_tag, multiple, requeue)
|
||||
await self._write_frame(self.channel_id, request)
|
||||
|
||||
async def basic_server_ack(self, frame):
|
||||
@@ -620,15 +620,15 @@ async def basic_server_ack(self, frame):
|
||||
fut.set_result(True)
|
||||
|
||||
async def basic_reject(self, delivery_tag, requeue=False):
|
||||
- request = pamqp.specification.Basic.Reject(delivery_tag, requeue)
|
||||
+ request = pamqp.commands.Basic.Reject(delivery_tag, requeue)
|
||||
await self._write_frame(self.channel_id, request)
|
||||
|
||||
async def basic_recover_async(self, requeue=True):
|
||||
- request = pamqp.specification.Basic.RecoverAsync(requeue)
|
||||
+ request = pamqp.commands.Basic.RecoverAsync(requeue)
|
||||
await self._write_frame(self.channel_id, request)
|
||||
|
||||
async def basic_recover(self, requeue=True):
|
||||
- request = pamqp.specification.Basic.Recover(requeue)
|
||||
+ request = pamqp.commands.Basic.Recover(requeue)
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'basic_recover', self.channel_id, request, no_wait=False)
|
||||
)
|
||||
@@ -681,7 +681,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
|
||||
delivery_tag = next(self.delivery_tag_iter) # pylint: disable=stop-iteration-return
|
||||
fut = self._set_waiter('basic_server_ack_{}'.format(delivery_tag))
|
||||
|
||||
- method_request = pamqp.specification.Basic.Publish(
|
||||
+ method_request = pamqp.commands.Basic.Publish(
|
||||
exchange=exchange_name,
|
||||
routing_key=routing_key,
|
||||
mandatory=mandatory,
|
||||
@@ -689,7 +689,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
|
||||
)
|
||||
await self._write_frame(self.channel_id, method_request, drain=False)
|
||||
|
||||
- properties = pamqp.specification.Basic.Properties(**properties)
|
||||
+ properties = pamqp.commands.Basic.Properties(**properties)
|
||||
header_request = pamqp.header.ContentHeader(
|
||||
body_size=len(payload), properties=properties
|
||||
)
|
||||
@@ -710,7 +710,7 @@ async def publish(self, payload, exchange_name, routing_key, properties=None, ma
|
||||
async def confirm_select(self, *, no_wait=False):
|
||||
if self.publisher_confirms:
|
||||
raise ValueError('publisher confirms already enabled')
|
||||
- request = pamqp.specification.Confirm.Select(nowait=no_wait)
|
||||
+ request = pamqp.commands.Confirm.Select(nowait=no_wait)
|
||||
|
||||
return (await self._write_frame_awaiting_response(
|
||||
'confirm_select', self.channel_id, request, no_wait)
|
||||
diff --git a/aioamqp/frame.py b/aioamqp/frame.py
|
||||
index d70cfd7..af27ab5 100644
|
||||
--- a/aioamqp/frame.py
|
||||
+++ b/aioamqp/frame.py
|
||||
@@ -42,7 +42,6 @@
|
||||
import socket
|
||||
|
||||
import pamqp.encode
|
||||
-import pamqp.specification
|
||||
import pamqp.frame
|
||||
|
||||
from . import exceptions
|
||||
diff --git a/aioamqp/protocol.py b/aioamqp/protocol.py
|
||||
index e111dea..f0b928d 100644
|
||||
--- a/aioamqp/protocol.py
|
||||
+++ b/aioamqp/protocol.py
|
||||
@@ -5,9 +5,9 @@
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
+import pamqp.commands
|
||||
import pamqp.frame
|
||||
import pamqp.heartbeat
|
||||
-import pamqp.specification
|
||||
|
||||
from . import channel as amqp_channel
|
||||
from . import constants as amqp_constants
|
||||
@@ -159,7 +159,7 @@ async def close(self, no_wait=False, timeout=None):
|
||||
"""Close connection (and all channels)"""
|
||||
await self.ensure_open()
|
||||
self.state = CLOSING
|
||||
- request = pamqp.specification.Connection.Close(
|
||||
+ request = pamqp.commands.Connection.Close(
|
||||
reply_code=0,
|
||||
reply_text='',
|
||||
class_id=0,
|
||||
@@ -254,11 +254,11 @@ async def dispatch_frame(self, frame_channel=None, frame=None):
|
||||
"""Dispatch the received frame to the corresponding handler"""
|
||||
|
||||
method_dispatch = {
|
||||
- pamqp.specification.Connection.Close.name: self.server_close,
|
||||
- pamqp.specification.Connection.CloseOk.name: self.close_ok,
|
||||
- pamqp.specification.Connection.Tune.name: self.tune,
|
||||
- pamqp.specification.Connection.Start.name: self.start,
|
||||
- pamqp.specification.Connection.OpenOk.name: self.open_ok,
|
||||
+ pamqp.commands.Connection.Close.name: self.server_close,
|
||||
+ pamqp.commands.Connection.CloseOk.name: self.close_ok,
|
||||
+ pamqp.commands.Connection.Tune.name: self.tune,
|
||||
+ pamqp.commands.Connection.Start.name: self.start,
|
||||
+ pamqp.commands.Connection.OpenOk.name: self.open_ok,
|
||||
}
|
||||
if frame_channel is None and frame is None:
|
||||
frame_channel, frame = await self.get_frame()
|
||||
@@ -395,7 +395,7 @@ async def start_ok(self, client_properties, mechanism, auth, locale):
|
||||
def credentials():
|
||||
return '\0{LOGIN}\0{PASSWORD}'.format(**auth)
|
||||
|
||||
- request = pamqp.specification.Connection.StartOk(
|
||||
+ request = pamqp.commands.Connection.StartOk(
|
||||
client_properties=client_properties,
|
||||
mechanism=mechanism,
|
||||
locale=locale,
|
||||
@@ -417,7 +417,7 @@ async def server_close(self, frame):
|
||||
self._stream_writer.close()
|
||||
|
||||
async def _close_ok(self):
|
||||
- request = pamqp.specification.Connection.CloseOk()
|
||||
+ request = pamqp.commands.Connection.CloseOk()
|
||||
await self._write_frame(0, request)
|
||||
|
||||
async def tune(self, frame):
|
||||
@@ -426,7 +426,7 @@ async def tune(self, frame):
|
||||
self.server_heartbeat = frame.heartbeat
|
||||
|
||||
async def tune_ok(self, channel_max, frame_max, heartbeat):
|
||||
- request = pamqp.specification.Connection.TuneOk(
|
||||
+ request = pamqp.commands.Connection.TuneOk(
|
||||
channel_max, frame_max, heartbeat
|
||||
)
|
||||
await self._write_frame(0, request)
|
||||
@@ -436,7 +436,7 @@ async def secure_ok(self, login_response):
|
||||
|
||||
async def open(self, virtual_host, capabilities='', insist=False):
|
||||
"""Open connection to virtual host."""
|
||||
- request = pamqp.specification.Connection.Open(
|
||||
+ request = pamqp.commands.Connection.Open(
|
||||
virtual_host, capabilities, insist
|
||||
)
|
||||
await self._write_frame(0, request)
|
||||
diff --git a/aioamqp/tests/testcase.py b/aioamqp/tests/testcase.py
|
||||
index 120104b..d6d702b 100644
|
||||
--- a/aioamqp/tests/testcase.py
|
||||
+++ b/aioamqp/tests/testcase.py
|
||||
@@ -147,7 +147,7 @@ def server_version(self, amqp=None):
|
||||
if amqp is None:
|
||||
amqp = self.amqp
|
||||
|
||||
- server_version = tuple(int(x) for x in amqp.server_properties['version'].decode().split('.'))
|
||||
+ server_version = tuple(int(x) for x in amqp.server_properties['version'].split('.'))
|
||||
return server_version
|
||||
|
||||
async def check_exchange_exists(self, exchange_name):
|
||||
|
||||
From c900f6d5e8ef273000d221d0e46ab81ed4aed2a2 Mon Sep 17 00:00:00 2001
|
||||
From: dzen <benoit.calvez@polyconseil.fr>
|
||||
Date: Wed, 25 Mar 2020 11:02:04 +0100
|
||||
Subject: [PATCH 2/3] fix pamqp version for tests on travis
|
||||
|
||||
---
|
||||
setup.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index a740243..2277b28 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -25,7 +25,7 @@
|
||||
'aioamqp',
|
||||
],
|
||||
install_requires=[
|
||||
- 'pamqp>=2.2.0,<3',
|
||||
+ 'pamqp>=3.0.0', # TODO(bcalvez): for tests purpose, until 3.0 is released
|
||||
],
|
||||
classifiers=[
|
||||
"Development Status :: 4 - Beta",
|
||||
|
||||
From 836340e8d881a93b0111b9aed6f2bb2926f38de6 Mon Sep 17 00:00:00 2001
|
||||
From: dzen <benoit.calvez@polyconseil.fr>
|
||||
Date: Wed, 25 Mar 2020 11:37:45 +0100
|
||||
Subject: [PATCH 3/3] pamqp 3.0 is no more compatible with 3.5
|
||||
|
||||
---
|
||||
.travis.yml | 1 -
|
||||
setup.cfg | 2 +-
|
||||
setup.py | 2 +-
|
||||
3 files changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/.travis.yml b/.travis.yml
|
||||
index 1069e7c..46d6fea 100644
|
||||
--- a/.travis.yml
|
||||
+++ b/.travis.yml
|
||||
@@ -1,7 +1,6 @@
|
||||
language: python
|
||||
dist: bionic
|
||||
python:
|
||||
-- 3.5
|
||||
- 3.6
|
||||
- 3.7-dev
|
||||
- 3.8
|
||||
diff --git a/setup.cfg b/setup.cfg
|
||||
index 0ab7d0b..d0ba16e 100644
|
||||
--- a/setup.cfg
|
||||
+++ b/setup.cfg
|
||||
@@ -1,2 +1,2 @@
|
||||
[bdist_wheel]
|
||||
-python-tag = py35.py36.py37.py38
|
||||
+python-tag = py36.py37.py38
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 2277b28..c413078 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -27,6 +27,7 @@
|
||||
install_requires=[
|
||||
'pamqp==3.0.0a6', # TODO(bcalvez): for tests purpose, until 3.0 is released
|
||||
],
|
||||
+ python_requires=">=3.6",
|
||||
classifiers=[
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
@@ -34,7 +35,6 @@
|
||||
"Operating System :: OS Independent",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3",
|
||||
- "Programming Language :: Python :: 3.5",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
@@ -20,6 +20,8 @@ buildPythonPackage rec {
|
||||
sha256 = "1gpfsrc2vi6w33c9zsycd2qn589pr7a222rb41r85m915283zy48";
|
||||
};
|
||||
|
||||
patches = [ ./compat-pamqp-3.patch ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
pamqp
|
||||
];
|
||||
|
||||
@@ -52,6 +52,6 @@ buildPythonPackage rec {
|
||||
description = "Powerful and Lightweight Python Tree Data Structure";
|
||||
homepage = "https://github.com/c0fec0de/anytree";
|
||||
license = licenses.asl20;
|
||||
maintainers = [ maintainers.worldofpeace ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -50,6 +50,6 @@ buildPythonPackage rec {
|
||||
description = "Provides an asynchronous client and server implementation of the SSHv2 protocol on top of the Python asyncio framework";
|
||||
homepage = "https://asyncssh.readthedocs.io/en/latest";
|
||||
license = licenses.epl20;
|
||||
maintainers = with maintainers; [ worldofpeace ];
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,17 +1,48 @@
|
||||
{ lib, buildPythonPackage, fetchPypi, setuptools-scm, isPy27, pytestCheckHook
|
||||
, requests, arrow, logfury, tqdm }:
|
||||
{ lib
|
||||
, arrow
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, importlib-metadata
|
||||
, isPy27
|
||||
, logfury
|
||||
, pytestCheckHook
|
||||
, pytest-lazy-fixture
|
||||
, pytest-mock
|
||||
, pythonOlder
|
||||
, requests
|
||||
, setuptools-scm
|
||||
, tqdm
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "b2sdk";
|
||||
version = "1.6.0";
|
||||
|
||||
version = "1.7.0";
|
||||
disabled = isPy27;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-6fjreuMUC056ljddfAidfBbJkvEDndB/dIkx1bF7efs=";
|
||||
sha256 = "sha256-8X5XLh9SxZI1P7/2ZjOy8ipcEzTcriJfGI7KlMXncv4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
setuptools-scm
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
arrow
|
||||
logfury
|
||||
requests
|
||||
tqdm
|
||||
] ++ lib.optionals (pythonOlder "3.8") [
|
||||
importlib-metadata
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
pytestCheckHook
|
||||
pytest-lazy-fixture
|
||||
pytest-mock
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace 'setuptools_scm<6.0' 'setuptools_scm'
|
||||
@@ -19,16 +50,16 @@ buildPythonPackage rec {
|
||||
--replace 'arrow>=0.8.0,<1.0.0' 'arrow'
|
||||
'';
|
||||
|
||||
disabledTests = [
|
||||
# Test requires an API key
|
||||
"test_raw_api"
|
||||
"test_files_headers"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "b2sdk" ];
|
||||
|
||||
nativeBuildInputs = [ setuptools-scm ];
|
||||
propagatedBuildInputs = [ requests arrow logfury tqdm ];
|
||||
|
||||
# requires unpackaged dependencies like liccheck
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Client library and utilities for access to B2 Cloud Storage (backblaze).";
|
||||
description = "Client library and utilities for access to B2 Cloud Storage (backblaze)";
|
||||
homepage = "https://github.com/Backblaze/b2-sdk-python";
|
||||
license = licenses.mit;
|
||||
};
|
||||
|
||||
@@ -2,12 +2,10 @@
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, dask
|
||||
, numpy, toolz # dask[array]
|
||||
, scipy
|
||||
, pims
|
||||
, pytest
|
||||
, pytest-flake8
|
||||
, scikitimage
|
||||
, pytestCheckHook
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -19,24 +17,17 @@ buildPythonPackage rec {
|
||||
sha256 = "0bf7ea8dcd9d795505b498bd632394720c048f50761e23c574d9a6bacfb27cbb";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pytest-flake8 ];
|
||||
propagatedBuildInputs = [ dask numpy toolz scipy pims ];
|
||||
propagatedBuildInputs = [ dask scipy pims ];
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace setup.cfg --replace "--flake8" ""
|
||||
'';
|
||||
|
||||
checkInputs = [
|
||||
pytest
|
||||
pytestCheckHook
|
||||
scikitimage
|
||||
];
|
||||
|
||||
# ignore errors from newer versions of flake8
|
||||
prePatch = ''
|
||||
substituteInPlace setup.cfg \
|
||||
--replace "docs/conf.py,versioneer.py" \
|
||||
"docs/conf.py,versioneer.py,dask_image/ndfilters/_utils.py"
|
||||
'';
|
||||
|
||||
# scikit.external is not exported
|
||||
checkPhase = ''
|
||||
pytest --ignore=tests/test_dask_image/
|
||||
'';
|
||||
pythonImportsCheck = [ "dask_image" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -46,11 +46,11 @@ buildPythonPackage rec {
|
||||
To run gtimelog successfully on a system that does not have full GNOME 3
|
||||
installed, the following NixOS options should be set:
|
||||
- programs.dconf.enable = true;
|
||||
- services.gnome3.gnome-keyring.enable = true;
|
||||
- services.gnome.gnome-keyring.enable = true;
|
||||
|
||||
In addition, the following packages should be added to the environment:
|
||||
- gnome3.adwaita-icon-theme
|
||||
- gnome3.dconf
|
||||
- gnome.adwaita-icon-theme
|
||||
- gnome.dconf
|
||||
'';
|
||||
homepage = "https://gtimelog.org/";
|
||||
license = licenses.gpl2Plus;
|
||||
|
||||
@@ -1,29 +1,42 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, fetchpatch
|
||||
, isPy3k
|
||||
, fetchPypi
|
||||
, substituteAll
|
||||
, ffmpeg
|
||||
, python
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "imageio-ffmpeg";
|
||||
version = "0.4.2";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "13b05b17a941a9f4a90b16910b1ffac159448cff051a153da8ba4b4343ffa195";
|
||||
};
|
||||
patches = [ (fetchpatch {
|
||||
# Fixes compatibility with python3.9
|
||||
# Should be included in the next release after 0.4.2
|
||||
url = "https://github.com/imageio/imageio-ffmpeg/pull/43/commits/b90c39fe3d29418d67d953588ed9fdf4d848f811.patch";
|
||||
sha256 = "0d9kf4w6ldwag3s2dr9zjin6wrj66fnl4fn8379ci4q4qfsqgx3f";
|
||||
})];
|
||||
version = "0.4.3";
|
||||
|
||||
disabled = !isPy3k;
|
||||
|
||||
# No test infrastructure in repository.
|
||||
doCheck = false;
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "f826260a3207b872f1a4ba87ec0c8e02c00afba4fd03348a59049bdd8215841e";
|
||||
};
|
||||
|
||||
patches = [
|
||||
(substituteAll {
|
||||
src = ./ffmpeg-path.patch;
|
||||
ffmpeg = "${ffmpeg}/bin/ffmpeg";
|
||||
})
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
${python.interpreter} << EOF
|
||||
from imageio_ffmpeg import get_ffmpeg_version
|
||||
assert get_ffmpeg_version() == '${ffmpeg.version}'
|
||||
EOF
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "imageio_ffmpeg" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "FFMPEG wrapper for Python";
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
diff --git a/imageio_ffmpeg/_utils.py b/imageio_ffmpeg/_utils.py
|
||||
index 1399cfd..c0eb9be 100644
|
||||
--- a/imageio_ffmpeg/_utils.py
|
||||
+++ b/imageio_ffmpeg/_utils.py
|
||||
@@ -23,33 +23,7 @@ def get_ffmpeg_exe():
|
||||
if exe:
|
||||
return exe
|
||||
|
||||
- plat = get_platform()
|
||||
-
|
||||
- # 2. Try from here
|
||||
- bin_dir = resource_filename("imageio_ffmpeg", "binaries")
|
||||
- exe = os.path.join(bin_dir, FNAME_PER_PLATFORM.get(plat, ""))
|
||||
- if exe and os.path.isfile(exe) and _is_valid_exe(exe):
|
||||
- return exe
|
||||
-
|
||||
- # 3. Try binary from conda package
|
||||
- # (installed e.g. via `conda install ffmpeg -c conda-forge`)
|
||||
- if plat.startswith("win"):
|
||||
- exe = os.path.join(sys.prefix, "Library", "bin", "ffmpeg.exe")
|
||||
- else:
|
||||
- exe = os.path.join(sys.prefix, "bin", "ffmpeg")
|
||||
- if exe and os.path.isfile(exe) and _is_valid_exe(exe):
|
||||
- return exe
|
||||
-
|
||||
- # 4. Try system ffmpeg command
|
||||
- exe = "ffmpeg"
|
||||
- if _is_valid_exe(exe):
|
||||
- return exe
|
||||
-
|
||||
- # Nothing was found
|
||||
- raise RuntimeError(
|
||||
- "No ffmpeg exe could be found. Install ffmpeg on your system, "
|
||||
- "or set the IMAGEIO_FFMPEG_EXE environment variable."
|
||||
- )
|
||||
+ return '@ffmpeg@'
|
||||
|
||||
|
||||
def _popen_kwargs(prevent_sigint=False):
|
||||
@@ -1,17 +1,12 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, isPy27
|
||||
, pathlib
|
||||
, fetchPypi
|
||||
, imageio-ffmpeg
|
||||
, numpy
|
||||
, pillow
|
||||
, psutil
|
||||
, imageio-ffmpeg
|
||||
, pytest
|
||||
, numpy
|
||||
, isPy3k
|
||||
, ffmpeg_3
|
||||
, futures ? null
|
||||
, enum34
|
||||
, pytestCheckHook
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -24,26 +19,21 @@ buildPythonPackage rec {
|
||||
inherit pname version;
|
||||
};
|
||||
|
||||
checkInputs = [ pytest psutil ] ++ lib.optionals isPy3k [
|
||||
imageio-ffmpeg ffmpeg_3
|
||||
];
|
||||
propagatedBuildInputs = [ numpy pillow ];
|
||||
propagatedBuildInputs = [
|
||||
imageio-ffmpeg
|
||||
numpy
|
||||
pillow
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
checkInputs = [
|
||||
psutil
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
export IMAGEIO_USERDIR="$TMP"
|
||||
export IMAGEIO_NO_INTERNET="true"
|
||||
export HOME="$(mktemp -d)"
|
||||
py.test
|
||||
'';
|
||||
|
||||
# For some reason, importing imageio also imports xml on Nix, see
|
||||
# https://github.com/imageio/imageio/issues/395
|
||||
|
||||
# Also, there are tests that test the downloading of ffmpeg if it's not installed.
|
||||
# "Uncomment" those by renaming.
|
||||
postPatch = ''
|
||||
substituteInPlace tests/test_meta.py --replace '"urllib",' "\"urllib\",\"xml\","
|
||||
substituteInPlace tests/test_ffmpeg.py --replace 'test_get_exe_installed' 'get_exe_installed'
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
@@ -51,5 +41,4 @@ buildPythonPackage rec {
|
||||
homepage = "http://imageio.github.io/";
|
||||
license = licenses.bsd2;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, html5lib
|
||||
, six
|
||||
, beautifulsoup4
|
||||
, pkgs
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
version = "0.1.0";
|
||||
pname = "infoqscraper";
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "cykl";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "07mxp4mla7fwfc032f3mxrhjarnhkjqdxxibf9ba87c93z3dq8jj";
|
||||
};
|
||||
|
||||
# requires network
|
||||
doCheck = false;
|
||||
|
||||
buildInputs = [ html5lib ];
|
||||
propagatedBuildInputs = [ six beautifulsoup4 pkgs.ffmpeg_3 pkgs.swftools pkgs.rtmpdump ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Discover presentations and/or create a movie consisting of slides and audio track from an infoq url";
|
||||
homepage = "https://github.com/cykl/infoqscraper/wiki";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ edwtjo ];
|
||||
# infoq HTML has changed:
|
||||
# https://github.com/cykl/infoqscraper/issues/29
|
||||
broken = true;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
, fetchFromGitHub
|
||||
, pythonOlder
|
||||
, msgpack
|
||||
, nose
|
||||
, pytestCheckHook
|
||||
, numpy
|
||||
, pydantic
|
||||
, pymongo
|
||||
@@ -31,7 +31,7 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
nose
|
||||
pytestCheckHook
|
||||
numpy
|
||||
pydantic
|
||||
pymongo
|
||||
@@ -42,12 +42,6 @@ buildPythonPackage rec {
|
||||
--replace 'self.assertEqual("/usr/bin/find", which("/usr/bin/find"))' '#'
|
||||
'';
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
nosetests -v
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Serves as a complement to the Python standard library by providing a suite of tools to solve many common problems";
|
||||
longDescription = "
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, fetchFromGitHub
|
||||
, six
|
||||
, beautifulsoup4
|
||||
, lxml
|
||||
@@ -8,11 +8,15 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "ofxparse";
|
||||
version = "0.20";
|
||||
version = "unstable-2020-02-05";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0zn3grc6xhgzcc81qc3dxkkwk731cjjqqhb46smw12lk09cdnigb";
|
||||
# The newer changes haven't been released yet and ledger-autosync
|
||||
# depends on them:
|
||||
src = fetchFromGitHub {
|
||||
owner = "jseutter";
|
||||
repo = "ofxparse";
|
||||
rev = "3236cfd96434feb6bc79a8b66f3400f18e2ad3c4";
|
||||
sha256 = "1rkp174102q7hwjrg3na0qnfd612xb3r360b9blkbprjhzxy7gr7";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ six beautifulsoup4 lxml ];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{ lib, fetchurl, pkg-config, buildPythonPackage, isPy3k, at-spi2-core, pygobject3, gnome3 }:
|
||||
{ lib, fetchurl, pkg-config, buildPythonPackage, isPy3k, at-spi2-core, pygobject3, gnome }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyatspi";
|
||||
@@ -20,7 +20,7 @@ buildPythonPackage rec {
|
||||
disabled = !isPy3k;
|
||||
|
||||
passthru = {
|
||||
updateScript = gnome3.updateScript {
|
||||
updateScript = gnome.updateScript {
|
||||
packageName = pname;
|
||||
attrPath = "python3.pkgs.${pname}";
|
||||
versionPolicy = "odd-unstable";
|
||||
|
||||
@@ -18,7 +18,7 @@ buildPythonPackage rec {
|
||||
description = "Python library for the BrowserID Protocol";
|
||||
homepage = "https://github.com/mozilla/PyBrowserID";
|
||||
license = licenses.mpl20;
|
||||
maintainers = with maintainers; [ worldofpeace ];
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ lib, stdenv, fetchurl, buildPythonPackage, pkg-config, glib, gobject-introspection,
|
||||
pycairo, cairo, which, ncurses, meson, ninja, isPy3k, gnome3 }:
|
||||
pycairo, cairo, which, ncurses, meson, ninja, isPy3k, gnome }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pygobject";
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
, meson
|
||||
, ninja
|
||||
, isPy3k
|
||||
, gnome3
|
||||
, gnome
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -50,7 +50,7 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
passthru = {
|
||||
updateScript = gnome3.updateScript {
|
||||
updateScript = gnome.updateScript {
|
||||
packageName = pname;
|
||||
attrPath = "python3.pkgs.${pname}3";
|
||||
versionPolicy = "odd-unstable";
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{ lib, buildPythonPackage, fetchPypi, docutils, }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "rst2ansi";
|
||||
version = "0.1.5";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-Gxf7mmKNQPV5M60aOqlSNGREvgaUaVCOc+lQYNoz/m8=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ docutils ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "A rst converter to ansi-decorated console output";
|
||||
homepage = "https://github.com/Snaipe/python-rst-to-ansi";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ vojta001 ];
|
||||
};
|
||||
}
|
||||
@@ -8,7 +8,6 @@
|
||||
, pandas
|
||||
, tables
|
||||
, git
|
||||
, ffmpeg_3
|
||||
, scikitimage
|
||||
, matplotlib
|
||||
, qdarkstyle
|
||||
@@ -59,7 +58,6 @@ buildPythonPackage rec {
|
||||
pandas
|
||||
tables
|
||||
git
|
||||
ffmpeg_3
|
||||
scikitimage
|
||||
matplotlib
|
||||
qdarkstyle
|
||||
@@ -79,7 +77,7 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
homepage = "https://github.com/portugueslab/stytra";
|
||||
description = "A modular package to control stimulation and track behaviour";
|
||||
license = lib.licenses.gpl3;
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ tbenst ];
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user