np-services 0.1.63__tar.gz → 0.1.64__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {np_services-0.1.63 → np_services-0.1.64}/PKG-INFO +1 -1
  2. {np_services-0.1.63 → np_services-0.1.64}/pyproject.toml +1 -1
  3. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/proxies.py +5 -4
  4. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/scripts/pretest.py +116 -64
  5. {np_services-0.1.63 → np_services-0.1.64}/README.md +0 -0
  6. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/.gitignore +0 -0
  7. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/@plugins_snapshot.json +0 -0
  8. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/__future__.data.json +0 -0
  9. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/__future__.meta.json +0 -0
  10. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_ast.data.json +0 -0
  11. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_ast.meta.json +0 -0
  12. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_codecs.data.json +0 -0
  13. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_codecs.meta.json +0 -0
  14. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_collections_abc.data.json +0 -0
  15. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_collections_abc.meta.json +0 -0
  16. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_ctypes.data.json +0 -0
  17. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_ctypes.meta.json +0 -0
  18. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_decimal.data.json +0 -0
  19. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_decimal.meta.json +0 -0
  20. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_random.data.json +0 -0
  21. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_random.meta.json +0 -0
  22. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_socket.data.json +0 -0
  23. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_socket.meta.json +0 -0
  24. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_thread.data.json +0 -0
  25. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_thread.meta.json +0 -0
  26. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_typeshed/__init__.data.json +0 -0
  27. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_typeshed/__init__.meta.json +0 -0
  28. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_warnings.data.json +0 -0
  29. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_warnings.meta.json +0 -0
  30. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_weakref.data.json +0 -0
  31. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_weakref.meta.json +0 -0
  32. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_weakrefset.data.json +0 -0
  33. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_weakrefset.meta.json +0 -0
  34. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_winapi.data.json +0 -0
  35. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/_winapi.meta.json +0 -0
  36. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/abc.data.json +0 -0
  37. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/abc.meta.json +0 -0
  38. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/array.data.json +0 -0
  39. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/array.meta.json +0 -0
  40. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/atexit.data.json +0 -0
  41. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/atexit.meta.json +0 -0
  42. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/builtins.data.json +0 -0
  43. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/builtins.meta.json +0 -0
  44. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/codecs.data.json +0 -0
  45. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/codecs.meta.json +0 -0
  46. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/collections/__init__.data.json +0 -0
  47. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/collections/__init__.meta.json +0 -0
  48. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/collections/abc.data.json +0 -0
  49. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/collections/abc.meta.json +0 -0
  50. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/contextlib.data.json +0 -0
  51. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/contextlib.meta.json +0 -0
  52. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/ctypes/__init__.data.json +0 -0
  53. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/ctypes/__init__.meta.json +0 -0
  54. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/datetime.data.json +0 -0
  55. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/datetime.meta.json +0 -0
  56. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/decimal.data.json +0 -0
  57. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/decimal.meta.json +0 -0
  58. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/__init__.data.json +0 -0
  59. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/__init__.meta.json +0 -0
  60. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/charset.data.json +0 -0
  61. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/charset.meta.json +0 -0
  62. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/contentmanager.data.json +0 -0
  63. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/contentmanager.meta.json +0 -0
  64. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/errors.data.json +0 -0
  65. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/errors.meta.json +0 -0
  66. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/header.data.json +0 -0
  67. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/header.meta.json +0 -0
  68. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/message.data.json +0 -0
  69. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/message.meta.json +0 -0
  70. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/policy.data.json +0 -0
  71. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/email/policy.meta.json +0 -0
  72. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/enum.data.json +0 -0
  73. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/enum.meta.json +0 -0
  74. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/errno.data.json +0 -0
  75. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/errno.meta.json +0 -0
  76. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/fractions.data.json +0 -0
  77. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/fractions.meta.json +0 -0
  78. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/genericpath.data.json +0 -0
  79. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/genericpath.meta.json +0 -0
  80. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/__init__.data.json +0 -0
  81. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/__init__.meta.json +0 -0
  82. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/abc.data.json +0 -0
  83. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/abc.meta.json +0 -0
  84. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/machinery.data.json +0 -0
  85. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/machinery.meta.json +0 -0
  86. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/metadata/__init__.data.json +0 -0
  87. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/importlib/metadata/__init__.meta.json +0 -0
  88. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/io.data.json +0 -0
  89. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/io.meta.json +0 -0
  90. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/__init__.data.json +0 -0
  91. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/__init__.meta.json +0 -0
  92. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/decoder.data.json +0 -0
  93. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/decoder.meta.json +0 -0
  94. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/encoder.data.json +0 -0
  95. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/json/encoder.meta.json +0 -0
  96. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/logging/__init__.data.json +0 -0
  97. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/logging/__init__.meta.json +0 -0
  98. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/math.data.json +0 -0
  99. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/math.meta.json +0 -0
  100. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/mmap.data.json +0 -0
  101. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/mmap.meta.json +0 -0
  102. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/__init__.data.json +0 -0
  103. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/__init__.meta.json +0 -0
  104. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/config.data.json +0 -0
  105. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/config.meta.json +0 -0
  106. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/protocols.data.json +0 -0
  107. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/protocols.meta.json +0 -0
  108. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/zro.data.json +0 -0
  109. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/np_services/zro.meta.json +0 -0
  110. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/ntpath.data.json +0 -0
  111. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/ntpath.meta.json +0 -0
  112. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/numbers.data.json +0 -0
  113. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/numbers.meta.json +0 -0
  114. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/os/__init__.data.json +0 -0
  115. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/os/__init__.meta.json +0 -0
  116. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/os/path.data.json +0 -0
  117. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/os/path.meta.json +0 -0
  118. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/pathlib.data.json +0 -0
  119. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/pathlib.meta.json +0 -0
  120. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/pickle.data.json +0 -0
  121. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/pickle.meta.json +0 -0
  122. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/platform.data.json +0 -0
  123. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/platform.meta.json +0 -0
  124. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/posixpath.data.json +0 -0
  125. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/posixpath.meta.json +0 -0
  126. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/random.data.json +0 -0
  127. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/random.meta.json +0 -0
  128. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/re.data.json +0 -0
  129. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/re.meta.json +0 -0
  130. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/shutil.data.json +0 -0
  131. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/shutil.meta.json +0 -0
  132. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/socket.data.json +0 -0
  133. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/socket.meta.json +0 -0
  134. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_compile.data.json +0 -0
  135. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_compile.meta.json +0 -0
  136. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_constants.data.json +0 -0
  137. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_constants.meta.json +0 -0
  138. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_parse.data.json +0 -0
  139. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sre_parse.meta.json +0 -0
  140. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/string.data.json +0 -0
  141. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/string.meta.json +0 -0
  142. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/subprocess.data.json +0 -0
  143. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/subprocess.meta.json +0 -0
  144. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sys.data.json +0 -0
  145. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/sys.meta.json +0 -0
  146. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/threading.data.json +0 -0
  147. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/threading.meta.json +0 -0
  148. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/time.data.json +0 -0
  149. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/time.meta.json +0 -0
  150. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/types.data.json +0 -0
  151. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/types.meta.json +0 -0
  152. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/typing.data.json +0 -0
  153. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/typing.meta.json +0 -0
  154. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/typing_extensions.data.json +0 -0
  155. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/typing_extensions.meta.json +0 -0
  156. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/warnings.data.json +0 -0
  157. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/warnings.meta.json +0 -0
  158. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/weakref.data.json +0 -0
  159. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/weakref.meta.json +0 -0
  160. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/__init__.data.json +0 -0
  161. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/__init__.meta.json +0 -0
  162. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/_typing.data.json +0 -0
  163. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/_typing.meta.json +0 -0
  164. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/backend/__init__.data.json +0 -0
  165. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/backend/__init__.meta.json +0 -0
  166. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/backend/select.data.json +0 -0
  167. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/backend/select.meta.json +0 -0
  168. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/constants.data.json +0 -0
  169. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/constants.meta.json +0 -0
  170. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/error.data.json +0 -0
  171. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/error.meta.json +0 -0
  172. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/__init__.data.json +0 -0
  173. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/__init__.meta.json +0 -0
  174. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/attrsettr.data.json +0 -0
  175. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/attrsettr.meta.json +0 -0
  176. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/context.data.json +0 -0
  177. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/context.meta.json +0 -0
  178. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/frame.data.json +0 -0
  179. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/frame.meta.json +0 -0
  180. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/poll.data.json +0 -0
  181. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/poll.meta.json +0 -0
  182. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/socket.data.json +0 -0
  183. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/socket.meta.json +0 -0
  184. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/tracker.data.json +0 -0
  185. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/tracker.meta.json +0 -0
  186. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/version.data.json +0 -0
  187. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/sugar/version.meta.json +0 -0
  188. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/__init__.data.json +0 -0
  189. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/__init__.meta.json +0 -0
  190. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/interop.data.json +0 -0
  191. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/interop.meta.json +0 -0
  192. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/jsonapi.data.json +0 -0
  193. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/3.9/zmq/utils/jsonapi.meta.json +0 -0
  194. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/.mypy_cache/CACHEDIR.TAG +0 -0
  195. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/__init__.py +0 -0
  196. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/open_ephys.py +0 -0
  197. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/protocols.py +0 -0
  198. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/__init__.py +0 -0
  199. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/black_desktop.ps1 +0 -0
  200. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/grey_desktop.ps1 +0 -0
  201. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/mvr_connector.py +0 -0
  202. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/reset_desktop.ps1 +0 -0
  203. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/resources/zro.py +0 -0
  204. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/stim_computer_theme_changer.py +0 -0
  205. {np_services-0.1.63 → np_services-0.1.64}/src/np_services/utils.py +0 -0
  206. {np_services-0.1.63 → np_services-0.1.64}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: np-services
