summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/autobahn/default.nix
blob: c0c31b346e2e00c3af2c188a98f1d98026bef5fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
{
  lib,
  buildPythonPackage,
  fetchFromGitHub,

  # build-system
  cffi,
  hatchling,
  setuptools,

  # dependencies
  cryptography,
  hyperlink,
  pynacl,
  txaio,

  # optional-dependencies
  # compress
  python-snappy,
  # encryption
  base58,
  pyopenssl,
  qrcode,
  service-identity,
  # scram
  argon2-cffi,
  passlib,
  # serialization
  cbor2,
  flatbuffers,
  msgpack,
  ujson,
  py-ubjson,
  # twisted
  attrs,
  twisted,
  zope-interface,
  # ui
  pygobject3,

  # tests
  mock,
  pytest-asyncio_0,
  pytestCheckHook,
}:

buildPythonPackage (finalAttrs: {
  pname = "autobahn";
  version = "25.12.2";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "crossbario";
    repo = "autobahn-python";
    tag = "v${finalAttrs.version}";
    hash = "sha256-vSS7DpfGfNwQT8OsgEXJaP5J40QFIopdAD94/y7/jFY=";
  };

  build-system = [
    cffi
    hatchling
    setuptools
  ];

  dependencies = [
    cryptography
    hyperlink
    pynacl
    txaio
  ];

  optional-dependencies = lib.fix (self: {
    all =
      self.accelerate
      ++ self.compress
      ++ self.encryption
      ++ self.nvx
      ++ self.serialization
      ++ self.scram
      ++ self.twisted
      ++ self.ui;
    accelerate = [
      # wsaccel
    ];
    compress = [ python-snappy ];
    encryption = [
      base58
      # ecdsa (marked as insecure)
      pynacl
      pyopenssl
      qrcode # pytrie
      service-identity
    ];
    nvx = [ cffi ];
    scram = [
      argon2-cffi
      cffi
      passlib
    ];
    serialization = [
      cbor2
      flatbuffers
      msgpack
      ujson
      py-ubjson
    ];
    twisted = [
      attrs
      twisted
      zope-interface
    ];
    ui = [ pygobject3 ];
  });

  pythonImportsCheck = [ "autobahn" ];

  nativeCheckInputs = [
    mock
    pytest-asyncio_0
    pytestCheckHook
  ]
  ++ finalAttrs.passthru.optional-dependencies.encryption
  ++ finalAttrs.passthru.optional-dependencies.scram
  ++ finalAttrs.passthru.optional-dependencies.serialization;

  preCheck = ''
    # Run asyncio tests (requires twisted)
    export USE_ASYNCIO=1
    rm src/autobahn/__init__.py
  '';

  enabledTestPaths = [
    "src/autobahn"
  ];

  disabledTestPaths = [
    "src/autobahn/twisted"

    # Requires insecure ecdsa library
    "src/autobahn/wamp/test/test_wamp_cryptosign.py"
  ];

  meta = {
    description = "WebSocket and WAMP in Python for Twisted and asyncio";
    homepage = "https://crossbar.io/autobahn";
    downloadPage = "https://github.com/crossbario/autobahn-python";
    changelog = "https://github.com/crossbario/autobahn-python/blob/${finalAttrs.src.tag}/docs/changelog.rst";
    license = lib.licenses.mit;
    maintainers = [ ];
  };
})