diff --git a/docs/tutorial/a.7-rest-api-extensive-restsearch.ipynb b/docs/tutorial/a.7-rest-api-extensive-restsearch.ipynb new file mode 100644 index 0000000..7e0fbc4 --- /dev/null +++ b/docs/tutorial/a.7-rest-api-extensive-restsearch.ipynb @@ -0,0 +1,1614 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Extracting data from MISP using PyMISP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recovering the API KEY" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Go to `Global Actions` then `My Profile`\n", + "- Access the `/users/view/me` URL" + ] + }, + { + "cell_type": "code", + "execution_count": 491, + "metadata": {}, + "outputs": [], + "source": [ + "from pymisp import PyMISP\n", + "import urllib3\n", + "urllib3.disable_warnings()\n", + "\n", + "misp_url = 'https://localhost:8443/'\n", + "misp_key = 'GqfuZo444EFlylND0XaKZsEXgWgkPgguUZ6KVRuq'\n", + "# Should PyMISP verify the MISP certificate\n", + "misp_verifycert = False\n", + "\n", + "misp = PyMISP(misp_url, misp_key, misp_verifycert)" + ] + }, + { + "cell_type": "code", + "execution_count": 492, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from pprint import pprint\n", + "import base64\n", + "import subprocess" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Retreiving an Event" + ] + }, + { + "cell_type": "code", + "execution_count": 493, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "r1 = misp.get_event('7907c4a9-a15c-4c60-a1b4-1d214cf8cf41', pythonify=True)\n", + "print(r1)\n", + "r2 = misp.get_event(2, pythonify=False)\n", + "print(type(r2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Searching the Event index" + ] + }, + { + "cell_type": "code", + "execution_count": 494, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7907c4a9-a15c-4c60-a1b4-1d214cf8cf41\n" + ] + } + ], + "source": [ + "r = misp.search_index(pythonify=True)\n", + "print(r[1].uuid)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Only published Events" + ] + }, + { + "cell_type": "code", + "execution_count": 495, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ ip-port), ]\n", + "List of tags: 18\n", + "\tThird Attribute [, ]\n" + ] + } + ], + "source": [ + "r1 = misp.search(controller='attributes', tags='tlp:red', pythonify=True)\n", + "print('Simple tag:', len(r1))\n", + "print('\\tFirst Attribute', r1[0].Tag)\n", + "\n", + "r2 = misp.search(controller='attributes', tags=['PAP:RED', 'tlp:red'], pythonify=True)\n", + "print('List of tags:', len(r2))\n", + "print('\\tThird Attribute', r2[2].Tag)" + ] + }, + { + "cell_type": "code", + "execution_count": 502, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wildcard: 22\n", + "\tTags of all Attributes: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]\n", + "\n", + "Open question: Why do we have Attributes despite them not having the correct tag attached?\n", + "\n" + ] + } + ], + "source": [ + "r3 = misp.search(controller='attributes', tags=['misp-galaxy:target-information=%'], pythonify=True)\n", + "print('Wildcard:', len(r3))\n", + "print('\\tTags of all Attributes:', [attr.Tag for attr in r3])\n", + "print()\n", + "print(base64.b64decode('T3BlbiBxdWVzdGlvbjogV2h5IGRvIHdlIGhhdmUgQXR0cmlidXRlcyBkZXNwaXRlIHRoZW0gbm90IGhhdmluZyB0aGUgY29ycmVjdCB0YWcgYXR0YWNoZWQ/Cg==').decode())" + ] + }, + { + "cell_type": "code", + "execution_count": 503, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All unique Event tags: {'misp-galaxy:target-information=\"Canada\"', 'misp-galaxy:target-information=\"China\"', 'misp-galaxy:target-information=\"Germany\"', 'misp-galaxy:target-information=\"Luxembourg\"'}\n" + ] + } + ], + "source": [ + "allEventTags = [\n", + " [tag.name for tag in misp.get_event(attr.event_id, pythonify=True).Tag if tag.name.startswith('misp-galaxy:target-information=')]\n", + " for attr in r3\n", + "]\n", + "allUniqueEventTag = set()\n", + "for tags in allEventTags:\n", + " for tag in tags:\n", + " allUniqueEventTag.add(tag)\n", + "print('All unique Event tags:', allUniqueEventTag)" + ] + }, + { + "cell_type": "code", + "execution_count": 504, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Negation: 17\n", + "All unique Event tags: {'misp-galaxy:target-information=\"Canada\"', 'misp-galaxy:target-information=\"China\"', 'misp-galaxy:target-information=\"Germany\"'}\n" + ] + } + ], + "source": [ + "r4 = misp.search(\n", + " controller='attributes',\n", + " tags=['misp-galaxy:target-information=%', '!misp-galaxy:target-information=\"Luxembourg\"'],\n", + " pythonify=True)\n", + "print('Negation:', len(r4))\n", + "\n", + "\n", + "# Showing unique Event tags\n", + "allEventTags = [\n", + " [tag.name for tag in misp.get_event(attr.event_id, pythonify=True).Tag if tag.name.startswith('misp-galaxy:target-information=')]\n", + " for attr in r4\n", + "]\n", + "allUniqueEventTag = set()\n", + "for tags in allEventTags:\n", + " for tag in tags:\n", + " allUniqueEventTag.add(tag)\n", + "print('All unique Event tags:', allUniqueEventTag)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Want to also have the Event tags included**?" + ] + }, + { + "cell_type": "code", + "execution_count": 505, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tags of first attibute: []\n", + "Tags of first attibute: ['tlp:white', 'osint:lifetime=\"perpetual\"', 'osint:certainty=\"50\"', 'workflow:state=\"draft\"', 'misp-galaxy:threat-actor=\"APT 29\"', 'smo:sync', 'misp-galaxy:target-information=\"Canada\"', 'misp-galaxy:target-information=\"China\"', 'misp-galaxy:sector=\"Defense\"', 'misp-galaxy:sector=\"Infrastructure\"', 'misp-galaxy:malpedia=\"Kobalos\"', 'misp-galaxy:mitre-attack-pattern=\"SSH - T1021.004\"', 'misp-galaxy:mitre-attack-pattern=\"Software - T1592.002\"']\n" + ] + } + ], + "source": [ + "r5 = misp.search(\n", + " controller='attributes',\n", + " tags='misp-galaxy:target-information=%',\n", + " pythonify=True)\n", + "print('Tags of first attibute:', [tag.name for tag in r5[0].Tag])\n", + "\n", + "r6 = misp.search(\n", + " controller='attributes',\n", + " tags='misp-galaxy:target-information=%',\n", + " includeEventTags=True,\n", + " pythonify=True)\n", + "print('Tags of first attibute:', [tag.name for tag in r6[0].Tag])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Complex query**" + ] + }, + { + "cell_type": "code", + "execution_count": 506, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Or: 1056\n", + "[['tlp:amber'], ['tlp:amber'], ['tlp:amber'], ['tlp:amber'], ['tlp:amber']]\n", + "\n", + "And: 5\n", + "[['adversary:infrastructure-type=\"c2\"', 'tlp:amber'],\n", + " ['adversary:infrastructure-type=\"c2\"', 'tlp:amber'],\n", + " ['adversary:infrastructure-type=\"c2\"', 'tlp:amber'],\n", + " ['adversary:infrastructure-type=\"c2\"', 'tlp:amber'],\n", + " ['adversary:infrastructure-type=\"c2\"', 'tlp:amber']]\n" + ] + } + ], + "source": [ + "complex_query = misp.build_complex_query(or_parameters=['tlp:amber', 'adversary:infrastructure-type=\"c2\"'])\n", + "r7 = misp.search(\n", + " controller='attributes',\n", + " tags=complex_query,\n", + " includeEventTags=True,\n", + " pythonify=True)\n", + "print('Or:', len(r7))\n", + "pprint([\n", + " [tag.name for tag in attr.Tag if (tag.name == 'tlp:amber' or tag.name == 'adversary:infrastructure-type=\"c2\"')] for attr in r7[:5]\n", + "])\n", + "print()\n", + "\n", + "complex_query = misp.build_complex_query(and_parameters=['tlp:amber', 'adversary:infrastructure-type=\"c2\"'])\n", + "r8 = misp.search(\n", + " controller='attributes',\n", + " tags=complex_query,\n", + " includeEventTags=True,\n", + " pythonify=True)\n", + "print('And:', len(r8))\n", + "pprint([\n", + " [tag.name for tag in attr.Tag if (tag.name == 'tlp:amber' or tag.name == 'adversary:infrastructure-type=\"c2\"')] for attr in r8\n", + "])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Searching on GalaxyCluster metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 507, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Events: 2\n", + "[['misp-galaxy:target-information=\"Canada\"',\n", + " 'misp-galaxy:target-information=\"China\"'],\n", + " ['misp-galaxy:target-information=\"Luxembourg\"']]\n" + ] + } + ], + "source": [ + "body = {\n", + " 'galaxy.member-of': 'NATO',\n", + " 'galaxy.official-languages': 'French',\n", + "}\n", + "\n", + "events = misp.direct_call('/events/restSearch', body)\n", + "print('Events: ', len(events))\n", + "pprint([\n", + " [tag['name'] for tag in event['Event']['Tag'] if tag['name'].startswith('misp-galaxy:target-information')] for event in events\n", + "])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- **Note 1**: The `galaxy.*` instructions are not supported by PyMISP\n", + "- **Note 2**: Each `galaxy.*` instructions are **AND**ed and are applied for the same cluster\n", + " - Cannot combine from different clusters\n", + " - Combining `Galaxy.official-languages` and `Galaxy.synonyms` would likely gives no result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Searching on creator Organisation metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 508, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Organisation nationality: {'admin_org': '', 'CIRCL': '', 'ORGNAME': '', 'Training': 'Luxembourg'}\n", + "Events: 4\n", + "Org for each Event: ['Training', 'Training', 'Training', 'Training']\n" + ] + } + ], + "source": [ + "all_orgs = misp.organisations()\n", + "print('Organisation nationality:', {org['Organisation']['name']: org['Organisation']['nationality'] for org in all_orgs})\n", + "\n", + "body = {\n", + " 'org.nationality': ['Luxembourg'],\n", + " 'org.sector': ['financial'],\n", + "}\n", + "\n", + "events = misp.direct_call('/events/restSearch', body)\n", + "print('Events: ', len(events))\n", + "print('Org for each Event:', [event['Event']['Orgc']['name'] for event in events])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- **Note 1**: The `org.*` instructions are not supported by PyMISP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ReturnFormat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**CSV**" + ] + }, + { + "cell_type": "code", + "execution_count": 509, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "uuid,event_id,category,type,value,comment,to_ids,date,object_relation,attribute_tag,object_uuid,object_name,object_meta_category\n", + "\"724d5417-41e6-40a5-b368-bdfbe652302a\",2,\"Network activity\",\"ip-dst\",\"4.3.2.1\",\"Hello all!\",0,1639127173,\"\",\"\",\"\",\"\",\"\"\n", + "\"ba8e1a5a-6bb6-4ae5-9872-0a01b6b05cad\",2,\"Network activity\",\"ip-dst\",\"5.3.1.2\",\"\",1,1639060465,\"ip\",\"\",\"\",\"\",\"\"\n", + "\"8c16cf20-d5bd-4ed3-b243-98c00c16e591\",2,\"Network activity\",\"ip-dst\",\"23.1.4.2\",\"\",1,1639126626,\"ip\",\"\",\"\",\"\",\"\"\n", + "\"25a7bbb0-31f6-4525-94c0-89af86030201\",16,\"Network activity\",\"ip-dst\",\"127.0.0.1\",\"\",1,1645191487,\"ip-dst\",\"\",\"\",\"\",\"\"\n", + "\"f3eb2f37-d08d-4dbb-be0c-346ac508693f\",16,\"Network activity\",\"ip-dst\",\"127.0.0.1\",\"\",1,1645191487,\"ip-dst\",\"\",\"\",\"\",\"\"\n", + "\"f0a002d8-38a5-40f9-9a62-7e975cc8f987\",16,\"Network activity\",\"ip-dst\",\"127.0.0.1\",\"\",1,1645191487,\"ip-dst\",\"\",\"\",\"\",\"\"\n", + "\"61bfb8e3-20e3-4f37-905d-9d4e14f2564a\",20,\"Network activity\",\"ip-dst\",\"8.231.77.176\",\"\",1,1665471239,\"ip\",\"PAP:RED,adversary:infrastructure-type=\"\"exploit-distribution-point\"\"\",\"\",\"\",\"\"\n", + "\"1ac08260-a5d6-4bee-bdcd-1525685ea07d\",20,\"Network activity\",\"ip-dst\",\"226.140.183.77\",\"\",1,1665471204,\"ip\",\"PAP:RED,adversary:infrastructure-type=\"\"c2\"\"\",\"\",\"\",\"\"\n", + "\"78ce291d-241b-4162-8d6b-6a85964a31b8\",20,\"Network activity\",\"ip-dst\",\"2efe:65b4:7533:4f5f:1081:995:ff87:348f\",\"\",1,1665471204,\"ip\",\"PAP:RED,adversary:infrastructure-type=\"\"c2\"\"\",\"\",\"\",\"\"\n", + "\"b760f7a7-0d96-4b47-86b2-d5524cd2eff0\",26,\"Network activity\",\"ip-dst\",\"8.8.8.8\",\"\",1,1663321650,\"ip\",\"\",\"\",\"\",\"\"\n", + "\"9023deba-1ba0-4ab3-a0bf-64a2d5c90520\",29,\"Network activity\",\"ip-dst\",\"81.177.170.166\",\"\",1,1665472920,\"ip\",\"adversary:infrastructure-type=\"\"c2\"\",misp-galaxy:mitre-attack-pattern=\"\"Botnet - T1583.005\"\"\",\"\",\"\",\"\"\n", + "\"c9d681ad-4087-4847-8f93-aef2e54452f2\",42,\"Network activity\",\"ip-dst\",\"2.2.2.2\",\"\",0,1671095982,\"ip\",\"\",\"\",\"\",\"\"\n", + "\"60950f6a-b3bf-4a0a-b901-43308e2f761a\",2,\"Network activity\",\"ip-src\",\"1.2.3.4\",\"\",0,1639060409,\"\",\"\",\"\",\"\",\"\"\n", + "\"f2a6eb8c-7a3e-4524-8036-1b90cb18fe75\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.0\",\"today\",1,1622184577,\"\",\"\",\"\",\"\",\"\"\n", + "\"93bc9e55-20e9-4be1-b3e5-057e56a3b82e\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.1\",\"today - 1 days\",1,1622184577,\"\",\"\",\"\",\"\",\"\"\n", + "\"f7771a53-fbdf-4980-822d-9a2339ce9076\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.2\",\"today - 2 days\",1,1622184577,\"\",\"\",\"\",\"\",\"\"\n", + "\"4972022a-26fd-4270-b614-506a9c951be6\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.3\",\"today - 3 days\",1,1622184578,\"\",\"admiralty-scale:information-credibility=\"\"1\"\",admiralty-scale:source-reliability=\"\"a\"\"\",\"\",\"\",\"\"\n", + "\"c661cd4b-0474-48eb-b4ed-eb02f6b569ea\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.4\",\"today - 4 days\",1,1622184578,\"\",\"\",\"\",\"\",\"\"\n", + "\"42f68239-a794-492c-8fed-7520677824b0\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.5\",\"today - 5 days\",1,1622184578,\"\",\"\",\"\",\"\",\"\"\n", + "\"d6404ba7-c847-49b8-8748-3029ce62e2b0\",7,\"Payload delivery\",\"ip-src\",\"149.23.54.6\",\"today - 6 days\",1,1622184578,\"\",\"\",\"\",\"\",\"\"\n", + "\"f04de340-ec63-471e-b5a2-66c3fe0676b6\",9,\"Network activity\",\"ip-src\",\"5.4.2.1\",\"\",0,1650956697,\"\",\"misp-galaxy:mitre-course-of-action=\"\"Access Token Manipulation Mitigation - T1134\"\"\",\"\",\"\",\"\"\n", + "\"7bb5432f-3d67-4d59-8a43-04e57e0dcc3f\",16,\"Network activity\",\"ip-src\",\"127.0.0.1\",\"\",1,1645191487,\"ip-src\",\"\",\"\",\"\",\"\"\n", + "\"b663b3b3-92af-41bf-a18f-8582bd0983b1\",16,\"Network activity\",\"ip-src\",\"127.0.0.1\",\"\",1,1645191487,\"ip-src\",\"\",\"\",\"\",\"\"\n", + "\"0ee4a946-d826-4884-aa28-e1b9da8cbbcb\",16,\"Network activity\",\"ip-src\",\"127.0.0.1\",\"\",1,1645191487,\"ip-src\",\"\",\"\",\"\",\"\"\n", + "\"1f4b0f6b-6cf9-47bf-acd4-f15b33e7d588\",21,\"Network activity\",\"ip-src\",\"185.194.93.14\",\"Attribute #281 enriched by dns.\",0,1668077578,\"\",\"\",\"\",\"\",\"\"\n", + "\"9f7f2d28-bcc8-466e-847f-3cf2a1ec4070\",21,\"Network activity\",\"ip-src\",\"31.22.121.122\",\"Attribute #291 enriched by dns.\",0,1663922175,\"\",\"\",\"\",\"\",\"\"\n", + "\"8153e053-c7c3-4a34-ae1c-b5cd3c80ba06\",22,\"Network activity\",\"ip-src\",\"8.231.77.176\",\"\",0,1659602097,\"\",\"\",\"\",\"\",\"\"\n", + "\"a57f70a2-70dd-4ea4-b879-fbcd03d465df\",24,\"Network activity\",\"ip-src\",\"8.231.77.176\",\"\",0,1662025545,\"\",\"another:tag\",\"\",\"\",\"\"\n", + "\"af044e10-5549-4018-bc6b-162cde1a1016\",21,\"Network activity\",\"ip-src\",\"8.231.77.176\",\"\",0,1661517935,\"\",\"\",\"\",\"\",\"\"\n", + "\"fbb12142-0f82-4430-b0bc-2b1f9e26af67\",23,\"Network activity\",\"ip-src\",\"8.231.77.176\",\"\",0,1661518277,\"\",\"\",\"\",\"\",\"\"\n", + "\"a783c55f-ac52-44b4-8be1-74d52bc2c4c3\",17,\"Network activity\",\"ip-src\",\"8.231.77.176\",\"\",0,1661517997,\"\",\"\",\"\",\"\",\"\"\n", + "\"90f6fd39-a426-43b3-9157-0c48bf0710fb\",22,\"Network activity\",\"ip-src\",\"31.22.121.122\",\"\",0,1661762437,\"\",\"\",\"\",\"\",\"\"\n", + "\"bc0a1ba5-d337-42b3-81fe-9d4b75a17bec\",26,\"Network activity\",\"ip-src\",\"185.194.93.14\",\"\",0,1663137408,\"\",\"\",\"\",\"\",\"\"\n", + "\"93931645-c86c-4dcf-aa4e-591edab44c4e\",26,\"Network activity\",\"ip-src\",\"8.8.8.8\",\"\",1,1663320641,\"\",\"\",\"\",\"\",\"\"\n", + "\n", + "\n" + ] + } + ], + "source": [ + "r1 = misp.search(\n", + " controller='attributes',\n", + " type_attribute=['ip-src', 'ip-dst'],\n", + " return_format='csv')\n", + "print(r1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Aggregated context** with `context-markdown`, `context` and `attack`" + ] + }, + { + "cell_type": "code", + "execution_count": 510, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Aggregated context data\n", + "## Tags and Taxonomies\n", + "#### admiralty-scale\n", + "*The Admiralty Scale or Ranking (also called the NATO System) is used to rank the reliability of a source and the credibility of an information. Reference based on FM 2-22.3 (FM 34-52) HUMAN INTELLIGENCE COLLECTOR OPERATIONS and NATO documents.*\n", + "- admiralty-scale:information-credibility="1"\n", + "\n", + " - **information-credibility**: Information Credibility\n", + " - **1**: Confirmed by other sources\n", + "- admiralty-scale:information-credibility="2"\n", + "\n", + " - **information-credibility**: Information Credibility\n", + " - **2**: Probably true\n", + "- admiralty-scale:source-reliability="a"\n", + "\n", + " - **source-reliability**: Source Reliability\n", + " - **a**: Completely reliable\n", + "#### economical-impact\n", + "*Economical impact is a taxonomy to describe the financial impact as positive or negative gain to the tagged information (e.g. data exfiltration loss, a positive gain for an adversary).*\n", + "- economical-impact:loss="less-than-1B-euro"\n", + "\n", + " - **loss**: Loss\n", + " - **less-than-1B-euro**: Less than 1 billion EUR\n", + "#### osint\n", + "*Open Source Intelligence - Classification (MISP taxonomies)*\n", + "- osint:certainty="50"\n", + "\n", + " - **certainty**: Certainty of the elements mentioned in this Open Source Intelligence\n", + " - **50**: Chances about even (probability equals 0.50 - 50%)\n", + "- osint:lifetime="perpetual"\n", + "\n", + " - **lifetime**: Lifetime of the information as Open Source Intelligence\n", + " - **perpetual**: Perpetual\n", + "#### tlp\n", + "*The Traffic Light Protocol - or short: TLP - was designed with the objective to create a favorable classification scheme for sharing sensitive information while keeping the control over its distribution at the same time.*\n", + "- tlp:red\n", + "\n", + " - **red**: (TLP:RED) Information exclusively and directly given to (a group of) individual recipients. Sharing outside is not legitimate.\n", + "- tlp:white\n", + "\n", + " - **white**: (TLP:WHITE) Information can be shared publicly in accordance with the law.\n", + "#### workflow\n", + "*Workflow support language is a common language to support intelligence analysts to perform their analysis on data and information.*\n", + "- workflow:state="draft"\n", + "\n", + " - **state**: State\n", + " - **draft**: Draft means the information tagged can be released as a preliminary version or outline\n", + "## Galaxy Clusters\n", + "#### Misinformation Pattern\n", + "*AM!TT Tactic*\n", + "- *[Adapt existing narratives](https://localhost:8443/galaxy_clusters/view/2712)*\n", + "Adapting existing narratives to current operational goals is the tactical sweet-spot for an effective misinformation campaign. Leveraging existing narratives is not only more effective, it requires substantially less resourcing, as the promotion of new master narratives operates on a much larger sca...\n", + "#### Malpedia\n", + "*Malware galaxy based on Malpedia archive.*\n", + "- *[Kobalos](https://localhost:8443/galaxy_clusters/view/4530)*\n", + "\n", + "#### Attack Pattern\n", + "*ATT&CK Tactic*\n", + "- *[SSH - T1021.004](https://localhost:8443/galaxy_clusters/view/9691)*\n", + "Adversaries may use [Valid Accounts](https://attack.mitre.org/techniques/T1078) to log into remote machines using Secure Shell (SSH). The adversary may then perform actions as the logged-on user.\n", + "\n", + "SSH is a protocol that allows authorized users to open remote shells on other computers. Many Linux and...\n", + "- *[Software - T1592.002](https://localhost:8443/galaxy_clusters/view/9721)*\n", + "Adversaries may gather information about the victim's host software that can be used during targeting. Information about installed software may include a variety of details such as types and versions on specific hosts, as well as the presence of additional components that might be indicative of...\n", + "#### Course of Action\n", + "*ATT&CK Mitigation*\n", + "- *[Access Token Manipulation Mitigation - T1134](https://localhost:8443/galaxy_clusters/view/8213)*\n", + "Access tokens are an integral part of the security system within Windows and cannot be turned off. However, an attacker must already have administrator level access on the local system to make full use of this technique; be sure to restrict users and accounts to the least privileges they require to ...\n", + "#### Sector\n", + "*Activity sectors*\n", + "- *[Defense](https://localhost:8443/galaxy_clusters/view/2762)*\n", + "\n", + "- *[Infrastructure](https://localhost:8443/galaxy_clusters/view/2780)*\n", + "\n", + "#### Target Information\n", + "*Description of targets of threat actors.*\n", + "- *[Canada](https://localhost:8443/galaxy_clusters/view/1994)*\n", + "\n", + "- *[China](https://localhost:8443/galaxy_clusters/view/2000)*\n", + "\n", + "#### Threat Actor\n", + "*Threat actors are characteristics of malicious actors (or adversaries) representing a cyber attack threat including presumed intent and historically observed behaviour.*\n", + "- *[APT 29](https://localhost:8443/galaxy_clusters/view/7251)*\n", + "A 2015 report by F-Secure describe APT29 as: 'The Dukes are a well-resourced, highly dedicated and organized cyberespionage group that we believe has been working for the Russian Federation since at least 2008 to collect intelligence in support of foreign and security policy decision-making. Th...\n" + ] + } + ], + "source": [ + "# Get the context of Events that were created by organisations from the financial sector\n", + "\n", + "body = {\n", + " 'returnFormat': 'context-markdown',\n", + " 'org.sector': ['financial'],\n", + "}\n", + "\n", + "r2 = misp.direct_call('/events/restSearch', body)\n", + "print(r2)" + ] + }, + { + "cell_type": "code", + "execution_count": 511, + "metadata": {}, + "outputs": [], + "source": [ + "# Get the context of Events that had the threat actor APT-29 attached\n", + "\n", + "body = {\n", + " 'returnFormat': 'context',\n", + " 'tags': ['misp-galaxy:threat-actor=\\\"APT 29\\\"'],\n", + " 'staticHtml': 1, # If you want a JS-free HTML\n", + "}\n", + "\n", + "r2 = misp.direct_call('/events/restSearch', body)\n", + "with open('/tmp/attackOutput.html', 'w') as f:\n", + " f.write(r2)\n", + " # subprocess.run(['google-chrome', '--incognito', '/tmp/attackOutput.html'])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Be carefull with the amount of data you ask, use `pagination` if needed\n", + "\n", + "- `limit`: Specify the amount of data to be returned\n", + "- `page`: Specify the start of the rolling window. Is **not** zero-indexed\n", + "\n", + "If the size of the returned data is larger than the memory enveloppe you might get a different behavior based on your MISP setting:\n", + "- Nothing returned. Allowed memeory by PHP process exausted\n", + "- Data returned but slow. MISP will concatenante the returned data in a temporary file on disk\n", + " - This behavior is only applicable for `/*/restSearch` endpoints" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "r1 = misp.search(controller='attributes', pythonify=True)\n", + "print('Amount of Attributes', len(r1))\n", + "\n", + "r2 = misp.search(\n", + " controller='attributes',\n", + " page=1,\n", + " limit=5,\n", + " pythonify=True)\n", + "print('Amount of paginated Attributes', len(r2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Searching for Sightings" + ] + }, + { + "cell_type": "code", + "execution_count": 513, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1670924035',\n", + " 'event_id': '40',\n", + " 'id': '12',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '65bd7539-29eb-46eb-bf7b-4c02473062c7',\n", + " 'value': '398324'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1670924430',\n", + " 'event_id': '40',\n", + " 'id': '13',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '10857410-0033-4457-8a1d-c8331ee55d72',\n", + " 'value': '398324'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1670924454',\n", + " 'event_id': '40',\n", + " 'id': '14',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '1',\n", + " 'uuid': '1639fe60-0458-40f3-961b-7dc14eee9a7b',\n", + " 'value': '398324'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1670924455',\n", + " 'event_id': '40',\n", + " 'id': '15',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '1',\n", + " 'uuid': 'ee54ec70-3597-4455-bce9-c889202d533e',\n", + " 'value': '398324'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1670924456',\n", + " 'event_id': '40',\n", + " 'id': '16',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '1',\n", + " 'uuid': '2c1cf4d1-a6ce-474b-8878-0251ee2b6bc5',\n", + " 'value': '398324'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1448',\n", + " 'date_sighting': '1671027299',\n", + " 'event_id': '41',\n", + " 'id': '17',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '39dff1d2-7082-48a9-8d30-ce29d412879b',\n", + " 'value': 'testtest'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1448',\n", + " 'date_sighting': '1671027301',\n", + " 'event_id': '41',\n", + " 'id': '18',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '84a8e7d0-715b-453f-8cdb-07db0c208185',\n", + " 'value': 'testtest'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '77',\n", + " 'date_sighting': '1671027307',\n", + " 'event_id': '9',\n", + " 'id': '19',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '264e4a25-e072-46e5-8460-b8df72e3115c',\n", + " 'value': '5.4.2.1'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '77',\n", + " 'date_sighting': '1671027308',\n", + " 'event_id': '9',\n", + " 'id': '20',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': 'b9f15aeb-54ea-44e5-90b8-22a418b973df',\n", + " 'value': '5.4.2.1'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '243',\n", + " 'date_sighting': '1671027309',\n", + " 'event_id': '9',\n", + " 'id': '21',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '4ef355f8-1cd3-476c-bccf-90a23b4eebfe',\n", + " 'value': 'test'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1342',\n", + " 'date_sighting': '1671029412',\n", + " 'event_id': '29',\n", + " 'id': '22',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': 'f0e76bec-2e04-4e88-a976-df831257c856',\n", + " 'value': 'malware.exe|70f3bc193dfa56b78f3e6e4f800f701f'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1342',\n", + " 'date_sighting': '1671029413',\n", + " 'event_id': '29',\n", + " 'id': '23',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': '803bb696-ae86-4a04-9793-5f54a45c99b7',\n", + " 'value': 'malware.exe|70f3bc193dfa56b78f3e6e4f800f701f'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1342',\n", + " 'date_sighting': '1671029414',\n", + " 'event_id': '29',\n", + " 'id': '24',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': 'fd8c4c0f-ebbb-4294-ade1-57493f1edc9a',\n", + " 'value': 'malware.exe|70f3bc193dfa56b78f3e6e4f800f701f'}},\n", + " {'Sighting': {'Organisation': {'id': '1',\n", + " 'name': 'ORGNAME',\n", + " 'uuid': 'c5de83b4-36ba-49d6-9530-2a315caeece6'},\n", + " 'attribute_id': '1441',\n", + " 'date_sighting': '1671030274',\n", + " 'event_id': '40',\n", + " 'id': '25',\n", + " 'org_id': '1',\n", + " 'source': '',\n", + " 'type': '0',\n", + " 'uuid': 'c84dd497-ad48-4b82-8203-6135a9a924fc',\n", + " 'value': '398324'}}]\n" + ] + } + ], + "source": [ + "body = {\n", + " 'last': '7d'\n", + "}\n", + "\n", + "sightings = misp.direct_call('/sightings/restSearch', body)\n", + "pprint(sightings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sightings over time" + ] + }, + { + "cell_type": "code", + "execution_count": 512, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 514, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idattribute_idevent_idorg_iddate_sightinguuidsourcetypevalueOrganisationone
01214414012022-12-13 09:33:5565bd7539-29eb-46eb-bf7b-4c02473062c70398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
11314414012022-12-13 09:40:3010857410-0033-4457-8a1d-c8331ee55d720398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
21414414012022-12-13 09:40:541639fe60-0458-40f3-961b-7dc14eee9a7b1398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
31514414012022-12-13 09:40:55ee54ec70-3597-4455-bce9-c889202d533e1398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
41614414012022-12-13 09:40:562c1cf4d1-a6ce-474b-8878-0251ee2b6bc51398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
51714484112022-12-14 14:14:5939dff1d2-7082-48a9-8d30-ce29d412879b0testtest{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
61814484112022-12-14 14:15:0184a8e7d0-715b-453f-8cdb-07db0c2081850testtest{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
71977912022-12-14 14:15:07264e4a25-e072-46e5-8460-b8df72e3115c05.4.2.1{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
82077912022-12-14 14:15:08b9f15aeb-54ea-44e5-90b8-22a418b973df05.4.2.1{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
921243912022-12-14 14:15:094ef355f8-1cd3-476c-bccf-90a23b4eebfe0test{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
102213422912022-12-14 14:50:12f0e76bec-2e04-4e88-a976-df831257c8560malware.exe|70f3bc193dfa56b78f3e6e4f800f701f{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
112313422912022-12-14 14:50:13803bb696-ae86-4a04-9793-5f54a45c99b70malware.exe|70f3bc193dfa56b78f3e6e4f800f701f{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
122413422912022-12-14 14:50:14fd8c4c0f-ebbb-4294-ade1-57493f1edc9a0malware.exe|70f3bc193dfa56b78f3e6e4f800f701f{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
132514414012022-12-14 15:04:34c84dd497-ad48-4b82-8203-6135a9a924fc0398324{'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2...1
\n", + "
" + ], + "text/plain": [ + " id attribute_id event_id org_id date_sighting \\\n", + "0 12 1441 40 1 2022-12-13 09:33:55 \n", + "1 13 1441 40 1 2022-12-13 09:40:30 \n", + "2 14 1441 40 1 2022-12-13 09:40:54 \n", + "3 15 1441 40 1 2022-12-13 09:40:55 \n", + "4 16 1441 40 1 2022-12-13 09:40:56 \n", + "5 17 1448 41 1 2022-12-14 14:14:59 \n", + "6 18 1448 41 1 2022-12-14 14:15:01 \n", + "7 19 77 9 1 2022-12-14 14:15:07 \n", + "8 20 77 9 1 2022-12-14 14:15:08 \n", + "9 21 243 9 1 2022-12-14 14:15:09 \n", + "10 22 1342 29 1 2022-12-14 14:50:12 \n", + "11 23 1342 29 1 2022-12-14 14:50:13 \n", + "12 24 1342 29 1 2022-12-14 14:50:14 \n", + "13 25 1441 40 1 2022-12-14 15:04:34 \n", + "\n", + " uuid source type \\\n", + "0 65bd7539-29eb-46eb-bf7b-4c02473062c7 0 \n", + "1 10857410-0033-4457-8a1d-c8331ee55d72 0 \n", + "2 1639fe60-0458-40f3-961b-7dc14eee9a7b 1 \n", + "3 ee54ec70-3597-4455-bce9-c889202d533e 1 \n", + "4 2c1cf4d1-a6ce-474b-8878-0251ee2b6bc5 1 \n", + "5 39dff1d2-7082-48a9-8d30-ce29d412879b 0 \n", + "6 84a8e7d0-715b-453f-8cdb-07db0c208185 0 \n", + "7 264e4a25-e072-46e5-8460-b8df72e3115c 0 \n", + "8 b9f15aeb-54ea-44e5-90b8-22a418b973df 0 \n", + "9 4ef355f8-1cd3-476c-bccf-90a23b4eebfe 0 \n", + "10 f0e76bec-2e04-4e88-a976-df831257c856 0 \n", + "11 803bb696-ae86-4a04-9793-5f54a45c99b7 0 \n", + "12 fd8c4c0f-ebbb-4294-ade1-57493f1edc9a 0 \n", + "13 c84dd497-ad48-4b82-8203-6135a9a924fc 0 \n", + "\n", + " value \\\n", + "0 398324 \n", + "1 398324 \n", + "2 398324 \n", + "3 398324 \n", + "4 398324 \n", + "5 testtest \n", + "6 testtest \n", + "7 5.4.2.1 \n", + "8 5.4.2.1 \n", + "9 test \n", + "10 malware.exe|70f3bc193dfa56b78f3e6e4f800f701f \n", + "11 malware.exe|70f3bc193dfa56b78f3e6e4f800f701f \n", + "12 malware.exe|70f3bc193dfa56b78f3e6e4f800f701f \n", + "13 398324 \n", + "\n", + " Organisation one \n", + "0 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "1 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "2 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "3 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "4 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "5 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "6 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "7 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "8 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "9 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "10 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "11 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "12 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 \n", + "13 {'id': '1', 'uuid': 'c5de83b4-36ba-49d6-9530-2... 1 " + ] + }, + "execution_count": 514, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Converting our data to Panda DataFrame\n", + "sighting_rearranged = [sighting['Sighting'] for sighting in sightings]\n", + "df = pd.DataFrame.from_dict(sighting_rearranged)\n", + "df[\"date_sighting\"] = pd.to_datetime(df[\"date_sighting\"], unit='s')\n", + "df['one'] = 1\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Min and Max:', df['date_sighting'].min(), df['date_sighting'].max())\n", + "print('Time delta:', df['date_sighting'].max() - df['date_sighting'].min())\n", + "print('Unique Event IDs:', df.event_id.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 515, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1441 6\n", + "1342 3\n", + "1448 2\n", + "77 2\n", + "243 1\n", + "Name: attribute_id, dtype: int64\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 515, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGyCAYAAAC4Io22AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAhQUlEQVR4nO3de1TUdf7H8dcAMmICKt6DVdrKBG/lLTLdLNNF87RtlrmWZrtdNS+UJZqarYa15SHbMu3mntZba2tlpXbZzDpo3kItjxomiGLaYjKKOQLz+f3hz1lJUQc/wzDD83HOnNMM32He9mGYJ9/5zozDGGMEAABgQVigBwAAAKGDsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1EVV9gx6PRwUFBYqOjpbD4ajqmwcAAJVgjNHhw4fVvHlzhYVVvF+iysOioKBACQkJVX2zAADAgvz8fMXHx1f49SoPi+joaEknBouJianqmwcAAJXgcrmUkJDgfRyvSJWHxcmnP2JiYggLAACCzLkOY+DgTQAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArPE5LPbu3as777xTcXFxioqKUtu2bbV+/Xp/zAYAAIKMT58V8vPPP6tbt27q2bOnli1bpkaNGun7779X/fr1/TUfAAAIIj6FxTPPPKOEhAS9+eab3ssSExOtDwUAAIKTT0+FvP/+++rUqZNuu+02NW7cWFdeeaVeffXVs17H7XbL5XKVOwEAgNDk0x6LH374QbNmzVJaWprGjx+vdevWaeTIkYqMjNTQoUPPeJ2MjAxNmTLFyrDnq+W4D6v09vwld3q/QI8AAIBPHMYYc74bR0ZGqlOnTsrKyvJeNnLkSK1bt06rV68+43Xcbrfcbrf3vMvlUkJCgoqKihQTE3MBo1eMsAAAwC6Xy6XY2NhzPn779FRIs2bNlJSUVO6y1q1ba/fu3RVex+l0KiYmptwJAACEJp/Colu3btq+fXu5y3bs2KEWLVpYHQoAAAQnn8JizJgxWrNmjZ5++mnl5ORo/vz5mjNnjoYPH+6v+QAAQBDxKSw6d+6sJUuWaMGCBWrTpo3++te/KjMzU4MHD/bXfAAAIIj49KoQSbrpppt00003+WMWAAAQ5PisEAAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGt8Cosnn3xSDoej3OmKK67w12wAACDIRPh6heTkZH366af/+wYRPn8LAAAQonyugoiICDVt2tQfswAAgCDn8zEW33//vZo3b65LLrlEgwcP1u7du8+6vdvtlsvlKncCAAChyaew6Nq1q+bOnavly5dr1qxZ2rVrl7p3767Dhw9XeJ2MjAzFxsZ6TwkJCRc8NAAAqJ4cxhhT2SsfOnRILVq00IwZM/TnP//5jNu43W653W7veZfLpYSEBBUVFSkmJqayN31WLcd96JfvW9Vyp/cL9AgAAEg68fgdGxt7zsfvCzrysl69err88suVk5NT4TZOp1NOp/NCbgYAAASJC3ofiyNHjmjnzp1q1qyZrXkAAEAQ8yksHn30UX3xxRfKzc1VVlaWbrnlFoWHh2vQoEH+mg8AAAQRn54K2bNnjwYNGqTCwkI1atRI1157rdasWaNGjRr5az4AABBEfAqLhQsX+msOAAAQAvisEAAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhzQWExffp0ORwOjR492tI4AAAgmFU6LNatW6fZs2erXbt2NucBAABBrFJhceTIEQ0ePFivvvqq6tevb3smAAAQpCoVFsOHD1e/fv3Uq1cv2/MAAIAgFuHrFRYuXKiNGzdq3bp157W92+2W2+32nne5XL7eJAAACBI+7bHIz8/XqFGjNG/ePNWuXfu8rpORkaHY2FjvKSEhoVKDAgCA6s9hjDHnu/G7776rW265ReHh4d7LysrK5HA4FBYWJrfbXe5r0pn3WCQkJKioqEgxMTEW/gmnaznuQ79836qWO71foEcAAEDSicfv2NjYcz5++/RUyA033KAtW7aUu2zYsGG64oor9Pjjj58WFZLkdDrldDp9uRkAABCkfAqL6OhotWnTptxlF110keLi4k67HAAA1Dy88yYAALDG51eF/NrKlSstjAEAAEIBeywAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACs8SksZs2apXbt2ikmJkYxMTFKSUnRsmXL/DUbAAAIMj6FRXx8vKZPn64NGzZo/fr1uv7663XzzTfru+++89d8AAAgiET4snH//v3LnZ82bZpmzZqlNWvWKDk52epgAAAg+PgUFqcqKyvTv/71LxUXFyslJaXC7dxut9xut/e8y+Wq7E0CAIBqzuew2LJli1JSUnTs2DHVrVtXS5YsUVJSUoXbZ2RkaMqUKRc0JIJby3EfBnqEC5Y7vV+gRwCAoODzq0JatWql7Oxsff3113rwwQc1dOhQbd26tcLt09PTVVRU5D3l5+df0MAAAKD68nmPRWRkpC699FJJUseOHbVu3Tq98MILmj179hm3dzqdcjqdFzYlAAAIChf8PhYej6fcMRQAAKDm8mmPRXp6ulJTU/Wb3/xGhw8f1vz587Vy5UqtWLHCX/MBAIAg4lNYHDhwQEOGDNG+ffsUGxurdu3aacWKFbrxxhv9NR8AAAgiPoXF66+/7q85AABACOCzQgAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKwhLAAAgDWEBQAAsIawAAAA1hAWAADAGsICAABYQ1gAAABrCAsAAGANYQEAAKzxKSwyMjLUuXNnRUdHq3HjxvrDH/6g7du3+2s2AAAQZHwKiy+++ELDhw/XmjVr9Mknn6ikpES9e/dWcXGxv+YDAABBJMKXjZcvX17u/Ny5c9W4cWNt2LBBPXr0sDoYAAAIPj6Fxa8VFRVJkho0aFDhNm63W26323ve5XJdyE0CAIBqrNJh4fF4NHr0aHXr1k1t2rSpcLuMjAxNmTKlsjcDwKKW4z4M9AgXLHd6v0CPYEUorIUUOusBeyr9qpDhw4fr22+/1cKFC8+6XXp6uoqKiryn/Pz8yt4kAACo5iq1x2LEiBH64IMPtGrVKsXHx591W6fTKafTWanhAABAcPEpLIwxevjhh7VkyRKtXLlSiYmJ/poLAAAEIZ/CYvjw4Zo/f77ee+89RUdH68cff5QkxcbGKioqyi8DAgCA4OHTMRazZs1SUVGRrrvuOjVr1sx7WrRokb/mAwAAQcTnp0IAAAAqwmeFAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBqfw2LVqlXq37+/mjdvLofDoXfffdcPYwEAgGDkc1gUFxerffv2eumll/wxDwAACGIRvl4hNTVVqamp/pgFAAAEOY6xAAAA1vi8x8JXbrdbbrfbe97lcvn7JgEAQID4PSwyMjI0ZcoUf98MAACV0nLch4EewYrc6f0CPYKkKngqJD09XUVFRd5Tfn6+v28SAAAEiN/3WDidTjmdTn/fDAAAqAZ8DosjR44oJyfHe37Xrl3Kzs5WgwYN9Jvf/MbqcAAAILj4HBbr169Xz549vefT0tIkSUOHDtXcuXOtDQYAAIKPz2Fx3XXXyRjjj1kAAECQ430sAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArCEsAACANYQFAACwhrAAAADWEBYAAMAawgIAAFhDWAAAAGsICwAAYA1hAQAArKlUWLz00ktq2bKlateura5du2rt2rW25wIAAEHI57BYtGiR0tLSNHnyZG3cuFHt27dXnz59dODAAX/MBwAAgojPYTFjxgzde++9GjZsmJKSkvTKK6+oTp06euONN/wxHwAACCIRvmx8/PhxbdiwQenp6d7LwsLC1KtXL61evfqM13G73XK73d7zRUVFkiSXy1WZec+Lx33Ub9+7Kvnz/1FVCoX1YC2qD9aiegmF9WAtfPv+xpizb2h8sHfvXiPJZGVllbt87NixpkuXLme8zuTJk40kTpw4ceLEiVMInPLz88/aCj7tsaiM9PR0paWlec97PB4dPHhQcXFxcjgc/r55v3C5XEpISFB+fr5iYmICPU6NxlpUL6xH9cFaVB+hshbGGB0+fFjNmzc/63Y+hUXDhg0VHh6u/fv3l7t8//79atq06Rmv43Q65XQ6y11Wr149X2622oqJiQnqH5JQwlpUL6xH9cFaVB+hsBaxsbHn3MangzcjIyPVsWNHffbZZ97LPB6PPvvsM6WkpPg+IQAACCk+PxWSlpamoUOHqlOnTurSpYsyMzNVXFysYcOG+WM+AAAQRHwOi4EDB+qnn37SpEmT9OOPP6pDhw5avny5mjRp4o/5qiWn06nJkyef9hQPqh5rUb2wHtUHa1F91LS1cJhzvm4EAADg/PBZIQAAwBrCAgAAWENYAAAAawgLAABgDWEBAACsISwAIESd+gGQQFUhLFAj8Krq6sXj8QR6hJC3fft2TZgwQSUlJYEeBecQar+f/P4hZDWRx+NRWBjNFkjHjh3T8ePHvZ9V43A4ZIwJ2g++C3YFBQXatm2bCgsLddtttyksLIz7iR9t3rxZXbt2ldvtVs+ePdWvX79Aj4T/l5ubqyVLlujIkSNq1aqVbr/99pD7vcQbZFmSk5OjefPmaezYsapTpw6/NANo69ateuKJJ7Rjxw61aNFC/fv31wMPPBDosWqsLVu2aMCAAYqMjFReXp7atWunr776KtBjhaxNmzYpJSVF99xzjwoLCxUeHq45c+YoKioq5B7Ags3mzZuVmpqq1q1bq7i4WLm5ucrMzNTAgQMDPZpVPPJZkJOTo27duunFF1/UxIkTdfToUe9fZKhaW7duVY8ePdSsWTM99NBDio2N1bx587Rx48ZAj1Yj7dq1S3369NHgwYP1/vvva9myZcrLy9P69esDPVpI2rhxo7p37660tDT9/e9/19VXX62lS5eqoKDAu9cOgbFjxw717dtXQ4YM0YoVK/T222+rbdu2OnLkSKBHs449FheoqKhId999tyIiIpSYmKhVq1YpJSVF06ZNY89FFSssLNStt96qDh06KDMzU5J08OBBXXXVVRo+fLjGjh0b2AFroNmzZ+vf//63li5dqsjISJWWlurGG2/UQw89pEOHDql///5q2rRpoMcMCS6XS82bN9d9992nGTNmSJJKSkp0zTXXKCkpSXPnzmWPRYCUlJTogQceUGlpqV5//XVFRJw4CuH2229XVFSU6tevrxYtWmjMmDEBntQOHvEuUN26dZWUlKQBAwZo6tSp6tevn1avXq3x48efcc8FHec/eXl5atKkiW699VZJUmlpqRo0aKC+ffuqsLBQkliLKpafn69t27YpMjJSkpSZmamsrCxlZmZq+vTpuuqqq7x7L1iPytuzZ492796tjRs3eqPCGKOwsDD17t1bGzZs0H//+1/v5ahatWrV0iOPPKJ7773XGxUZGRlavHixysrK9Msvv+ixxx4LnadsDS5YSUmJ97+PHj1qpkyZYrp27WpGjRpljh49aowx5tixY4Ear8bYv3+/WbBggfe8x+MxxhjzwAMPmGHDhgVqrBpt8+bNpmnTpua3v/2tue2220ytWrXMihUrTFFRkTHGmJ49e5oePXoEeMrgtmXLFpOQkGDS0tKMMcaUlpYaY/73879//34THR1tnnrqqYDNWFOd+thwquzsbJOSkmI+/PBD72Vvv/22qVu3rvn222+rajy/YY9FJRQUFGjfvn3e8ycLtLS0VFFRUXr88cfVt29fff311xo/frwOHTqk4cOHe/+Shj0FBQUqKCiQJDVu3Fh33HGHJJ32CpBTX8//zDPPaOrUqVU7aA3x6/tGq1at9Omnn2rUqFG6/PLLdffdd6t3797ej4/u06ePSkpKdPz48UCNHNQ2bdqkrl27KiIiQvPnz9eBAwcUHh4uSXI4HCorK1Pjxo11//33a/ny5dq9e3eAJ645tm/frieeeEI5OTmnfa19+/ZavHix+vbt673M4/EoMTFRzZo1q8ox/YKw8FFeXp4SEhJ05513eh/QToqIiJDH45HT6dTjjz+u1NRUrV27Vl26dNGiRYt4jt+yk2tx1113ae/eveW+dmpUNGzYUNHR0ZKk8ePHa9KkSerfv3+VzloTnOm+ERkZqeTkZD388MM6duyY9uzZI0nesNi5c6eaN2/O7vlKOPnqj9GjR2vt2rWKi4vTq6++KmOM9//nycjo3bu3tmzZwkHMVcAYo19++UV33XWXnn32WT3//PPKz8/3fr20tFSSTguIDRs2qEWLFqpVq1aVzusXAd1fEoQ2bdpkWrRoYRo1amRSUlJMQUGB92sndz2e3P1VVFRk2rZta+rXr282b94ckHlD2fmshTHGjB071owYMcI89dRTpnbt2mb9+vWBGDfk/Xo99u7dW+7rS5cuNcnJyWbSpElm5cqVJi0tzcTFxYXErt+qtmnTJuN0Os348eONMcaUlZWZAQMGmM6dO3u3OfU+YIwxqamppnv37qasrOy0r8G+8ePHm2HDhpmoqCgzaNAgs2vXrjNut2/fPjNhwgRTr169kHmcICx84PF4zM6dO03fvn3Ntm3bTFJSkunWrZspLCw0xhizbds277Zut9uMHj3a1KlTJ2R+WKoTX9ZizJgxxuFwmIsuuoio8JNzrccPP/xgXC6XGTdunImPjzeXXnqp6dKli8nOzg7w5MFp7dq1ZuLEicaYE1FhzImf+djYWPPyyy+f8TpLliwxOTk5VTZjTXVyPUaNGmVeeukl89133xmn02mGDBliiouLzd/+9jeTm5trjDFm9erV5i9/+Ytp2bKl+eabbwI4tV283LQSevXqpRkzZqh27drq16+f4uPj1aRJE0nS66+/rosuukiSNHLkSA0dOlQdO3YM5Lgh7Wxr8dprr6lu3bqaOXOmZs6cqffee0/JyckBnji0VbQeHo9Hb7/9to4ePaqff/5ZR48eVaNGjVSvXr1AjxwSjDFyuVy6++67FRkZqfnz5yssLIyXlwbQ8uXLtXjxYr322mtat26dunfvrmbNmqmkpERffvmlEhMTlZubq+zsbLVv316JiYmBHtmeAIdNUPF4PKa0tNRcf/315pVXXjHGnHi6IzY21oSFhZmPP/44wBPWHGVlZee9Fvn5+SY/Pz9Qo9YI57pvrFixIsAT1gzvvPOOcTgc5quvvgr0KDXSqU8xffbZZ6ZVq1beVwampqaasLAwk5qaavbt23fG64QKDt48i4MHD+qnn34qd1l4eLh69uypY8eOSZJGjBghp9Op+Ph4Pf30096D02CXMUZlZWXe82FhYedci5MHTMXHxys+Pj4gc4cqX+8bGRkZ3DeqwE033aQbb7xRs2bN0i+//BLocWqE4uJiHT58WC6Xq9weotatW+uyyy5TVFSU7rnnHm3ZskVvvPGGvvzyS91///3e+0Mo7lUiLCrwww8/qHPnznrxxRe9R7if/AFo3LixsrKyNGTIEH388cf6/PPPlZWVpc2bN+vee+8t9wCIC7djxw6NGTNGN998s5566invm11JZ1+L++67z3sENuzhvlF9RUZGqmfPnlq6dKmKiooCPU7I27p1q/74xz/qd7/7nVq3bq158+Z5v9a4cWMdPnxYzZs310cffaQlS5Zo6NCh+uijj/T111+H9Dsy8+mmFfjkk0+0a9cuffDBB6pdu7buuece71sPJyUlacKECWrQoIE++ugjJSUlSZK++eYbHT9+3PsSL1y4LVu2qFevXurRo4fi4+M1bdo0GWM0efJkSVJycrImTpyoevXqnXEtTr7HCOzhvlE9mf9/75b7779fixcv9u45gn+c/FyiIUOGqFOnTtqwYYOGDRum5ORkdejQQcYYde/eXQ6HQ88//7yuuuoqlZWVqXv37srNzVXt2rUD/U/wGw7erMDmzZs1Y8YMXXbZZXr55Zf14IMPasSIEd6DzebMmaNrrrlGbdq0CeygIWzXrl26/vrrNWjQID399NOSpClTpujAgQPKzMxUrVq1VFZWptmzZ+vaa69Vu3btAjxxzcB9o3ozxujo0aPeg8hh38GDBzVo0CBdccUVeuGFF7yX9+zZU23bttXMmTMlST/++KOMMae9Z4X51Rv4hRr+nKuAMUZZWVl68803VVZWpjlz5ig6Olr/+c9/1KVLF02YMCHQI4a0srIyvfPOO0pNTdW4ceO8l+/Zs0ffffedunXrpg4dOmjgwIF66KGHAjhpzcN9o3pzOBxEhZ+VlJTo0KFDGjBggCR5P2wyMTFRBw8e9F5W0QfshXJUSIRFhU6+/CcvL0+TJk1SVFSUJkyYoIiICB7IqkB4eLjuuOMO7dmzRzExMZKkqVOn6s0339S4cePUpEkTvfXWW9q5c6eSk5P5hMwqxH0DNV2TJk30z3/+U5dddpmkE38IhYWF6eKLL1ZeXp4keY+hOHLkiOrWrRuwWQMhdI8e8UFFB5QdP35cq1atknTifd/Dw8MVFRWlzZs3n/Z23rDj1LWIj4/X1VdfLenER6IXFhbqgw8+0NSpU/Xwww/rH//4hz7//HNlZ2cHaNrQx30DOLOTUeHxeLxvw22M0YEDB7zbZGRkaM6cOTXuIPIaHxY7duxQZmZmuQ9OKikpkSR17dpVYWFhGjlypJYtW6bs7GyNHDlSTz75pBYuXMgR7padaS1OiouL07Rp0/T73/9exhh5PB6Vlpbqyiuv1MUXXxyAaUMf9w3g3MLCwsp91s3JPRWTJk3ShAkTdMMNN9S4g8hr1r/2V3JycpSSkqKff/5ZhYWFSktLU8OGDb312apVKw0ZMkRNmzbV+++/r8TERKWnpys8PFz9+/fnCHeLKloL6X8HOkVFRUk68fykw+HQwoULVatWLZ4G8QPuG8D5O/k7KiIiQgkJCXruuef07LPPav369Wrfvn2gx6tyNfZVIcXFxRo5cqQ8Ho86d+6sESNG6NFHH9Vjjz3mfUDbsWOH3nrrLd16663q0KGD9wAd2HU+a3GqrVu3asGCBZo5c6a+/PJLXg1iGfcNoHKmTZumiRMnKiYmRp9++qk6deoU6JECosbusQgLC1PHjh0VFxengQMHqmHDhrrjjjskyfsL9PLLL1d6errq1KkjKfSP5A2U81mLk3bv3q0nnnhC27Zt06pVq4gKP+C+AVROnz59NHHiRGVlZXnfw6UmqrF7LKQTf5md+rKsRYsWadCgQXrkkUf02GOPqVGjRvJ4PMrLywutD4iphs62FuPGjVNcXJzKyspUWFio48ePSxJv0+1H3DeAyvn1facmqrF7LCR5F//kS4UGDhwoY4z+9Kc/yeFwaPTo0XruueeUl5ent956y/vXGew737XYtWuXFixYENLvWlcdcN8AKqemR4VUw/dYnMoYI2OMwsLCtGjRIt1111265JJLtHPnTq1bt04dOnQI9Ig1xtnWYu3atbryyisDPWKNwn0DgC8Ii1Oc/F/hcDh0ww03KDs7WytXrlTbtm0DPFnNw1pUL6wHgPNVo58K+TWHw6GysjKNHTvW+8ZL/OIMDNaiemE9AJwvXh92BsnJydq4cSOvOKgGWIvqhfUAcC48FXIGof7Jc8GEtaheWA8A50JYAAAAa3gqBAAAWENYAAAAawgLAABgDWEBAACsISwAAIA1hAUAALCGsAAAANYQFgAAwBrCAgAAWENYAAAAa/4PFusAbA7eHkYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Grouping by Attribute value\n", + "value_count = df['attribute_id'].value_counts()\n", + "print(value_count)\n", + "value_count.plot(kind='bar', rot=45)" + ] + }, + { + "cell_type": "code", + "execution_count": 516, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 9\n", + "1 5\n", + "Name: date_sighting, dtype: int64\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 516, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGdCAYAAABO2DpVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAQG0lEQVR4nO3dX2jVdR/A8c9UOlnMPWrNFFdKBOafytKihCiKIizyJgoMzCCiZmZC5C4shtQSQgYl9geqXaTWjRU9ZIgwRUoqrciLNKmnRmEaxWYLTuL2XDw02KOrfvNzth19veB3cb7+fvw+QafefH/neGp6e3t7AwAgwajhHgAAOH0ICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgzZihvmFPT0/8+OOPUVtbGzU1NUN9ewBgEHp7e+Po0aMxZcqUGDVq4H2JIQ+LH3/8MRoaGob6tgBAgo6Ojpg6deqAfz7kYVFbWxsR/xts3LhxQ317AGAQurq6oqGhoe//4wMZ8rD48/HHuHHjhAUAVJm/+xiDD28CAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQRlgAAGmEBQCQZsh/Nv1MNm3Vv4d7BIbQf55dONwjAAw5OxYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkKRQWx48fj9WrV8f06dNj7NixcfHFF8eaNWuit7e3UvMBAFVkTJGT165dGxs2bIi2traYNWtWfPrpp7F06dKoq6uL5cuXV2pGAKBKFAqLDz/8MO68885YuHBhRERMmzYtNm3aFB9//HFFhgMAqkuhRyHXXXddbN++PQ4cOBAREV988UXs2rUrbrvttgGvKZfL0dXV1e8AAE5PhXYsVq1aFV1dXTFjxowYPXp0HD9+PJ5++ulYvHjxgNe0tLREc3PzKQ8KAIx8hXYs3nrrrXjjjTdi48aNsXfv3mhra4vnnnsu2traBrymqakpOjs7+46Ojo5THhoAGJkK7Vg8/vjjsWrVqrjnnnsiImLOnDnx3XffRUtLSyxZsuSk15RKpSiVSqc+KQAw4hXasfj9999j1Kj+l4wePTp6enpShwIAqlOhHYs77rgjnn766bjwwgtj1qxZ8dlnn8W6devi/vvvr9R8AEAVKRQWzz//fKxevToefvjhOHz4cEyZMiUefPDBePLJJys1HwBQRQqFRW1tbbS2tkZra2uFxgEAqpnfCgEA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0ggLACCNsAAA0hQOix9++CHuvffemDhxYowdOzbmzJkTn376aSVmAwCqzJgiJ//666+xYMGCuPHGG+P999+P888/P77++usYP358peYDAKpIobBYu3ZtNDQ0xGuvvda3Nn369PShAIDqVOhRyLvvvhvz5s2Lu+66K+rr62Pu3LnxyiuvVGo2AKDKFAqLb775JjZs2BCXXHJJfPDBB/HQQw/F8uXLo62tbcBryuVydHV19TsAgNNToUchPT09MW/evHjmmWciImLu3Lmxb9++ePHFF2PJkiUnvaalpSWam5tPfVIAYMQrtGMxefLkmDlzZr+1Sy+9NL7//vsBr2lqaorOzs6+o6OjY3CTAgAjXqEdiwULFsT+/fv7rR04cCAuuuiiAa8plUpRKpUGNx0AUFUK7Vg89thjsXv37njmmWfi4MGDsXHjxnj55ZejsbGxUvMBAFWkUFjMnz8/tmzZEps2bYrZs2fHmjVrorW1NRYvXlyp+QCAKlLoUUhExO233x633357JWYBAKqc3woBANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANIICwAgjbAAANKMGe4BAE4H01b9e7hHYAj959mFwz3CiGXHAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDTCAgBIIywAgDSnFBbPPvts1NTUxIoVK5LGAQCq2aDD4pNPPomXXnopLrvsssx5AIAqNqiw+O2332Lx4sXxyiuvxPjx47NnAgCq1KDCorGxMRYuXBg333zz355bLpejq6ur3wEAnJ7GFL1g8+bNsXfv3vjkk0/+0fktLS3R3NxceDAAoPoU2rHo6OiIRx99NN544404++yz/9E1TU1N0dnZ2Xd0dHQMalAAYOQrtGOxZ8+eOHz4cFx55ZV9a8ePH4+dO3fGCy+8EOVyOUaPHt3vmlKpFKVSKWdaAGBEKxQWN910U3z55Zf91pYuXRozZsyIJ5544oSoAADOLIXCora2NmbPnt1v7dxzz42JEyeesA4AnHn8zZsAQJrC3wr5f+3t7QljAACnAzsWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAEAaYQEApBEWAECaQmHR0tIS8+fPj9ra2qivr49FixbF/v37KzUbAFBlCoXFjh07orGxMXbv3h3btm2LY8eOxS233BLd3d2Vmg8AqCJjipy8devWfq9ff/31qK+vjz179sT111+fOhgAUH0KhcX/6+zsjIiICRMmDHhOuVyOcrnc97qrq+tUbgkAjGCD/vBmT09PrFixIhYsWBCzZ88e8LyWlpaoq6vrOxoaGgZ7SwBghBt0WDQ2Nsa+ffti8+bNf3leU1NTdHZ29h0dHR2DvSUAMMIN6lHIsmXL4r333oudO3fG1KlT//LcUqkUpVJpUMMBANWlUFj09vbGI488Elu2bIn29vaYPn16peYCAKpQobBobGyMjRs3xjvvvBO1tbVx6NChiIioq6uLsWPHVmRAAKB6FPqMxYYNG6KzszNuuOGGmDx5ct/x5ptvVmo+AKCKFH4UAgAwEL8VAgCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkERYAQBphAQCkGVRYrF+/PqZNmxZnn312XHPNNfHxxx9nzwUAVKHCYfHmm2/GypUr46mnnoq9e/fG5ZdfHrfeemscPny4EvMBAFWkcFisW7cuHnjggVi6dGnMnDkzXnzxxTjnnHPi1VdfrcR8AEAVGVPk5D/++CP27NkTTU1NfWujRo2Km2++OT766KOTXlMul6NcLve97uzsjIiIrq6uwcxb1XrKvw/3CAyhM/Hf8TOZ9/eZ5Ux8f//5z9zb2/uX5xUKi59//jmOHz8ekyZN6rc+adKk+Oqrr056TUtLSzQ3N5+w3tDQUOTWUHXqWod7AqBSzuT399GjR6Ourm7APy8UFoPR1NQUK1eu7Hvd09MTv/zyS0ycODFqamoqfXuGWVdXVzQ0NERHR0eMGzduuMcBEnl/n1l6e3vj6NGjMWXKlL88r1BYnHfeeTF69Oj46aef+q3/9NNPccEFF5z0mlKpFKVSqd/av/71ryK35TQwbtw4/+GB05T395njr3Yq/lTow5tnnXVWXHXVVbF9+/a+tZ6enti+fXtce+21xScEAE4rhR+FrFy5MpYsWRLz5s2Lq6++OlpbW6O7uzuWLl1aifkAgCpSOCzuvvvuOHLkSDz55JNx6NChuOKKK2Lr1q0nfKATIv73KOypp5464XEYUP28vzmZmt6/+94IAMA/5LdCAIA0wgIASCMsAIA0wgIASCMsSNfS0hLz58+P2traqK+vj0WLFsX+/fuHeywgyc6dO+OOO+6IKVOmRE1NTbz99tvDPRIjiLAg3Y4dO6KxsTF2794d27Zti2PHjsUtt9wS3d3dwz0akKC7uzsuv/zyWL9+/XCPwgjk66ZU3JEjR6K+vj527NgR119//XCPAySqqamJLVu2xKJFi4Z7FEYIOxZUXGdnZ0RETJgwYZgnAaDShAUV1dPTEytWrIgFCxbE7Nmzh3scACqs4j+bzpmtsbEx9u3bF7t27RruUQAYAsKCilm2bFm89957sXPnzpg6depwjwPAEBAWpOvt7Y1HHnkktmzZEu3t7TF9+vThHgmAISIsSNfY2BgbN26Md955J2pra+PQoUMREVFXVxdjx44d5umAU/Xbb7/FwYMH+15/++238fnnn8eECRPiwgsvHMbJGAl83ZR0NTU1J11/7bXX4r777hvaYYB07e3tceONN56wvmTJknj99deHfiBGFGEBAKTxdVMAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADSCAsAII2wAADS/BfCDdsjZARtJAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Grouping by weekday (0-indexed)\n", + "amount_per_weekday = df['date_sighting'].dt.weekday.value_counts()\n", + "print(amount_per_weekday)\n", + "amount_per_weekday.plot(kind='bar', rot=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 517, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "date_sighting\n", + "9 5\n", + "14 8\n", + "15 1\n", + "Name: one, dtype: int64\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 517, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGxCAYAAAA+tv8YAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAeUklEQVR4nO3dfZBV9XnA8ee6KxeU3VUQBHQRRAsCASMYRnyJVhS2hNFOmraWmAXUUYsaJBjZcTQySBaaxMFm7NJkUkB8QROrJhpDhQnYaIiAwUhSUSzKqiS0FHcBk9Xu3v6RceOW17v8lt0Ln8/MmfGce849z05O9Ms5d7mZXC6XCwCABI5p7wEAgCOHsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSKD/cJm5qa4r333ouSkpLIZDKH+/QAQCvkcrnYuXNn9OnTJ445Zt/3JQ57WLz33ntRXl5+uE8LACRQW1sbp5566j5fP+xhUVJSEhF/HKy0tPRwnx4AaIX6+vooLy9v/u/4vhz2sPj48UdpaamwAIACc6CPMfjwJgCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSySssGhsb484774z+/ftHly5dYsCAATF79uzI5XJtNR8AUEDy+q6QefPmRU1NTSxevDiGDBkSa9eujcmTJ0dZWVnccsstbTUjAFAg8gqLF198Ma644ooYP358RET069cvHnnkkXjppZfaZDgAoLDk9Shk9OjRsWLFinj99dcjIuKVV16Jn/3sZ1FRUdEmwwEAhSWvOxYzZ86M+vr6GDRoUBQVFUVjY2PMmTMnJk6cuM9jGhoaoqGhoXm9vr6+9dMCAB1aXmHx2GOPxUMPPRQPP/xwDBkyJNavXx/Tpk2LPn36RGVl5V6Pqa6ujlmzZiUZFo5m/WY+094jHDHemju+vUeAI1Yml8evdJSXl8fMmTNj6tSpzdvuueeeePDBB+O1117b6zF7u2NRXl4edXV1UVpaegijw9FFWKQjLCB/9fX1UVZWdsD/fud1x+KDDz6IY45p+bGMoqKiaGpq2ucx2Ww2stlsPqcBAApUXmExYcKEmDNnTvTt2zeGDBkSv/zlL+Pee++NKVOmtNV8AEABySssvv3tb8edd94Zf//3fx/btm2LPn36xPXXXx933XVXW80HABSQvMKipKQk5s+fH/Pnz2+jcQCAQua7QgCAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGTyCot+/fpFJpPZY5k6dWpbzQcAFJDifHZes2ZNNDY2Nq9v2LAhLrvssvjCF76QfDAAoPDkFRY9evRosT537twYMGBAfPazn006FABQmFr9GYsPP/wwHnzwwZgyZUpkMpmUMwEABSqvOxaf9OSTT8b7778fkyZN2u9+DQ0N0dDQ0LxeX1/f2lMCAB1cq+9YfO9734uKioro06fPfverrq6OsrKy5qW8vLy1pwQAOrhWhcXbb78dy5cvj2uvvfaA+1ZVVUVdXV3zUltb25pTAgAFoFWPQhYuXBg9e/aM8ePHH3DfbDYb2Wy2NacBAApM3ncsmpqaYuHChVFZWRnFxa3+iAYAcATKOyyWL18eW7ZsiSlTprTFPABAAcv7lsPll18euVyuLWYBAAqc7woBAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSyTss3n333fjiF78Y3bt3jy5dusSnPvWpWLt2bVvMBgAUmOJ8dt6xY0ecf/75cckll8Szzz4bPXr0iDfeeCNOPPHEtpoPACggeYXFvHnzory8PBYuXNi8rX///smHAgAKU16PQn74wx/GyJEj4wtf+EL07NkzPv3pT8d3v/vdtpoNACgweYXFf/7nf0ZNTU2ceeaZsWzZsrjxxhvjlltuicWLF+/zmIaGhqivr2+xAABHprwehTQ1NcXIkSPj61//ekREfPrTn44NGzbEggULorKycq/HVFdXx6xZsw59UgCgw8vrjkXv3r1j8ODBLbadddZZsWXLln0eU1VVFXV1dc1LbW1t6yYFADq8vO5YnH/++bFx48YW215//fU47bTT9nlMNpuNbDbbuukAgIKS1x2LW2+9NVavXh1f//rXY9OmTfHwww/Hd77znZg6dWpbzQcAFJC8wuLcc8+NJ554Ih555JEYOnRozJ49O+bPnx8TJ05sq/kAgAKS16OQiIjPfe5z8bnPfa4tZgEACpzvCgEAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJLJKyzuvvvuyGQyLZZBgwa11WwAQIEpzveAIUOGxPLly//0BsV5vwUAcITKuwqKi4ujV69ebTELAFDg8v6MxRtvvBF9+vSJ008/PSZOnBhbtmxpi7kAgAKU1x2LUaNGxaJFi2LgwIGxdevWmDVrVlx44YWxYcOGKCkp2esxDQ0N0dDQ0LxeX19/aBMDAB1WXmFRUVHR/M/Dhg2LUaNGxWmnnRaPPfZYXHPNNXs9prq6OmbNmnVoU7aDfjOfae8RjhhvzR3f3iMAcJgc0q+bnnDCCfFnf/ZnsWnTpn3uU1VVFXV1dc1LbW3toZwSAOjADiksdu3aFW+++Wb07t17n/tks9koLS1tsQAAR6a8wmLGjBmxatWqeOutt+LFF1+Mv/zLv4yioqK46qqr2mo+AKCA5PUZi3feeSeuuuqq2L59e/To0SMuuOCCWL16dfTo0aOt5gMACkheYbF06dK2mgMAOAL4rhAAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACCZQwqLuXPnRiaTiWnTpiUaBwAoZK0OizVr1sQ///M/x7Bhw1LOAwAUsFaFxa5du2LixInx3e9+N0488cTUMwEABapVYTF16tQYP358jBkzJvU8AEABK873gKVLl8bLL78ca9asOaj9GxoaoqGhoXm9vr4+31MCAAUirzsWtbW18eUvfzkeeuih6Ny580EdU11dHWVlZc1LeXl5qwYFADq+vMJi3bp1sW3btjjnnHOiuLg4iouLY9WqVfGP//iPUVxcHI2NjXscU1VVFXV1dc1LbW1tsuEBgI4lr0chl156abz66qsttk2ePDkGDRoUt99+exQVFe1xTDabjWw2e2hTAgAFIa+wKCkpiaFDh7bYdvzxx0f37t332A4AHH38zZsAQDJ5/1bI/7dy5coEYwAARwJ3LACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGTyCouampoYNmxYlJaWRmlpaZx33nnx7LPPttVsAECBySssTj311Jg7d26sW7cu1q5dG3/+538eV1xxRfz6179uq/kAgAJSnM/OEyZMaLE+Z86cqKmpidWrV8eQIUOSDgYAFJ68wuKTGhsb4/vf/37s3r07zjvvvJQzAQAFKu+wePXVV+O8886LP/zhD9G1a9d44oknYvDgwfvcv6GhIRoaGprX6+vrWzcpANDh5f1bIQMHDoz169fHL37xi7jxxhujsrIyfvOb3+xz/+rq6igrK2teysvLD2lgAKDjyjssOnXqFGeccUaMGDEiqqurY/jw4XHfffftc/+qqqqoq6trXmpraw9pYACg42r1Zyw+1tTU1OJRx/+XzWYjm80e6mkAgAKQV1hUVVVFRUVF9O3bN3bu3BkPP/xwrFy5MpYtW9ZW8wEABSSvsNi2bVt86Utfiq1bt0ZZWVkMGzYsli1bFpdddllbzQcAFJC8wuJ73/teW80BABwBfFcIAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQTF5hUV1dHeeee26UlJREz54948orr4yNGze21WwAQIHJKyxWrVoVU6dOjdWrV8dzzz0XH330UVx++eWxe/futpoPACggxfns/JOf/KTF+qJFi6Jnz56xbt26uOiii5IOBgAUnkP6jEVdXV1ERHTr1i3JMABAYcvrjsUnNTU1xbRp0+L888+PoUOH7nO/hoaGaGhoaF6vr69v7SkBgA6u1Xcspk6dGhs2bIilS5fud7/q6uooKytrXsrLy1t7SgCgg2tVWNx0003x9NNPx09/+tM49dRT97tvVVVV1NXVNS+1tbWtGhQA6PjyehSSy+Xi5ptvjieeeCJWrlwZ/fv3P+Ax2Ww2stlsqwcEAApHXmExderUePjhh+Opp56KkpKS+O1vfxsREWVlZdGlS5c2GRAAKBx5PQqpqamJurq6uPjii6N3797Ny6OPPtpW8wEABSTvRyEAAPviu0IAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBk8g6L559/PiZMmBB9+vSJTCYTTz75ZBuMBQAUorzDYvfu3TF8+PC4//7722IeAKCAFed7QEVFRVRUVLTFLABAgfMZCwAgmbzvWOSroaEhGhoamtfr6+vb+pQAQDtp87Corq6OWbNmtfVpAGgH/WY+094jHBHemju+vUdIps0fhVRVVUVdXV3zUltb29anBADaSZvfschms5HNZtv6NABAB5B3WOzatSs2bdrUvL558+ZYv359dOvWLfr27Zt0OACgsOQdFmvXro1LLrmkeX369OkREVFZWRmLFi1KNhgAUHjyDouLL744crlcW8wCABQ4f48FAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERYAQDLCAgBIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAywgIASEZYAADJCAsAIBlhAQAkIywAgGSEBQCQTKvC4v77749+/fpF586dY9SoUfHSSy+lngsAKEB5h8Wjjz4a06dPj6997Wvx8ssvx/Dhw2Ps2LGxbdu2tpgPACggeYfFvffeG9ddd11Mnjw5Bg8eHAsWLIjjjjsu/uVf/qUt5gMACkheYfHhhx/GunXrYsyYMX96g2OOiTFjxsTPf/7z5MMBAIWlOJ+d//u//zsaGxvj5JNPbrH95JNPjtdee22vxzQ0NERDQ0Pzel1dXURE1NfX5zvrYdXU8EF7j3DE6Oj/WxcK12Q6rsl0XJdpFMI1+fGMuVxuv/vlFRatUV1dHbNmzdpje3l5eVufmg6ibH57TwAtuSbpaArpmty5c2eUlZXt8/W8wuKkk06KoqKi+N3vftdi++9+97vo1avXXo+pqqqK6dOnN683NTXF//zP/0T37t0jk8nkc3o+ob6+PsrLy6O2tjZKS0vbexyICNclHY9rMp1cLhc7d+6MPn367He/vMKiU6dOMWLEiFixYkVceeWVEfHHUFixYkXcdNNNez0mm81GNpttse2EE07I57TsR2lpqf+z0OG4LuloXJNp7O9OxcfyfhQyffr0qKysjJEjR8ZnPvOZmD9/fuzevTsmT57cqiEBgCNH3mHxN3/zN/Ff//Vfcdddd8Vvf/vbOPvss+MnP/nJHh/oBACOPq368OZNN920z0cfHB7ZbDa+9rWv7fGYCdqT65KOxjV5+GVyB/q9EQCAg+RLyACAZIQFAJCMsAAAkhEWBWjnzp0xbdq0OO2006JLly4xevToWLNmTXuPxVHi+eefjwkTJkSfPn0ik8nEk08+uc99b7jhhshkMjF//vzDNh9HpwNdl5MmTYpMJtNiGTduXPsMe4QTFgXo2muvjeeeey6WLFkSr776alx++eUxZsyYePfdd9t7NI4Cu3fvjuHDh8f999+/3/2eeOKJWL169QH/lj5I4WCuy3HjxsXWrVubl0ceeeQwTnj0aPPvCiGt3//+9/H444/HU089FRdddFFERNx9993xox/9KGpqauKee+5p5wk50lVUVERFRcV+93n33Xfj5ptvjmXLlsX48eMP02QczQ7musxms/v8+gnScceiwPzv//5vNDY2RufOnVts79KlS/zsZz9rp6ngT5qamuLqq6+O2267LYYMGdLe40CzlStXRs+ePWPgwIFx4403xvbt29t7pCOSsCgwJSUlcd5558Xs2bPjvffei8bGxnjwwQfj5z//eWzdurW9x4OYN29eFBcXxy233NLeo0CzcePGxQMPPBArVqyIefPmxapVq6KioiIaGxvbe7QjjkchBWjJkiUxZcqUOOWUU6KoqCjOOeecuOqqq2LdunXtPRpHuXXr1sV9990XL7/8sm8vpkP527/92+Z//tSnPhXDhg2LAQMGxMqVK+PSSy9tx8mOPO5YFKABAwbEqlWrYteuXVFbWxsvvfRSfPTRR3H66ae392gc5f793/89tm3bFn379o3i4uIoLi6Ot99+O77yla9Ev3792ns8aHb66afHSSedFJs2bWrvUY447lgUsOOPPz6OP/742LFjRyxbtiz+4R/+ob1H4ih39dVXx5gxY1psGzt2bFx99dW+AZkO5Z133ont27dH796923uUI46wKEDLli2LXC4XAwcOjE2bNsVtt90WgwYN8i9uDotdu3a1+FPe5s2bY/369dGtW7fo27dvdO/evcX+xx57bPTq1SsGDhx4uEflKLK/67Jbt24xa9as+PznPx+9evWKN998M7761a/GGWecEWPHjm3HqY9MwqIA1dXVRVVVVbzzzjvRrVu3+PznPx9z5syJY489tr1H4yiwdu3auOSSS5rXp0+fHhERlZWVsWjRonaaiqPd/q7Lmpqa+NWvfhWLFy+O999/P/r06ROXX355zJ4927eetgHfbgoAJOPDmwBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkIywAACSERZQQC6++OKYNm1ae4+xV2+99VZkMplYv379QR+zaNGiOOGEEw7LuYDDQ1jAEWrlypWRyWTi/fffPyznKy8vj61bt8bQoUOTvu+kSZPiyiuvPCznAg6d7woBkigqKopevXodcecC8uOOBXRQu3fvji996UvRtWvX6N27d3zrW99q8fqSJUti5MiRUVJSEr169Yq/+7u/i23btkXEHx8VfPyFTCeeeGJkMpmYNGlSREQ0NTVFdXV19O/fP7p06RLDhw+PH/zgBwc1044dO2LixInRo0eP6NKlS5x55pmxcOHC5nP+/8cTP/zhD+PMM8+Mzp07xyWXXBKLFy/e612UZcuWxVlnnRVdu3aNcePGxdatWyMi4u67747FixfHU089FZlMJjKZTKxcuXKPc318d2bFihUxcuTIOO6442L06NGxcePGFue55557omfPnlFSUhLXXnttzJw5M84+++yD+tmBgyMsoIO67bbbYtWqVfHUU0/Fv/3bv8XKlSvj5Zdfbn79o48+itmzZ8crr7wSTz75ZLz11lvN8VBeXh6PP/54RERs3Lgxtm7dGvfdd19ERFRXV8cDDzwQCxYsiF//+tdx6623xhe/+MVYtWrVAWe688474ze/+U08++yz8R//8R9RU1MTJ5100l733bx5c/zVX/1VXHnllfHKK6/E9ddfH3fcccce+33wwQfxzW9+M5YsWRLPP/98bNmyJWbMmBERETNmzIi//uu/bo6NrVu3xujRo/c53x133BHf+ta3Yu3atVFcXBxTpkxpfu2hhx6KOXPmxLx582LdunXRt2/fqKmpOeDPDOQpB3Q4O3fuzHXq1Cn32GOPNW/bvn17rkuXLrkvf/nLez1mzZo1uYjI7dy5M5fL5XI//elPcxGR27FjR/M+f/jDH3LHHXdc7sUXX2xx7DXXXJO76qqrDjjXhAkTcpMnT97ra5s3b85FRO6Xv/xlLpfL5W6//fbc0KFDW+xzxx13tJhp4cKFuYjIbdq0qXmf+++/P3fyySc3r1dWVuauuOKK/Z7r4591+fLlzfs888wzuYjI/f73v8/lcrncqFGjclOnTm3xPueff35u+PDhB/y5gYPnjgV0QG+++WZ8+OGHMWrUqOZt3bp1i4EDBzavr1u3LiZMmBB9+/aNkpKS+OxnPxsREVu2bNnn+27atCk++OCDuOyyy6Jr167NywMPPBBvvvnmAee68cYbY+nSpXH22WfHV7/61XjxxRf3ue/GjRvj3HPPbbHtM5/5zB77HXfccTFgwIDm9d69ezc/0snXsGHDWrxPRDS/18aNG/c4/97mAQ6ND29CAdq9e3eMHTs2xo4dGw899FD06NEjtmzZEmPHjo0PP/xwn8ft2rUrIiKeeeaZOOWUU1q8ls1mD3jeioqKePvtt+PHP/5xPPfcc3HppZfG1KlT45vf/Garf5Zjjz22xXomk4lcLnfI75XJZCLij58pAQ4fdyygAxowYEAce+yx8Ytf/KJ5244dO+L111+PiIjXXnsttm/fHnPnzo0LL7wwBg0atMef8jt16hQREY2Njc3bBg8eHNlsNrZs2RJnnHFGi6W8vPygZuvRo0dUVlbGgw8+GPPnz4/vfOc7e91v4MCBsXbt2hbb1qxZc1Dn+P8/xyd/htYaOHDgHudvzTzA/rljAR1Q165d45prronbbrstunfvHj179ow77rgjjjnmj38W6Nu3b3Tq1Cm+/e1vxw033BAbNmyI2bNnt3iP0047LTKZTDz99NPxF3/xF9GlS5coKSmJGTNmxK233hpNTU1xwQUXRF1dXbzwwgtRWloalZWV+53rrrvuihEjRsSQIUOioaEhnn766TjrrLP2uu/1118f9957b9x+++1xzTXXxPr162PRokUR8ae7CQejX79+sWzZsti4cWN07949ysrKDvrYT7r55pvjuuuui5EjR8bo0aPj0UcfjV/96ldx+umnt+r9gL1zxwI6qG984xtx4YUXxoQJE2LMmDFxwQUXxIgRIyLij3cNFi1aFN///vdj8ODBMXfu3D0eR5xyyikxa9asmDlzZpx88slx0003RUTE7Nmz484774zq6uo466yzYty4cfHMM89E//79DzhTp06doqqqKoYNGxYXXXRRFBUVxdKlS/e6b//+/eMHP/hB/Ou//msMGzYsampqmn8r5GAeu3zsuuuui4EDB8bIkSOjR48e8cILLxz0sZ80ceLEqKqqihkzZsQ555wTmzdvjkmTJkXnzp1b9X7A3mVyrX2YCZCnOXPmxIIFC6K2tra9R4mIiMsuuyx69eoVS5Ysae9R4IjhUQjQZv7pn/4pzj333OjevXu88MIL8Y1vfKP5zsnh9sEHH8SCBQti7NixUVRUFI888kgsX748nnvuuXaZB45UHoUAzW644YYWv4b6yeWGG27I+/3eeOONuOKKK2Lw4MExe/bs+MpXvhJ33313+sEPQiaTiR//+Mdx0UUXxYgRI+JHP/pRPP744zFmzJh2mQeOVB6FAM22bdsW9fX1e32ttLQ0evbseZgnAgqNsAAAkvEoBABIRlgAAMkICwAgGWEBACQjLACAZIQFAJCMsAAAkhEWAEAy/weQUvStHTG7NQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "amount_per_weekday_for_each_attribute = df.groupby([df['date_sighting'].dt.hour])['one'].sum()\n", + "print(amount_per_weekday_for_each_attribute)\n", + "amount_per_weekday_for_each_attribute.plot(kind='bar', rot=0)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.10 ('venv': venv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "99e19f785595e5572f3a0434505ffd496bc893a60c3b4501be593ee9ddcf6bde" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/load_csv.py b/examples/load_csv.py index 580791a..7732196 100755 --- a/examples/load_csv.py +++ b/examples/load_csv.py @@ -10,7 +10,7 @@ from pymisp import MISPEvent try: from keys import misp_url, misp_key, misp_verifycert - from pymisp import ExpandedPyMISP + from pymisp import PyMISP offline = False except ImportError as e: offline = True @@ -66,7 +66,7 @@ if __name__ == '__main__': if offline: print('You are in offline mode, quitting.') else: - misp = ExpandedPyMISP(url=misp_url, key=misp_key, ssl=misp_verifycert) + misp = PyMISP(url=misp_url, key=misp_key, ssl=misp_verifycert) if args.new_event: event = MISPEvent() event.info = args.new_event @@ -80,7 +80,7 @@ if __name__ == '__main__': else: print('Something went wrong:') print(new_event) - else: + elif args.update_event: for o in objects: new_object = misp.add_object(args.update_event, o, pythonify=True) if isinstance(new_object, str): @@ -90,3 +90,5 @@ if __name__ == '__main__': else: print('Something went wrong:') print(new_event) + else: + print('you need to pass either a event info field (flag -i), or the event ID you want to update (flag -u)') diff --git a/poetry.lock b/poetry.lock index 1981ec8..6bf7514 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,29 @@ # This file is automatically @generated by Poetry and should not be changed by hand. +[[package]] +name = "aiofiles" +version = "22.1.0" +description = "File support for asyncio." +category = "dev" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] + +[[package]] +name = "aiosqlite" +version = "0.18.0" +description = "asyncio bridge to the standard sqlite3 module" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.18.0-py3-none-any.whl", hash = "sha256:c3511b841e3a2c5614900ba1d179f366826857586f78abd75e7cbeb88e75a557"}, + {file = "aiosqlite-0.18.0.tar.gz", hash = "sha256:faa843ef5fb08bafe9a9b3859012d3d9d6f77ce3637899de20606b7fc39aa213"}, +] + [[package]] name = "alabaster" version = "0.7.13" @@ -213,14 +237,14 @@ tzdata = ["tzdata"] [[package]] name = "beautifulsoup4" -version = "4.11.1" +version = "4.11.2" description = "Screen-scraping library" category = "main" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, - {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, + {file = "beautifulsoup4-4.11.2-py3-none-any.whl", hash = "sha256:0e79446b10b3ecb499c1556f7e228a53e64a2bfcebd455f370d8927cb5b59e39"}, + {file = "beautifulsoup4-4.11.2.tar.gz", hash = "sha256:bc4bdda6717de5a2987436fb8d72f45dc90dd856bdfd512a1314ce90349a0106"}, ] [package.dependencies] @@ -232,14 +256,14 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, ] [package.dependencies] @@ -248,7 +272,6 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] [[package]] name = "brotli" @@ -654,63 +677,63 @@ files = [ [[package]] name = "coverage" -version = "7.0.5" +version = "7.1.0" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a7f23bbaeb2a87f90f607730b45564076d870f1fb07b9318d0c21f36871932b"}, - {file = "coverage-7.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c18d47f314b950dbf24a41787ced1474e01ca816011925976d90a88b27c22b89"}, - {file = "coverage-7.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef14d75d86f104f03dea66c13188487151760ef25dd6b2dbd541885185f05f40"}, - {file = "coverage-7.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66e50680e888840c0995f2ad766e726ce71ca682e3c5f4eee82272c7671d38a2"}, - {file = "coverage-7.0.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9fed35ca8c6e946e877893bbac022e8563b94404a605af1d1e6accc7eb73289"}, - {file = "coverage-7.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d8d04e755934195bdc1db45ba9e040b8d20d046d04d6d77e71b3b34a8cc002d0"}, - {file = "coverage-7.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e109f1c9a3ece676597831874126555997c48f62bddbcace6ed17be3e372de8"}, - {file = "coverage-7.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0a1890fca2962c4f1ad16551d660b46ea77291fba2cc21c024cd527b9d9c8809"}, - {file = "coverage-7.0.5-cp310-cp310-win32.whl", hash = "sha256:be9fcf32c010da0ba40bf4ee01889d6c737658f4ddff160bd7eb9cac8f094b21"}, - {file = "coverage-7.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:cbfcba14a3225b055a28b3199c3d81cd0ab37d2353ffd7f6fd64844cebab31ad"}, - {file = "coverage-7.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:30b5fec1d34cc932c1bc04017b538ce16bf84e239378b8f75220478645d11fca"}, - {file = "coverage-7.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1caed2367b32cc80a2b7f58a9f46658218a19c6cfe5bc234021966dc3daa01f0"}, - {file = "coverage-7.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d254666d29540a72d17cc0175746cfb03d5123db33e67d1020e42dae611dc196"}, - {file = "coverage-7.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19245c249aa711d954623d94f23cc94c0fd65865661f20b7781210cb97c471c0"}, - {file = "coverage-7.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b05ed4b35bf6ee790832f68932baf1f00caa32283d66cc4d455c9e9d115aafc"}, - {file = "coverage-7.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:29de916ba1099ba2aab76aca101580006adfac5646de9b7c010a0f13867cba45"}, - {file = "coverage-7.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e057e74e53db78122a3979f908973e171909a58ac20df05c33998d52e6d35757"}, - {file = "coverage-7.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:411d4ff9d041be08fdfc02adf62e89c735b9468f6d8f6427f8a14b6bb0a85095"}, - {file = "coverage-7.0.5-cp311-cp311-win32.whl", hash = "sha256:52ab14b9e09ce052237dfe12d6892dd39b0401690856bcfe75d5baba4bfe2831"}, - {file = "coverage-7.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:1f66862d3a41674ebd8d1a7b6f5387fe5ce353f8719040a986551a545d7d83ea"}, - {file = "coverage-7.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b69522b168a6b64edf0c33ba53eac491c0a8f5cc94fa4337f9c6f4c8f2f5296c"}, - {file = "coverage-7.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436e103950d05b7d7f55e39beeb4d5be298ca3e119e0589c0227e6d0b01ee8c7"}, - {file = "coverage-7.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c56bec53d6e3154eaff6ea941226e7bd7cc0d99f9b3756c2520fc7a94e6d96"}, - {file = "coverage-7.0.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a38362528a9115a4e276e65eeabf67dcfaf57698e17ae388599568a78dcb029"}, - {file = "coverage-7.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f67472c09a0c7486e27f3275f617c964d25e35727af952869dd496b9b5b7f6a3"}, - {file = "coverage-7.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:220e3fa77d14c8a507b2d951e463b57a1f7810a6443a26f9b7591ef39047b1b2"}, - {file = "coverage-7.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ecb0f73954892f98611e183f50acdc9e21a4653f294dfbe079da73c6378a6f47"}, - {file = "coverage-7.0.5-cp37-cp37m-win32.whl", hash = "sha256:d8f3e2e0a1d6777e58e834fd5a04657f66affa615dae61dd67c35d1568c38882"}, - {file = "coverage-7.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9e662e6fc4f513b79da5d10a23edd2b87685815b337b1a30cd11307a6679148d"}, - {file = "coverage-7.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:790e4433962c9f454e213b21b0fd4b42310ade9c077e8edcb5113db0818450cb"}, - {file = "coverage-7.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49640bda9bda35b057b0e65b7c43ba706fa2335c9a9896652aebe0fa399e80e6"}, - {file = "coverage-7.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d66187792bfe56f8c18ba986a0e4ae44856b1c645336bd2c776e3386da91e1dd"}, - {file = "coverage-7.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:276f4cd0001cd83b00817c8db76730938b1ee40f4993b6a905f40a7278103b3a"}, - {file = "coverage-7.0.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95304068686545aa368b35dfda1cdfbbdbe2f6fe43de4a2e9baa8ebd71be46e2"}, - {file = "coverage-7.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:17e01dd8666c445025c29684d4aabf5a90dc6ef1ab25328aa52bedaa95b65ad7"}, - {file = "coverage-7.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea76dbcad0b7b0deb265d8c36e0801abcddf6cc1395940a24e3595288b405ca0"}, - {file = "coverage-7.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:50a6adc2be8edd7ee67d1abc3cd20678987c7b9d79cd265de55941e3d0d56499"}, - {file = "coverage-7.0.5-cp38-cp38-win32.whl", hash = "sha256:e4ce984133b888cc3a46867c8b4372c7dee9cee300335e2925e197bcd45b9e16"}, - {file = "coverage-7.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:4a950f83fd3f9bca23b77442f3a2b2ea4ac900944d8af9993743774c4fdc57af"}, - {file = "coverage-7.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c2155943896ac78b9b0fd910fb381186d0c345911f5333ee46ac44c8f0e43ab"}, - {file = "coverage-7.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54f7e9705e14b2c9f6abdeb127c390f679f6dbe64ba732788d3015f7f76ef637"}, - {file = "coverage-7.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ee30375b409d9a7ea0f30c50645d436b6f5dfee254edffd27e45a980ad2c7f4"}, - {file = "coverage-7.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b78729038abea6a5df0d2708dce21e82073463b2d79d10884d7d591e0f385ded"}, - {file = "coverage-7.0.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13250b1f0bd023e0c9f11838bdeb60214dd5b6aaf8e8d2f110c7e232a1bff83b"}, - {file = "coverage-7.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c407b1950b2d2ffa091f4e225ca19a66a9bd81222f27c56bd12658fc5ca1209"}, - {file = "coverage-7.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c76a3075e96b9c9ff00df8b5f7f560f5634dffd1658bafb79eb2682867e94f78"}, - {file = "coverage-7.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f26648e1b3b03b6022b48a9b910d0ae209e2d51f50441db5dce5b530fad6d9b1"}, - {file = "coverage-7.0.5-cp39-cp39-win32.whl", hash = "sha256:ba3027deb7abf02859aca49c865ece538aee56dcb4871b4cced23ba4d5088904"}, - {file = "coverage-7.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:949844af60ee96a376aac1ded2a27e134b8c8d35cc006a52903fc06c24a3296f"}, - {file = "coverage-7.0.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:b9727ac4f5cf2cbf87880a63870b5b9730a8ae3a4a360241a0fdaa2f71240ff0"}, - {file = "coverage-7.0.5.tar.gz", hash = "sha256:051afcbd6d2ac39298d62d340f94dbb6a1f31de06dfaf6fcef7b759dd3860c45"}, + {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, + {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, + {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, + {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, + {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, + {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, + {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, + {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, + {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, + {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, + {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, + {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, + {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, + {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, + {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, + {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, + {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, + {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, + {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, + {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, + {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, ] [package.dependencies] @@ -721,74 +744,74 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "39.0.0" +version = "39.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "cryptography-39.0.0-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288"}, - {file = "cryptography-39.0.0-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96"}, - {file = "cryptography-39.0.0-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717"}, - {file = "cryptography-39.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df"}, - {file = "cryptography-39.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1"}, - {file = "cryptography-39.0.0-cp36-abi3-win32.whl", hash = "sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de"}, - {file = "cryptography-39.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e"}, - {file = "cryptography-39.0.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb"}, - {file = "cryptography-39.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f"}, - {file = "cryptography-39.0.0-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458"}, - {file = "cryptography-39.0.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190"}, - {file = "cryptography-39.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773"}, - {file = "cryptography-39.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856"}, - {file = "cryptography-39.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f"}, - {file = "cryptography-39.0.0-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce"}, - {file = "cryptography-39.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8"}, - {file = "cryptography-39.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39"}, - {file = "cryptography-39.0.0.tar.gz", hash = "sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf"}, + {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965"}, + {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f"}, + {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106"}, + {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c"}, + {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4"}, + {file = "cryptography-39.0.1-cp36-abi3-win32.whl", hash = "sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8"}, + {file = "cryptography-39.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac"}, + {file = "cryptography-39.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad"}, + {file = "cryptography-39.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6"}, + {file = "cryptography-39.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a"}, + {file = "cryptography-39.0.1.tar.gz", hash = "sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695"}, ] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1,!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "ruff"] +pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"] sdist = ["setuptools-rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"] +test-randomorder = ["pytest-randomly"] +tox = ["tox"] [[package]] name = "debugpy" -version = "1.6.5" +version = "1.6.6" description = "An implementation of the Debug Adapter Protocol for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.5-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:696165f021a6a17da08163eaae84f3faf5d8be68fb78cd78488dd347e625279c"}, - {file = "debugpy-1.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17039e392d6f38388a68bd02c5f823b32a92142a851e96ba3ec52aeb1ce9d900"}, - {file = "debugpy-1.6.5-cp310-cp310-win32.whl", hash = "sha256:62a06eb78378292ba6c427d861246574dc8b84471904973797b29dd33c7c2495"}, - {file = "debugpy-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:9984fc00ab372c97f63786c400107f54224663ea293daab7b365a5b821d26309"}, - {file = "debugpy-1.6.5-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:048368f121c08b00bbded161e8583817af5055982d2722450a69efe2051621c2"}, - {file = "debugpy-1.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e4eca42055759032e3f1909d1374ba1d729143e0c2729bb8cb5e8b5807c458"}, - {file = "debugpy-1.6.5-cp37-cp37m-win32.whl", hash = "sha256:0f9afcc8cad6424695f3356dc9a7406d5b18e37ee2e73f34792881a44b02cc50"}, - {file = "debugpy-1.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b5a74ecebe5253344501d9b23f74459c46428b30437fa9254cfb8cb129943242"}, - {file = "debugpy-1.6.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9e809ef787802c808995e5b6ade714a25fa187f892b41a412d418a15a9c4a432"}, - {file = "debugpy-1.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:947c686e8adb46726f3d5f19854f6aebf66c2edb91225643c7f44b40b064a235"}, - {file = "debugpy-1.6.5-cp38-cp38-win32.whl", hash = "sha256:377391341c4b86f403d93e467da8e2d05c22b683f08f9af3e16d980165b06b90"}, - {file = "debugpy-1.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:286ae0c2def18ee0dc8a61fa76d51039ca8c11485b6ed3ef83e3efe8a23926ae"}, - {file = "debugpy-1.6.5-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:500dd4a9ff818f5c52dddb4a608c7de5371c2d7d905c505eb745556c579a9f11"}, - {file = "debugpy-1.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f3fab217fe7e2acb2d90732af1a871947def4e2b6654945ba1ebd94bd0bea26"}, - {file = "debugpy-1.6.5-cp39-cp39-win32.whl", hash = "sha256:15bc5febe0edc79726517b1f8d57d7ac7c784567b5ba804aab8b1c9d07a57018"}, - {file = "debugpy-1.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:7e84d9e4420122384cb2cc762a00b4e17cbf998022890f89b195ce178f78ff47"}, - {file = "debugpy-1.6.5-py2.py3-none-any.whl", hash = "sha256:8116e40a1cd0593bd2aba01d4d560ee08f018da8e8fbd4cbd24ff09b5f0e41ef"}, - {file = "debugpy-1.6.5.zip", hash = "sha256:5e55e6c79e215239dd0794ee0bf655412b934735a58e9d705e5c544f596f1603"}, + {file = "debugpy-1.6.6-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0ea1011e94416e90fb3598cc3ef5e08b0a4dd6ce6b9b33ccd436c1dffc8cd664"}, + {file = "debugpy-1.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dff595686178b0e75580c24d316aa45a8f4d56e2418063865c114eef651a982e"}, + {file = "debugpy-1.6.6-cp310-cp310-win32.whl", hash = "sha256:87755e173fcf2ec45f584bb9d61aa7686bb665d861b81faa366d59808bbd3494"}, + {file = "debugpy-1.6.6-cp310-cp310-win_amd64.whl", hash = "sha256:72687b62a54d9d9e3fb85e7a37ea67f0e803aaa31be700e61d2f3742a5683917"}, + {file = "debugpy-1.6.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:78739f77c58048ec006e2b3eb2e0cd5a06d5f48c915e2fc7911a337354508110"}, + {file = "debugpy-1.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23c29e40e39ad7d869d408ded414f6d46d82f8a93b5857ac3ac1e915893139ca"}, + {file = "debugpy-1.6.6-cp37-cp37m-win32.whl", hash = "sha256:7aa7e103610e5867d19a7d069e02e72eb2b3045b124d051cfd1538f1d8832d1b"}, + {file = "debugpy-1.6.6-cp37-cp37m-win_amd64.whl", hash = "sha256:f6383c29e796203a0bba74a250615ad262c4279d398e89d895a69d3069498305"}, + {file = "debugpy-1.6.6-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:23363e6d2a04d726bbc1400bd4e9898d54419b36b2cdf7020e3e215e1dcd0f8e"}, + {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, + {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, + {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, + {file = "debugpy-1.6.6-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:11a0f3a106f69901e4a9a5683ce943a7a5605696024134b522aa1bfda25b5fec"}, + {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, + {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, + {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, + {file = "debugpy-1.6.6-py2.py3-none-any.whl", hash = "sha256:be596b44448aac14eb3614248c91586e2bc1728e020e82ef3197189aae556115"}, + {file = "debugpy-1.6.6.zip", hash = "sha256:b9c2130e1c632540fbf9c2c88341493797ddf58016e7cba02e311de9b0a96b67"}, ] [[package]] @@ -868,18 +891,6 @@ files = [ {file = "ebcdic-1.1.1-py2.py3-none-any.whl", hash = "sha256:33b4cb729bc2d0bf46cc1847b0e5946897cb8d3f53520c5b9aa5fa98d7e735f1"}, ] -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - [[package]] name = "exceptiongroup" version = "1.1.0" @@ -912,14 +923,14 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "extract-msg" -version = "0.39.0" +version = "0.39.1" description = "Extracts emails and attachments saved in Microsoft Outlook's .msg files" category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "extract_msg-0.39.0-py2.py3-none-any.whl", hash = "sha256:41a5886ce7bafe262c79025a46b74bf035613b8589d3063b5b132a17f6889d72"}, - {file = "extract_msg-0.39.0.tar.gz", hash = "sha256:5937584117d0051322673cc39e48059437a9ab5c3f49e484ed4284f3a95492ec"}, + {file = "extract_msg-0.39.1-py2.py3-none-any.whl", hash = "sha256:ad35b9260cdcdfdd61b0661d02eec495f0eaaf3ffa5d4cec4eca89da351dc8a7"}, + {file = "extract_msg-0.39.1.tar.gz", hash = "sha256:bb83d79f13ed2d94380dc7705a4d6a8ba98de6694ccc242fa51afd74f2394d4e"}, ] [package.dependencies] @@ -1029,14 +1040,14 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag [[package]] name = "importlib-resources" -version = "5.10.2" +version = "5.12.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_resources-5.10.2-py3-none-any.whl", hash = "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6"}, - {file = "importlib_resources-5.10.2.tar.gz", hash = "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"}, + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, ] [package.dependencies] @@ -1060,27 +1071,28 @@ files = [ [[package]] name = "ipykernel" -version = "6.20.2" +version = "6.21.2" description = "IPython Kernel for Jupyter" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.20.2-py3-none-any.whl", hash = "sha256:5d0675d5f48bf6a95fd517d7b70bcb3b2c5631b2069949b5c2d6e1d7477fb5a0"}, - {file = "ipykernel-6.20.2.tar.gz", hash = "sha256:1893c5b847033cd7a58f6843b04a9349ffb1031bc6588401cadc9adb58da428e"}, + {file = "ipykernel-6.21.2-py3-none-any.whl", hash = "sha256:430d00549b6aaf49bd0f5393150691edb1815afa62d457ee6b1a66b25cb17874"}, + {file = "ipykernel-6.21.2.tar.gz", hash = "sha256:6e9213484e4ce1fb14267ee435e18f23cc3a0634e635b9fb4ed4677b84e0fdf8"}, ] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} comm = ">=0.1.1" -debugpy = ">=1.0" +debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=17" +pyzmq = ">=20" tornado = ">=6.1" traitlets = ">=5.4.0" @@ -1093,14 +1105,14 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" [[package]] name = "ipython" -version = "8.8.0" +version = "8.10.0" description = "IPython: Productive Interactive Computing" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipython-8.8.0-py3-none-any.whl", hash = "sha256:da01e6df1501e6e7c32b5084212ddadd4ee2471602e2cf3e0190f4de6b0ea481"}, - {file = "ipython-8.8.0.tar.gz", hash = "sha256:f3bf2c08505ad2c3f4ed5c46ae0331a8547d36bf4b21a451e8ae80c0791db95b"}, + {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"}, + {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"}, ] [package.dependencies] @@ -1112,13 +1124,13 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=3.0.11,<3.1.0" +prompt-toolkit = ">=3.0.30,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.20)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] @@ -1128,7 +1140,7 @@ notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "ipython-genutils" @@ -1254,39 +1266,38 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.4.9" +version = "8.0.3" description = "Jupyter protocol implementation and client libraries" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, + {file = "jupyter_client-8.0.3-py3-none-any.whl", hash = "sha256:be48ac6bd659cbbddb7a674cf06b3b8afbf53f228253cf58bde604c03bd487b0"}, + {file = "jupyter_client-8.0.3.tar.gz", hash = "sha256:ed65498bea6d876ef9d8da3e0db3dd33c5d129f5b2645f56ae03993782966bd0"}, ] [package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = "*" +traitlets = ">=5.3" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["codecov", "coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "5.1.3" +version = "5.2.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.1.3-py3-none-any.whl", hash = "sha256:d23ab7db81ca1759f13780cd6b65f37f59bf8e0186ac422d5ca4982cc7d56716"}, - {file = "jupyter_core-5.1.3.tar.gz", hash = "sha256:82e1cff0ef804c38677eff7070d5ff1d45037fef01a2d9ba9e6b7b8201831e9f"}, + {file = "jupyter_core-5.2.0-py3-none-any.whl", hash = "sha256:4bdc2928c37f6917130c667d8b8708f20aee539d8283c6be72aabd2a4b4c83b0"}, + {file = "jupyter_core-5.2.0.tar.gz", hash = "sha256:1407cdb4c79ee467696c04b76633fc1884015fa109323365a6372c8e890cc83f"}, ] [package.dependencies] @@ -1325,18 +1336,18 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= [[package]] name = "jupyter-server" -version = "2.1.0" +version = "2.3.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.1.0-py3-none-any.whl", hash = "sha256:90cd6f2bd0581ddd9b2dbe82026a0f4c228a1d95c86e22460efbfdfc931fcf56"}, - {file = "jupyter_server-2.1.0.tar.gz", hash = "sha256:efaae5e4f0d5f22c7f2f2dc848635036ee74a2df02abed52d30d9d95121ad382"}, + {file = "jupyter_server-2.3.0-py3-none-any.whl", hash = "sha256:b15078954120886d580e19d1746e2b62a3dc7bd082cb4716115c25fcd7061b00"}, + {file = "jupyter_server-2.3.0.tar.gz", hash = "sha256:29d6657bfb160b0e39b9030d67f33f918a188f2eba28065314a933b327fef872"}, ] [package.dependencies] -anyio = ">=3.1.0,<4" +anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" @@ -1359,6 +1370,26 @@ websocket-client = "*" docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +[[package]] +name = "jupyter-server-fileid" +version = "0.7.0" +description = "" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_fileid-0.7.0-py3-none-any.whl", hash = "sha256:0b580a9d75cc7a7132132d6bb3faa4645e34527bff8760861e9e6de51bec7397"}, + {file = "jupyter_server_fileid-0.7.0.tar.gz", hash = "sha256:340e86b45875d51a60e0e93d8d3bcb609c2bc8d315ec07c003f36d561f637c0e"}, +] + +[package.dependencies] +jupyter-events = ">=0.5.0" +jupyter-server = ">=1.15,<3" + +[package.extras] +cli = ["click"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] + [[package]] name = "jupyter-server-terminals" version = "0.4.4" @@ -1379,16 +1410,55 @@ terminado = ">=0.8.3" docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] +[[package]] +name = "jupyter-server-ydoc" +version = "0.6.1" +description = "A Jupyter Server Extension Providing Y Documents." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_server_ydoc-0.6.1-py3-none-any.whl", hash = "sha256:18275ff1ce7e93bbda2301ca066273b3951fc50b0d9c8fc33788374134ad7920"}, + {file = "jupyter_server_ydoc-0.6.1.tar.gz", hash = "sha256:ab10864708c81fa41ab9f2ed3626b54ff6926eaf14545d1d439714978dad6e9f"}, +] + +[package.dependencies] +jupyter-server-fileid = ">=0.6.0,<1" +jupyter-ydoc = ">=0.2.0,<0.4.0" +ypy-websocket = ">=0.8.2,<0.9.0" + +[package.extras] +test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytest-cov", "pytest-timeout", "pytest-tornasync"] + +[[package]] +name = "jupyter-ydoc" +version = "0.2.2" +description = "Document structures for collaborative editing using Ypy" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_ydoc-0.2.2-py3-none-any.whl", hash = "sha256:596a9ae5986b59f8776c42430b5ad516405963574078ab801781933c9690be93"}, + {file = "jupyter_ydoc-0.2.2.tar.gz", hash = "sha256:3163bd4745eedd46d4bba6df52ab26be3c5c44c3a8aaf247635062486ea8f84f"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-websocket (>=0.3.1,<0.4.0)"] + [[package]] name = "jupyterlab" -version = "3.5.2" +version = "3.6.1" description = "JupyterLab computational environment" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.5.2-py3-none-any.whl", hash = "sha256:16e9b8320dcec469c70bb883e993e0bb84c4ea1a734063731f66922cf72add1b"}, - {file = "jupyterlab-3.5.2.tar.gz", hash = "sha256:10ac094215ffb872ddffbe2982bf1c039a79fecc326e191e7cc5efd84f331dad"}, + {file = "jupyterlab-3.6.1-py3-none-any.whl", hash = "sha256:ad6707dd0149b629d0ed5b56916cfcdb816b376c6af3190337faba09e27ea29e"}, + {file = "jupyterlab-3.6.1.tar.gz", hash = "sha256:aee98c174180e98a30470297d10b959e8e64f2288970c0de65f0a6d2b4807034"}, ] [package.dependencies] @@ -1396,15 +1466,17 @@ ipython = "*" jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" -jupyterlab-server = ">=2.10,<3.0" +jupyter-server-ydoc = ">=0.6.0,<0.7.0" +jupyter-ydoc = ">=0.2.2,<0.3.0" +jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" packaging = "*" -tomli = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} tornado = ">=6.1.0" [package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.6.0)", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] [[package]] name = "jupyterlab-pygments" @@ -1580,14 +1652,14 @@ traitlets = "*" [[package]] name = "mistune" -version = "2.0.4" +version = "2.0.5" description = "A sane Markdown parser with useful plugins and renderers" category = "dev" optional = false python-versions = "*" files = [ - {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, - {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, + {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, + {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, ] [[package]] @@ -1608,42 +1680,38 @@ olefile = ">=0.45" [[package]] name = "mypy" -version = "0.991" +version = "1.0.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, - {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, - {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, - {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, - {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, - {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, - {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, - {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, - {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, - {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, - {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, - {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, - {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, - {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, - {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, - {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, - {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, - {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, - {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, - {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, - {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, - {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, - {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, - {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, + {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, + {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, + {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, + {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, + {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, + {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, + {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, + {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, + {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, + {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, + {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, + {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, + {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, + {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, + {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, + {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, + {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, + {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, ] [package.dependencies] @@ -1659,26 +1727,26 @@ reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] name = "nbclassic" -version = "0.4.8" -description = "A web-based notebook environment for interactive computing" +version = "0.5.2" +description = "Jupyter Notebook as a Jupyter Server extension." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"}, - {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"}, + {file = "nbclassic-0.5.2-py3-none-any.whl", hash = "sha256:6403a996562dadefa7fee9c49e17b663b5fd508241de5df655b90011cf3342d9"}, + {file = "nbclassic-0.5.2.tar.gz", hash = "sha256:40f11bbcc59e8956c3d5ef132dec8e5a853e893ecf831e791d54da0d8a50d79d"}, ] [package.dependencies] @@ -1703,7 +1771,7 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] [[package]] name = "nbclient" @@ -1730,14 +1798,14 @@ test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>= [[package]] name = "nbconvert" -version = "7.2.8" +version = "7.2.9" description = "Converting Jupyter Notebooks" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.2.8-py3-none-any.whl", hash = "sha256:ac57f2812175441a883f50c8ff113133ca65fe7ae5a9f1e3da3bfd1a70dce2ee"}, - {file = "nbconvert-7.2.8.tar.gz", hash = "sha256:ccedacde57a972836bfb46466485be29ed1364ed7c2f379f62bad47d340ece99"}, + {file = "nbconvert-7.2.9-py3-none-any.whl", hash = "sha256:495638c5e06005f4a5ce828d8a81d28e34f95c20f4384d5d7a22254b443836e7"}, + {file = "nbconvert-7.2.9.tar.gz", hash = "sha256:a42c3ac137c64f70cbe4d763111bf358641ea53b37a01a5c202ed86374af5234"}, ] [package.dependencies] @@ -2076,19 +2144,19 @@ files = [ [[package]] name = "platformdirs" -version = "2.6.2" +version = "3.0.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, - {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, + {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, + {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -2108,14 +2176,14 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.15.0" +version = "0.16.0" description = "Python client for the Prometheus monitoring system." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"}, - {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, + {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, + {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, ] [package.extras] @@ -2177,14 +2245,14 @@ files = [ [[package]] name = "publicsuffixlist" -version = "0.9.2" +version = "0.9.3" description = "publicsuffixlist implement" category = "main" optional = true python-versions = ">=2.6" files = [ - {file = "publicsuffixlist-0.9.2-py2.py3-none-any.whl", hash = "sha256:8fe444e9b2fd47e377b7af7c90404532afebb24519e493a2b177e518279a4c8c"}, - {file = "publicsuffixlist-0.9.2.tar.gz", hash = "sha256:d1aa03a40ad6ba5c12d6617b3ea1c7ffccb928b4ed6b5523f65a2ff968df01f3"}, + {file = "publicsuffixlist-0.9.3-py2.py3-none-any.whl", hash = "sha256:89dc66bdf7fd3ef00265b0370472d46ec1d8bcd42e8cb16c7f5dcdc582b711dc"}, + {file = "publicsuffixlist-0.9.3.tar.gz", hash = "sha256:f624196fdbfc695ee183a52a2dfc56181c8f59bf269fed78be4b48bc2457e218"}, ] [package.extras] @@ -2377,14 +2445,14 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.4" +version = "2.0.6" description = "A python library adding a json log formatter" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, - {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, + {file = "python-json-logger-2.0.6.tar.gz", hash = "sha256:ed33182c2b438a366775c25c1219ebbd5bd7f71694c644d6b3b3861e19565ae3"}, + {file = "python_json_logger-2.0.6-py3-none-any.whl", hash = "sha256:3af8e5b907b4a5b53cae249205ee3a3d3472bd7ad9ddfaec136eec2f2faf4995"}, ] [[package]] @@ -2841,14 +2909,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.4" description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, + {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, + {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, ] [[package]] @@ -2889,14 +2957,14 @@ test = ["cython", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.21.7" +version = "1.22" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "sphinx_autodoc_typehints-1.21.7-py3-none-any.whl", hash = "sha256:e62ae99f7e0546f5083262f744365256ad9f975dab47c6a1fe11fd4d316fb4dd"}, - {file = "sphinx_autodoc_typehints-1.21.7.tar.gz", hash = "sha256:92bee8da845edfe33df3bba4b5a67f1ff5723f597ee2c9c3f831c29ce918819d"}, + {file = "sphinx_autodoc_typehints-1.22-py3-none-any.whl", hash = "sha256:ef4a8b9d52de66065aa7d3adfabf5a436feb8a2eff07c2ddc31625d8807f2b69"}, + {file = "sphinx_autodoc_typehints-1.22.tar.gz", hash = "sha256:71fca2d5eee9b034204e4c686ab20b4d8f5eb9409396216bcae6c87c38e18ea6"}, ] [package.dependencies] @@ -2909,14 +2977,14 @@ type-comment = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.3" +version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "sphinxcontrib.applehelp-1.0.3-py3-none-any.whl", hash = "sha256:ba0f2a22e6eeada8da6428d0d520215ee8864253f32facf958cca81e426f661d"}, - {file = "sphinxcontrib.applehelp-1.0.3.tar.gz", hash = "sha256:83749f09f6ac843b8cb685277dbc818a8bf2d76cc19602699094fe9a74db529e"}, + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, ] [package.extras] @@ -2941,14 +3009,14 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] [package.extras] @@ -3097,14 +3165,14 @@ files = [ [[package]] name = "traitlets" -version = "5.8.1" +version = "5.9.0" description = "Traitlets Python configuration system" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "traitlets-5.8.1-py3-none-any.whl", hash = "sha256:a1ca5df6414f8b5760f7c5f256e326ee21b581742114545b462b35ffe3f04861"}, - {file = "traitlets-5.8.1.tar.gz", hash = "sha256:32500888f5ff7bbf3b9267ea31748fa657aaf34d56d85e60f91dda7dc7f5785b"}, + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, ] [package.extras] @@ -3169,14 +3237,14 @@ files = [ [[package]] name = "types-pyopenssl" -version = "23.0.0.2" +version = "23.0.0.3" description = "Typing stubs for pyOpenSSL" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-pyOpenSSL-23.0.0.2.tar.gz", hash = "sha256:2e95f9a667d5eeb0af699196f857f7d23d5b4d642437bd37355bc13a87e9f4ae"}, - {file = "types_pyOpenSSL-23.0.0.2-py3-none-any.whl", hash = "sha256:ea7e5d06f9190a1cb013ad4b13d48896e5cd1e785c04491f38b206d1bc4b8dc1"}, + {file = "types-pyOpenSSL-23.0.0.3.tar.gz", hash = "sha256:6ca54d593f8b946f9570f9ed7457c41da3b518feff5e344851941a6209bea62b"}, + {file = "types_pyOpenSSL-23.0.0.3-py3-none-any.whl", hash = "sha256:847ab17a16475a882dc29898648a6a35ad0d3e11a5bba5aa8ab2f3435a8647cb"}, ] [package.dependencies] @@ -3184,26 +3252,26 @@ cryptography = ">=35.0.0" [[package]] name = "types-python-dateutil" -version = "2.8.19.6" +version = "2.8.19.7" description = "Typing stubs for python-dateutil" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-python-dateutil-2.8.19.6.tar.gz", hash = "sha256:4a6f4cc19ce4ba1a08670871e297bf3802f55d4f129e6aa2443f540b6cf803d2"}, - {file = "types_python_dateutil-2.8.19.6-py3-none-any.whl", hash = "sha256:cfb7d31021c6bce6f3362c69af6e3abb48fe3e08854f02487e844ff910deec2a"}, + {file = "types-python-dateutil-2.8.19.7.tar.gz", hash = "sha256:7af5a5d1b80ab1dfa0ba4d879facb382e836a62c2d408c2a509be4680fd8b1c8"}, + {file = "types_python_dateutil-2.8.19.7-py3-none-any.whl", hash = "sha256:669751e1e6d4f3dbbff471231740e7ecdae2135b604383e477fe31fd56223967"}, ] [[package]] name = "types-redis" -version = "4.4.0.3" +version = "4.5.1.1" description = "Typing stubs for redis" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-redis-4.4.0.3.tar.gz", hash = "sha256:99fc86307fb19b775a0ad5de91d2fc0ccdb9a2be7ac790f4553911d2f2abdf61"}, - {file = "types_redis-4.4.0.3-py3-none-any.whl", hash = "sha256:fc25550bc108908a32bb47cfdecde8d2155b6b7e40688af99a4bacbd7e3e857e"}, + {file = "types-redis-4.5.1.1.tar.gz", hash = "sha256:c072e4824855f46d0a968509c3e0fa4789fc13b62d472064527bad3d1815aeed"}, + {file = "types_redis-4.5.1.1-py3-none-any.whl", hash = "sha256:081dfeec730df6e3f32ccbdafe3198873b7c02516c22d79cc2a40efdd69a3963"}, ] [package.dependencies] @@ -3212,14 +3280,14 @@ types-pyOpenSSL = "*" [[package]] name = "types-requests" -version = "2.28.11.8" +version = "2.28.11.13" description = "Typing stubs for requests" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-requests-2.28.11.8.tar.gz", hash = "sha256:e67424525f84adfbeab7268a159d3c633862dafae15c5b19547ce1b55954f0a3"}, - {file = "types_requests-2.28.11.8-py3-none-any.whl", hash = "sha256:61960554baca0008ae7e2db2bd3b322ca9a144d3e80ce270f5fb640817e40994"}, + {file = "types-requests-2.28.11.13.tar.gz", hash = "sha256:3fd332842e8759ea5f7eb7789df8aa772ba155216ccf10ef4aa3b0e5b42e1b46"}, + {file = "types_requests-2.28.11.13-py3-none-any.whl", hash = "sha256:94896f6f8e9f3db11e422c6e3e4abbc5d7ccace853eac74b23bdd65eeee3cdee"}, ] [package.dependencies] @@ -3227,14 +3295,14 @@ types-urllib3 = "<1.27" [[package]] name = "types-urllib3" -version = "1.26.25.4" +version = "1.26.25.6" description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, - {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, + {file = "types-urllib3-1.26.25.6.tar.gz", hash = "sha256:35586727cbd7751acccf2c0f34a88baffc092f435ab62458f10776466590f2d5"}, + {file = "types_urllib3-1.26.25.6-py3-none-any.whl", hash = "sha256:a6c23c41bd03e542eaee5423a018f833077b51c4bf9ceb5aa544e12b812d5604"}, ] [[package]] @@ -3251,14 +3319,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -3385,14 +3453,14 @@ files = [ [[package]] name = "websocket-client" -version = "1.4.2" +version = "1.5.1" description = "WebSocket client for Python with low level API options" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.4.2.tar.gz", hash = "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"}, - {file = "websocket_client-1.4.2-py3-none-any.whl", hash = "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574"}, + {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, + {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, ] [package.extras] @@ -3485,20 +3553,77 @@ files = [ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] +[[package]] +name = "y-py" +version = "0.5.4" +description = "" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "y_py-0.5.4-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:62ff3bbe4a82b0f828d40d69e1d60bda4f3566df61883a1c8f95b4ee4c4d9716"}, + {file = "y_py-0.5.4-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c2ed92ebcedf52e019fdc5ef7335a3bc935ce8ca5724fdca138f1c7e2135c119"}, + {file = "y_py-0.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a0462899170f01e213908589b985eabc101b5d2ed8a3545223d2dd8c32eefc0"}, + {file = "y_py-0.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eec62ad463d0d1613456c233c00e813bfeca76d5a972e298c97fb654a5b8c2dc"}, + {file = "y_py-0.5.4-cp310-none-win32.whl", hash = "sha256:7a197f2617b45192174e62b7b914a6eac2afc08cd61c50aaa022fc4a588208ec"}, + {file = "y_py-0.5.4-cp310-none-win_amd64.whl", hash = "sha256:dbad5866eb7df8ee47abd1e7f59837c483c99cd267fcb1e7e735ca4992322cb3"}, + {file = "y_py-0.5.4-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:7b01720ed1f6aa8967a116c1075621fdcd8e3149f6488ac2e70e759c2ca8cb51"}, + {file = "y_py-0.5.4-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:53ed530e9f5e9f1c755e2464c2e4b41a3dc3bd7842f6eb1632ba55f5ec1755d6"}, + {file = "y_py-0.5.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80878aed61e664d6a9035cbd22988ceae384c17d32a7cae2724b161ce558122d"}, + {file = "y_py-0.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:221df2750eb01cd284d9effb0b662a482dea6f7710e81589bc1493ed17983947"}, + {file = "y_py-0.5.4-cp37-none-win32.whl", hash = "sha256:686c90887a76187bb5e04bebe06638d620a8311b13fa2e590ffda9a8ad67a905"}, + {file = "y_py-0.5.4-cp37-none-win_amd64.whl", hash = "sha256:611fb1ecc2487f76ec468cb08ba1083ae3377901f736a18a9792900225085f0e"}, + {file = "y_py-0.5.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d4f4d50bdb3865bbd7a1efbe565111dda7b40d036e20aefae2449bafcde2ca7"}, + {file = "y_py-0.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0cba562ee041d6257b3591a3d1a317c19737a6237e0b863c98039612745c16ba"}, + {file = "y_py-0.5.4-cp38-none-win32.whl", hash = "sha256:940f66407b9c33dcffa1eca51ebc7c4096369209821aa88c6d29ff740a1883ad"}, + {file = "y_py-0.5.4-cp38-none-win_amd64.whl", hash = "sha256:90fb0fc139dab70432e88be6e2012037c95e2f24398056138aa51cb7169c953f"}, + {file = "y_py-0.5.4-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:d8fe5dd795d18b4468d00a34637aa17f5aeceb298963edd80f8faee89cfe4f8e"}, + {file = "y_py-0.5.4-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:510726a81e4d1a187754831a08d2d5c75e57a20d6d63d98ba252ef896e5dac0e"}, + {file = "y_py-0.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11e2339b90c6fb7fe8ef358c68f7623fafa78c9b1ec8d8e703c13d65742ebf5b"}, + {file = "y_py-0.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94683afbc69c5e01f7fa31654561fc15d8b249341faf247f78621e249ac64be1"}, + {file = "y_py-0.5.4-cp39-none-win32.whl", hash = "sha256:fea77730ad7cc94db6098ab7ccea01a5b3298aa0c403088be9e3522883e2ac4b"}, + {file = "y_py-0.5.4-cp39-none-win_amd64.whl", hash = "sha256:5e9f6e39fae774adcc2885081fe4a9a68c54bfd7f1bdeeeeedd6f77328f4ff72"}, + {file = "y_py-0.5.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db126bcf8ca5f1890d93cdbf6d7b08fe23160e2ce70b57c33b5c3592e0cf3374"}, + {file = "y_py-0.5.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e33e5afaafae805ccd53aea1491f49a23c9ff680f107758da39dbc7cf334c956"}, + {file = "y_py-0.5.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d87679c6bf5b0eff7d0b323beb967c73177a62ee866d0dc7f48877543b4df50"}, + {file = "y_py-0.5.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:626f2d2325e5c03ace5d38fddb003c5ec276d4acb9480e4743518c3c88d69ca3"}, + {file = "y_py-0.5.4.tar.gz", hash = "sha256:1ee01dc64427308ccf13ffb6b7fecb9cd27594b76a3c2ff19a23cb33474b1318"}, +] + +[[package]] +name = "ypy-websocket" +version = "0.8.2" +description = "WebSocket connector for Ypy" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ypy_websocket-0.8.2-py3-none-any.whl", hash = "sha256:9049d5a7d61c26c2b5a39757c9ffcbe2274bf3553adeea8de7fe1c04671d4145"}, + {file = "ypy_websocket-0.8.2.tar.gz", hash = "sha256:491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46"}, +] + +[package.dependencies] +aiofiles = ">=22.1.0,<23" +aiosqlite = ">=0.17.0,<1" +y-py = ">=0.5.3,<0.6.0" + +[package.extras] +test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] + [[package]] name = "zipp" -version = "3.11.0" +version = "3.14.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, - {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, + {file = "zipp-3.14.0-py3-none-any.whl", hash = "sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7"}, + {file = "zipp-3.14.0.tar.gz", hash = "sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [extras] @@ -3514,4 +3639,4 @@ virustotal = ["validators"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0f3a3dd8b570aff53d715e179961ff55c2f7d9c6bc796074ca963d5c84229766" +content-hash = "0353ce38c4684e35be4c0543655ac682b6eb09add7de520544697ed88d159cdd" diff --git a/pymisp/api.py b/pymisp/api.py index 082abe8..7c2cfd4 100644 --- a/pymisp/api.py +++ b/pymisp/api.py @@ -3097,7 +3097,7 @@ class PyMISP: data = {'event_id': event_id, 'org_id': organisation_id, 'distribution': distribution, 'message': message} r = self._prepare_request('POST', f'eventDelegations/delegateEvent/{event_id}', data=data) elif event_delegation: - r = self._prepare_request('POST', f'eventDelegations/delegateEvent/{event_id}', data=event_delegation) + r = self._prepare_request('POST', f'eventDelegations/delegateEvent/{event_delegation.event_id}', data=event_delegation) else: raise PyMISPError('Either event and organisation OR event_delegation are required.') delegation_j = self._check_json_response(r) diff --git a/pymisp/data/misp-objects b/pymisp/data/misp-objects index fd603be..3d238ff 160000 --- a/pymisp/data/misp-objects +++ b/pymisp/data/misp-objects @@ -1 +1 @@ -Subproject commit fd603be3283953b68ed48ede7afd2e19f43577ac +Subproject commit 3d238ffc407563e2d81cfcb867f426ae4f0ae898 diff --git a/pymisp/tools/elfobject.py b/pymisp/tools/elfobject.py index 91a9311..647c743 100644 --- a/pymisp/tools/elfobject.py +++ b/pymisp/tools/elfobject.py @@ -36,7 +36,7 @@ class ELFObject(AbstractMISPObjectGenerator): """Creates an ELF object, with lief""" super().__init__('elf', **kwargs) if not HAS_PYDEEP: - logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") + logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]") if pseudofile: if isinstance(pseudofile, BytesIO): self.__elf = lief.ELF.parse(raw=pseudofile.getvalue()) diff --git a/pymisp/tools/fileobject.py b/pymisp/tools/fileobject.py index b427db8..ad2862b 100644 --- a/pymisp/tools/fileobject.py +++ b/pymisp/tools/fileobject.py @@ -33,9 +33,9 @@ class FileObject(AbstractMISPObjectGenerator): def __init__(self, filepath: Optional[Union[Path, str]] = None, pseudofile: Optional[BytesIO] = None, filename: Optional[str] = None, **kwargs) -> None: super().__init__('file', **kwargs) if not HAS_PYDEEP: - logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") + logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]") if not HAS_MAGIC: - logger.warning("Please install python-magic: pip install python-magic.") + logger.warning("python-magic is missing, please install pymisp this way: pip install pymisp[fileobjects]") if filename: # Useful in case the file is copied with a pre-defined name by a script but we want to keep the original name self.__filename = filename diff --git a/pymisp/tools/machoobject.py b/pymisp/tools/machoobject.py index e2f3747..0e817b9 100644 --- a/pymisp/tools/machoobject.py +++ b/pymisp/tools/machoobject.py @@ -36,7 +36,7 @@ class MachOObject(AbstractMISPObjectGenerator): """Creates an MachO object, with lief""" super().__init__('macho', **kwargs) if not HAS_PYDEEP: - logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") + logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]") if pseudofile: if isinstance(pseudofile, BytesIO): self.__macho = lief.MachO.parse(raw=pseudofile.getvalue()) diff --git a/pymisp/tools/peobject.py b/pymisp/tools/peobject.py index 7d0ab3d..011c46e 100644 --- a/pymisp/tools/peobject.py +++ b/pymisp/tools/peobject.py @@ -39,7 +39,7 @@ class PEObject(AbstractMISPObjectGenerator): """Creates an PE object, with lief""" super().__init__('pe', **kwargs) if not HAS_PYDEEP: - logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") + logger.warning("pydeep is missing, please install pymisp this way: pip install pymisp[fileobjects]") if pseudofile: if isinstance(pseudofile, BytesIO): self.__pe = lief.PE.parse(raw=pseudofile.getvalue()) diff --git a/pyproject.toml b/pyproject.toml index ca697f4..c284eaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,19 +47,19 @@ requests = "^2.28.2" python-dateutil = "^2.8.2" jsonschema = "^4.17.3" deprecated = "^1.2.13" -extract_msg = {version = "^0.39.0", optional = true} +extract_msg = {version = "^0.39.1", optional = true} RTFDE = {version = "^0.0.2", optional = true} oletools = {version = "^0.60.1", optional = true} python-magic = {version = "^0.4.27", optional = true} pydeep2 = {version = "^0.5.1", optional = true} lief = {version = "^0.12.3", optional = true} -beautifulsoup4 = {version = "^4.11.1", optional = true} +beautifulsoup4 = {version = "^4.11.2", optional = true} validators = {version = "^0.20.0", optional = true} -sphinx-autodoc-typehints = {version = "^1.21.7", optional = true} +sphinx-autodoc-typehints = {version = "^1.22", optional = true} recommonmark = {version = "^0.7.1", optional = true} reportlab = {version = "^3.6.12", optional = true} pyfaup = {version = "^1.2", optional = true} -publicsuffixlist = {version = "^0.9.2", optional = true} +publicsuffixlist = {version = "^0.9.3", optional = true} urllib3 = {extras = ["brotli"], version = "^1.26.14", optional = true} [tool.poetry.extras] @@ -74,12 +74,12 @@ brotli = ['urllib3'] [tool.poetry.group.dev.dependencies] requests-mock = "^1.10.0" -mypy = "^0.991" -ipython = "^8.8.0" -jupyterlab = "^3.5.2" -types-requests = "^2.28.11.8" -types-python-dateutil = "^2.8.19.6" -types-redis = "^4.4.0.3" +mypy = "^1.0.1" +ipython = "^8.10.0" +jupyterlab = "^3.6.1" +types-requests = "^2.28.11.13" +types-python-dateutil = "^2.8.19.7" +types-redis = "^4.5.1.1" types-Flask = "^1.1.6" pytest-cov = "^4.0.0"