3
- Version: 0.1.63
3
+ Version: 0.1.64
4
4
  Summary: Tools for interfacing with devices and services used in Mindscope Neuropixels experiments at the Allen Institute.
5
5
  Author-Email: bjhardcastle <ben.hardcastle@alleninstitute.org>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -18,7 +18,7 @@ dependencies = [
18
18
  "npc-mvr>=0.1.2",
19
19
  ]
20
20
  name = "np-services"
21
- version = "0.1.63"
21
+ version = "0.1.64"
22
22
  description = "Tools for interfacing with devices and services used in Mindscope Neuropixels experiments at the Allen Institute."
23
23
  readme = "README.md"
24
24
  classifiers = [
@@ -261,7 +261,7 @@ class Proxy(abc.ABC):
261
261
 
262
262
  class CamstimSyncShared(Proxy):
263
263
  started_state: ClassVar[Sequence[str]]
264
-
264
+
265
265
  @classmethod
266
266
  def is_ready_to_start(cls) -> bool:
267
267
  if cls.is_started():
@@ -606,13 +606,14 @@ class ScriptCamstim(Camstim):
606
606
  class SessionCamstim(Camstim):
607
607
  lims_user_id: ClassVar[str]
608
608
  labtracks_mouse_id: ClassVar[int]
609
-
609
+ override_params: ClassVar[dict[str, Any] | None] = None
610
+
610
611
  @classmethod
611
612
  def start(cls):
612
613
  cls.latest_start = time.time()
613
614
  cls.get_proxy().start_session(
614
- cls.labtracks_mouse_id, cls.lims_user_id
615
- ) # , cls.params)
615
+ cls.labtracks_mouse_id, cls.lims_user_id, override_params=cls.override_params
616
+ )
616
617
 
617
618
  @classmethod
618
619
  def pretest(cls) -> None:
@@ -1,13 +1,18 @@
1
+ from __future__ import annotations
2
+
3
+ import abc
1
4
  import argparse
2
5
  import contextlib
6
+ import dataclasses
3
7
  import functools
8
+ import json
4
9
  import os
5
10
  import pathlib
6
11
  import sys
7
12
  import tempfile
8
13
  import time
9
14
  import logging
10
- from typing import Iterable, Literal
15
+ from typing import Iterable, Literal, Type
11
16
 
12
17
  import upath
13
18
 
@@ -22,27 +27,60 @@ import npc_stim
22
27
 
23
28
  logger = logging.getLogger()
24
29
 
25
- DEFAULT_SERVICES = (np_services.MouseDirector, )
26
- DEFAULT_STIM = np_services.ScriptCamstim
27
- DEFAULT_RECORDERS = (np_services.Sync, np_services.OpenEphys, np_services.VideoMVR, )
30
+ DEFAULT_SERVICES: tuple[np_services.Testable, ...] = (np_services.MouseDirector, )
31
+ DEFAULT_RECORDERS: tuple[np_services.Startable, ...] = (np_services.Sync, np_services.OpenEphys, np_services.VideoMVR, )
32
+
33
+ @dataclasses.dataclass
34
+ class PretestConfig:
35
+ check_barcodes: bool = False
36
+ check_licks: bool = False
37
+ check_opto: bool = False
38
+ check_audio: bool = False
39
+ check_running: bool = False
40
+
41
+
42
+ class PretestSession(abc.ABC):
43
+
44
+ def __init__(self, pretest_config: PretestConfig) -> None:
45
+ self.pretest_config = pretest_config
46
+
47
+ @property
48
+ def services(self) -> tuple[np_services.Testable | np_services.Startable, ...]:
49
+ return DEFAULT_SERVICES + self.recorders + (self.stim, )
50
+
51
+ @property
52
+ def recorders(self) -> tuple[np_services.Startable, ...]:
53
+ return DEFAULT_RECORDERS
54
+
55
+ @property
56
+ @abc.abstractmethod
57
+ def stim(self) -> Type[np_services.Camstim]: ...
28
58
 
29
- class DynamicRoutingPretest:
59
+ @abc.abstractmethod
60
+ def configure_services(self) -> None: ...
61
+
62
+ @abc.abstractmethod
63
+ def run_pretest_stim(self) -> None: ...
64
+
65
+ class DynamicRoutingPretest(PretestSession):
30
66
  """Modified version of class in np_workflows."""
67
+
31
68
  use_github: bool = True
69
+ task_name: str = "" # unused in pretest
32
70
 
71
+ @property
72
+ def stim(self) -> Type[np_services.ScriptCamstim]:
73
+ return np_services.ScriptCamstim
74
+
33
75
  @property
34
76
  def rig(self) -> np_config.Rig:
35
77
  return np_config.Rig()
36
-
37
- @property
38
- def config(self) -> dict:
39
- return self.rig.config
40
78
 
41
79
  @property
42
80
  def commit_hash(self) -> str:
43
81
  if hasattr(self, '_commit_hash'):
44
82
  return self._commit_hash
45
- self._commit_hash = self.config['dynamicrouting_task_script']['commit_hash']
83
+ self._commit_hash = self.rig.config['dynamicrouting_task_script']['commit_hash']
46
84
  return self.commit_hash
47
85
 
48
86
  @commit_hash.setter
@@ -53,7 +91,7 @@ class DynamicRoutingPretest:
53
91
  def github_url(self) -> str:
54
92
  if hasattr(self, '_github_url'):
55
93
  return self._github_url
56
- self._github_url = self.config['dynamicrouting_task_script']['url']
94
+ self._github_url = self.rig.config['dynamicrouting_task_script']['url']
57
95
  return self.github_url
58
96
 
59
97
  @github_url.setter
@@ -68,21 +106,6 @@ class DynamicRoutingPretest:
68
106
  def base_path(self) -> pathlib.Path:
69
107
  return pathlib.Path('//allen/programs/mindscope/workgroups/dynamicrouting/DynamicRoutingTask/')
70
108
 
71
- @property
72
- def task_name(self) -> str:
73
- """For sending to runTask.py and controlling implementation details of the task."""
74
- if hasattr(self, '_task_name'):
75
- return self._task_name
76
- return ""
77
-
78
- @task_name.setter
79
- def task_name(self, task_name: str) -> None:
80
- self._task_name = task_name
81
- if task_name not in self.preset_task_names:
82
- print(f"{task_name = !r} doesn't correspond to a preset value, but the attribute is updated anyway!")
83
- else:
84
- print(f"Updated {self.__class__.__name__}.{task_name = !r}")
85
-
86
109
  @property
87
110
  def mouse(self) -> np_session.Mouse:
88
111
  return np_session.Mouse(366122)
@@ -215,23 +238,49 @@ class DynamicRoutingPretest:
215
238
  }
216
239
  params['task_script_commit_hash'] = self.commit_hash
217
240
 
218
- np_services.ScriptCamstim.script = self.camstim_script.read_text()
241
+ self.stim.script = self.camstim_script.read_text()
219
242
  else:
220
- np_services.ScriptCamstim.script = self.camstim_script.as_posix()
243
+ self.stim.script = self.camstim_script.as_posix()
221
244
 
222
- np_services.ScriptCamstim.params = params
245
+ self.stim.params = params
223
246
 
224
247
 
225
- np_services.ScriptCamstim.start()
248
+ self.stim.start()
226
249
  with contextlib.suppress(np_services.resources.zro.ZroError):
227
- while not np_services.ScriptCamstim.is_ready_to_start():
250
+ while not self.stim.is_ready_to_start():
228
251
  time.sleep(1)
229
252
 
230
253
 
231
254
  with contextlib.suppress(np_services.resources.zro.ZroError):
232
- np_services.ScriptCamstim.finalize()
233
-
234
- def configure_services(services: Iterable[np_services.Testable]) -> None:
255
+ self.stim.finalize()
256
+
257
+ def run_pretest_stim(self) -> None:
258
+ self.run_script('sound_test')
259
+ if self.pretest_config.check_opto:
260
+ self.run_script('optotagging')
261
+
262
+ def configure_services(self) -> None:
263
+ self.stim.script = '//allen/programs/mindscope/workgroups/dynamicrouting/DynamicRoutingTask/runTask.py'
264
+ self.stim.data_root = pathlib.Path('//allen/programs/mindscope/workgroups/dynamicrouting/DynamicRoutingTask/Data/366122')
265
+
266
+
267
+ class LegacyNP0Pretest(PretestSession):
268
+ def __init__(self, pretest_config: PretestConfig) -> None:
269
+ self.pretest_config = pretest_config
270
+
271
+ @property
272
+ def stim(self) -> Type[np_services.SessionCamstim]:
273
+ return np_services.SessionCamstim
274
+
275
+ def run_pretest_stim(self) -> None:
276
+ self.stim.start()
277
+
278
+ def configure_services(self) -> None:
279
+ self.stim.lims_user_id = "ben.hardcastle"
280
+ self.stim.labtracks_mouse_id = 598796
281
+ self.stim.override_params = json.loads(pathlib.Path("//allen/programs/mindscope/workgroups/dynamicrouting/ben/np0_pretest/params.json").read_bytes())
282
+
283
+ def configure_services(session: PretestSession) -> None:
235
284
  """For each service, apply every key in self.config['service'] as an attribute."""
236
285
 
237
286
  def apply_config(service) -> None:
@@ -242,18 +291,18 @@ def configure_services(services: Iterable[np_services.Testable]) -> None:
242
291
  f"{service.__name__} | Configuring {service.__name__}.{key} = {getattr(service, key)}"
243
292
  )
244
293
 
245
- for service in services:
294
+ for service in session.services:
246
295
  for base in service.__class__.__bases__:
247
296
  apply_config(base)
248
297
  apply_config(service)
249
-
250
- np_services.ScriptCamstim.script = '//allen/programs/mindscope/workgroups/dynamicrouting/DynamicRoutingTask/runTask.py'
251
- np_services.ScriptCamstim.data_root = pathlib.Path('//allen/programs/mindscope/workgroups/dynamicrouting/DynamicRoutingTask/Data/366122')
252
-
298
+
253
299
  np_services.MouseDirector.user = 'ben.hardcastle'
254
300
  np_services.MouseDirector.mouse = 366122
301
+
302
+ session.configure_services()
255
303
 
256
- np_services.OpenEphys.folder = '_test_'
304
+ if session.pretest_config.check_barcodes:
305
+ np_services.OpenEphys.folder = '_test_'
257
306
 
258
307
 
259
308
  @functools.cache
@@ -261,58 +310,63 @@ def get_temp_dir() -> pathlib.Path:
261
310
  return pathlib.Path(tempfile.mkdtemp())
262
311
 
263
312
  def run_pretest(
264
- recorders: Iterable[np_services.Testable] = DEFAULT_RECORDERS,
265
- stim: np_services.Startable = DEFAULT_STIM,
266
- other: Iterable[np_services.Testable] = DEFAULT_SERVICES,
267
- check_licks: bool = False,
268
- check_opto: bool = False,
269
- check_audio: bool = False,
270
- check_running: bool = False,
313
+ config: PretestConfig = PretestConfig(),
271
314
  ) -> None:
272
315
  print("Starting pretest")
273
- configure_services((*recorders, stim, *other))
274
- for service in (*recorders, stim, *other):
316
+ session: PretestSession
317
+ if np_config.Rig.idx == 0:
318
+ session = LegacyNP0Pretest(config)
319
+ else:
320
+ session = DynamicRoutingPretest(config)
321
+ configure_services(session)
322
+
323
+ for service in session.services:
275
324
  if isinstance(service, np_services.Initializable):
276
325
  service.initialize()
277
326
 
278
- stoppables = tuple(_ for _ in recorders if isinstance(_, np_services.Stoppable))
327
+ stoppables = tuple(_ for _ in session.recorders if isinstance(_, np_services.Stoppable))
279
328
  with np_services.stop_on_error(*stoppables):
280
329
  for service in stoppables:
281
330
  if isinstance(service, np_services.Startable):
282
331
  service.start()
283
332
  t0 = time.time()
284
- DynamicRoutingPretest().run_script('optotagging')
333
+ session.run_pretest_stim()
285
334
  t1 = time.time()
286
- time.sleep(max(0, 70 - (t1 - t0))) # long enough to capture 2 sets of barcodes on sync/openephys (cannot scale time with 1 set)
335
+ min_wait_time = 70 if config.check_barcodes else 0 # long enough to capture 2 sets of barcodes on sync/openephys (cannot scale time with 1 set)
336
+ time.sleep(max(0, min_wait_time - (t1 - t0)))
287
337
  for service in reversed(stoppables):
288
338
  if isinstance(service, np_services.Stoppable):
289
339
  service.stop()
290
340
 
291
- for service in (*recorders, stim, *other):
341
+ for service in session.services:
292
342
  if isinstance(service, np_services.Finalizable):
293
343
  service.finalize()
294
344
 
295
- np_services.VideoMVR.sync_path = np_services.OpenEphys.sync_path = stim.sync_path = np_services.Sync.data_files[0]
345
+ np_services.VideoMVR.sync_path = np_services.OpenEphys.sync_path = session.stim.sync_path = np_services.Sync.data_files[0]
296
346
 
297
- for service in (*recorders, stim, *other):
347
+ for service in session.services:
298
348
  if isinstance(service, np_services.Validatable):
299
349
  service.validate()
300
- if any((check_licks, check_opto, check_audio)):
350
+ assert np_services.Sync.data_files is not None, "No sync file found"
351
+ assert session.stim.data_files is not None, "No stim file found"
352
+
353
+ if any((config.check_licks, config.check_opto, config.check_audio)):
301
354
  npc_sync.SyncDataset(np_services.Sync.data_files[0]).validate(
302
- licks=check_licks, opto=check_opto, audio=check_audio,
355
+ licks=config.check_licks, opto=config.check_opto, audio=config.check_audio,
303
356
  )
304
- if check_running:
305
- speed, timestamps = npc_stim.get_running_speed_from_stim_files(*stim.data_files, sync=np_services.Sync.data_files[0])
357
+ if config.check_running:
358
+ speed, timestamps = npc_stim.get_running_speed_from_stim_files(*session.stim.data_files, sync=np_services.Sync.data_files[0])
306
359
  if not speed.size or not timestamps.size:
307
360
  raise AssertionError("No running data found")
308
361
 
309
- def parse_args() -> dict:
362
+ def parse_args() -> PretestConfig:
310
363
  parser = argparse.ArgumentParser(description="Run pretest")
364
+ parser.add_argument("--check_barcodes", action="store_true", help="Check barcodes from Arduino are being received on sync and open ephys", default=False)
311
365
  parser.add_argument("--check_licks", action="store_true", help="Check lick sensor line on sync", default=False)
312
366
  parser.add_argument("--check_opto", action="store_true", help="Check opto-running line on sync", default=False)
313
367
  parser.add_argument("--check_audio", action="store_true", help="Check audio-running line on sync", default=False)
314
368
  parser.add_argument("--check_running", action="store_true", help="Check running-wheel encoder data in stim files", default=False)
315
- return vars(parser.parse_args())
369
+ return PretestConfig(**vars(parser.parse_args()))
316
370
 
317
371
  def main() -> None:
318
372
  logging.basicConfig(
@@ -321,9 +375,7 @@ def main() -> None:
321
375
  datefmt="%H:%M:%S",
322
376
  stream=sys.stdout,
323
377
  )
324
- run_pretest(
325
- **parse_args()
326
- )
378
+ run_pretest(parse_args())
327
379
 
328
380
  if __name__ == '__main__':
329
381
  main()
File without changes